使用 ndk r8 编译cm的android内核,内核可以正常启动,但无法加载无线模块
# insmod *
insmod: init_module 'bcm4329.ko' failed (No such file or directory)
# busybox insmod *
insmod: can't insert 'bcm4329.ko': unknown symbol in module, or unknown parameter
查看内核日志提示
<4>[ 5335.223480] bcm4329: Unknown symbol _GLOBAL_OFFSET_TABLE_ (err 0)
Google了一下,找到了两种解决办法
I get the same thing, 'arm-eabi-4.4.0/bin/arm-eabi-' seems to work fine though.
1、采用通用交叉编译器编译模块
注意
用r5b以上的NDK编译出来的内核模块会失败(提示Unknown symbol _GLOBAL_OFFSET_TABLE_),直接影响是没有WLAN,在Makefile改一下,对模块的编译加上-fno-pic参数就可以了。
--- a/Makefile
+++ b/Makefile
@@ -325,7 +325,7 @@ CHECK = sparse
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
-Wbitwise -Wno-return-void $(CF)
-MODFLAGS = -DMODULE
+MODFLAGS = -DMODULE -fno-pic
CFLAGS_MODULE = $(MODFLAGS)
AFLAGS_MODULE = $(MODFLAGS)
LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds
2、模块添加 -fno-pic参数
电脑上正好有arm交叉编译器,所以我采用的第一种方法
make modules CROSS_COMPILE=arm-linux- ARCH=arm -j 4
模块成功加载!