找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
发表于 2018-1-13 10:29 | 显示全部楼层 |阅读模式
本帖最后由 鲲翔 于 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 收起 理由
easyteacher + 1 强大的恩山!(以下重复1万次)

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2018-11-16 23:03 | 显示全部楼层
战略标记
好文共读:【OpenWrt】使用SDK编译Linux内核驱动
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-11-16 23:15 | 显示全部楼层

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

使用道具 举报

发表于 2018-11-17 00:22 | 显示全部楼层
感谢  如果我已有别人编写的固件已安装,但有的驱动由于内核冲突不能正常安装,按这个方法编译不知冲突不?
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2018-12-1 15:56 | 显示全部楼层
这样能编译出来支持已有固件的驱动ipk吗
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 21:41

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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