1. 程式人生 > >ndk 編譯android核心模組無法載入 解決方法

ndk 編譯android核心模組無法載入 解決方法

使用 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

模組成功載入!