自定义Android内核-无法加载内核模块

3
我在Android上加载内核模块时遇到了问题,内核是从64位的Linux机器进行交叉编译的。内核启动正常,但无法加载任何模块(即使是用于WiFi的bcm4329.ko)。
使用CWM“从zip安装”功能在恢复模式下将内核和模块刷入设备(HTC Desire)。
手动尝试加载模块:
root@android:/system/lib/modules/dtbaker2-ics # ls -l -rw-rw-rw- root root 287308 2013-05-05 08:50 bcm4329.ko root@android:/system/lib/modules/dtbaker2-ics # depmod -a root@android:/system/lib/modules/dtbaker2-ics # modprobe bcm4329 modprobe: 'dtbaker2-ics/bcm4329.ko': unknown symbol in module or invalid parameter root@android:/system/lib/modules/dtbaker2-ics # insmod bcm4329.ko insmod: init_module 'bcm4329.ko' failed (No such file or directory) root@android:/system/lib/modules/dtbaker2-ics # modinfo bcm4329.ko filename: bcm4329.ko license: GPL v2 alias: sdio:c*v02D0d4319* alias: sdio:c*v02D0d4329* alias: sdio:c*v02D0d0493* alias: sdio:c*v02D0d0492* alias: sdio:c*v02D0d0000* depends: vermagic: 2.6.38.8-dtbaker2-ics+ preempt mod_unload ARMv7 parm: dhd_oob_gpio_num:DHD oob gpio number parm: clockoverride:SDIO card clock override modprobe或insmod后的dmesg输出:
[ 1525.047424] bcm4329: Unknown symbol _GLOBAL_OFFSET_TABLE_ (err 0)
我的自定义内核的/proc/config.gz输出与此ICS ROM的新安装输出相同(除了日期)。
一些论坛帖子提到了SLAB / SLUB和模块加载问题,因此我甚至尝试重新构建初始的SLAB内核(dtbaker-ics),并使用SLUB选项(dtbaker2-ics),但仍然存在相同的问题。
这可能是64位交叉编译问题吗?内核正常工作但未加载模块是否奇怪?
1个回答

4
啊!"未知符号_GLOBAL_OFFSET_TABLE_"错误:https://groups.google.com/forum/?fromgroups=#!topic/android-kernel/dzEIOVuxtEo 我记得早期我曾经使用预编译工具链arm-linux-androideabi-4.4.3而非arm-eabi-4.4.0,因为在64位ubuntu上arm-eabi-4.4.0对我来说不起作用(耸肩)。
根据以上google groups帖子,我修改了我的内核Makefile,从这里:
MODFLAGS = -DMODULE -march=armv7-a -mfpu=vfpv3 -ftree-vectorize 到这里:
MODFLAGS = -DMODULE -march=armv7-a -mfpu=vfpv3 -ftree-vectorize -fno-pic
然后重新构建内核模块:
make clean make modules
把我的新模块复制回android,就可以运行了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接