找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 5075|回复: 4

好文共读:【OpenWrt】使用SDK编译Linux内核驱动

[复制链接]
本帖最后由 鲲翔 于 2018-1-13 10:30 编辑

原文:
http://blog.csdn.net/wr132/article/details/78946200



    很多路由器都有USB接口,当路由器搭载OpenWrt(LEDE)系统后,理论上可以使用任何USB接口的设备,常见的设备比如各种存储设备、USB网卡等。但是如果内核中没有集成相关的驱动,并且源中也没有提供该设备的kmod,那么就需要自己寻找驱动源码并编译为驱动模块。
    OpenWrt官方提供了一套编译系统,使用feed/package模式,但是如果不是专门开发OpenWrt,熟悉这一套开发环境需要很多时间和精力,如果我们只需要编译标准的Linux驱动模块,可以使用OpenWrt提供的SDK。

下载SDK

    OpenWrt官方下载链接

    LEDE官方下载链接
        选择固件版本,如果可以,尽量选择最新的稳定版本
        根据路由器的处理器架构选择相应的固件,比如MT7620为mips架构,那么需要选择ramips
        在固件所在的目录,可以找到适配于当前版本的SDK,直接下载即可

确定相关路径

解压SDK后,需要使用其中的内核源码以及交叉编译器,下面的路径均以MT7620的SDK为例。

内核源码所在目录:

  1. ${SDK_ROOT}/build_dir/target-mipsel_24kc_musl-1.1.16/linux-ramips_mt7620/linux-4.4.92
复制代码

交叉编译器所在的目录

  1. ${SDK_ROOT}/staging_dir/toolchain-mipsel_24kc_gcc-5.4.0_musl-1.1.16/bin
复制代码

编写编译脚本

编译Linux内核模块的时候,比较重要的几个环境变量:

  1. ARCH:处理器架构
  2. CROSS_COMPILE:交叉编译器的路径前缀
  3. KVER:内核版本
  4. KSRC:内核源码路径
  5. STAGING_DIR:OpenWrt编译器指定的目录,如果不设置会有警告
复制代码

所以可以在内核驱动源码路径下编写一个build.sh的脚本,用来向make工具传递环境变量。模板如下:

  1. #!/bin/bash
  2. ARCH=arm
  3. CROSS_COMPILE=/home/ryan/develop/lede/lede-sdk-17.01.4-brcm2708-bcm2709_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/staging_dir/toolchain-arm_cortex-a7+neon-vfpv4_gcc-5.4.0_musl-1.1.16_eabi/bin/arm-openwrt-linux-muslgnueabi-
  4. KVER=4.4.92
  5. KSRC=/home/ryan/develop/lede/lede-sdk-17.01.4-brcm2708-bcm2709_gcc-5.4.0_musl-1.1.16_eabi.Linux-x86_64/build_dir/target-arm_cortex-a7+neon-vfpv4_musl-1.1.16_eabi/linux-brcm2708_bcm2709/linux-4.4.92
  6. STAGING_DIR=./staging_dir
  7. make ARCH=${ARCH} \
  8.     CROSS_COMPILE=${CROSS_COMPILE} \
  9.     KVER=${KVER} \
  10.     KSRC=${KSRC} \
  11.     STAGING_DIR=${STAGING_DIR}
复制代码

因为许多内核驱动源码的Makefile都提供了很多设备的配置信息,所以在编译之前,需要看一下是否提供了相关的环境变量,然后执行build.sh即可

评分

参与人数 1恩山币 +1 收起 理由
easyt*** + 1 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
战略标记
好文共读:【OpenWrt】使用SDK编译Linux内核驱动
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报


战略标记
好文共读:【OpenWrt】使用SDK编译Linux内核驱动
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

感谢  如果我已有别人编写的固件已安装,但有的驱动由于内核冲突不能正常安装,按这个方法编译不知冲突不?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

这样能编译出来支持已有固件的驱动ipk吗
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-30 00:54

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表