为 OPENWRT 编译额外的内核模块

举个例子,如果想在路由器上跑 OpenWRT 并未包含的 RTL8188EU 驱动模块该怎么办呢?在这里给出一种快捷但是比较 dirty 的办法(否则应该自己写个 package )。

首先得有编译固件时留下的 kernel 的源码,包括编译过程中生成的一些文件。

下面假定 OpenWRT 的源码目录在 /some/path/openwrt ,内核目录以及 Staging DIR 分别为其下的 build_dir/target-mips_r2_uClibc-x.x.x.x/linux-target_generic/linux-x.x.x和 staging_dir ,Toolchain 编译好后会存放在 Staging DIR 下的 toolchain-mips_r2_gcc-x.x-linaro_uClibc-x.x.x.x 目录里,前缀为 mips-openwrt-linux- 。目标机器指令集为 MIPS32 R2 。

那么,我们可以在内核驱动的目录下写一个脚本来帮助编译:

代码
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/sh
PREFIX= "/media/study/wrt/openwrt_trunk"
ARCH=mips
KSRC= "$PREFIX/build_dir/target-mips_r2_uClibc-0.9.33.2/linux-ar71xx_generic/linux-3.10.9"
STAGING_DIR= "$PREFIX/staging_dir"
TOOLCHAIN_DIR= "$STAGING_DIR/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/bin"
CROSS_COMPILE= "mips-openwrt-linux-"
 
export STAGING_DIR=$STAGING_DIR
export PATH=$TOOLCHAIN_DIR:$PATH
make clean
make ARCH=$ARCH CROSS_COMPILE=$CROSS_COMPILE KSRC=$KSRC

一般情况下厂商的 Makefile 都会帮你传递 ARCH 、CROSS_COMPILE和 KSRC 这几个变量,如 rtl8188eu 的驱动(https://github.com/lwfinger/rtl8188eu.git )。有的时候需要阅读 Makefile 并做些修改。

最后把生成的内核模块 scp 到装有对应固件的路由器上的 /lib/modules/<kernel_version>/ 下即可。使用 insmod 手动装入或者在 /etc/modules.d/ 下创建一个配置文件来完成开机自动加载。

你可能感兴趣的:(为 OPENWRT 编译额外的内核模块)