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

问题描述:

我在加载Android上的内核模块时出现问题,内核已经从64位linux盒子交叉编译。内核启动正常,它只是不会加载任何模块(甚至bcm4329.ko无线)自定义Android内核 - 无法加载内核模块

使用CWM“从zip安装”功能恢复内核和模块闪烁到设备(HTC Desire)。

[email protected]:/data # uname -a             
Linux localhost 2.6.38.8-dtbaker2-ics+ #3 PREEMPT Sun May 5 18:50:10 EST 2013 armv7l GNU/Linux

试图加载手动模块:

[email protected]:/system/lib/modules/dtbaker2-ics # ls -l 
-rw-rw-rw- root  root  287308 2013-05-05 08:50 bcm4329.ko 
[email protected]:/system/lib/modules/dtbaker2-ics # depmod -a 
[email protected]:/system/lib/modules/dtbaker2-ics # modprobe bcm4329    
modprobe: 'dtbaker2-ics/bcm4329.ko': unknown symbol in module or invalid parameter 
[email protected]:/system/lib/modules/dtbaker2-ics # insmod bcm4329.ko   
insmod: init_module 'bcm4329.ko' failed (No such file or directory) 
[email protected]:/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和模块加载问题,所以我甚至尝试用SLUB选项(dtbaker2-ics)重建初始SLAB内核(dtbaker-ics),并且存在相同的问题。

这是一个64位交叉编译问题吗?内核工作正常但模块没有加载是否奇怪?

啊! “未知符号_GLOBAL_OFFSET_TABLE_” 错误:https://groups.google.com/forum/?fromgroups=#!topic/android-kernel/dzEIOVuxtEo

我记得早在我换到使用预建工具链ARM-Linux的androideabi-4.4.3,而不是ARM-EABI-4.4.0由于ARM-EABI-4.4.0没有为我工作在64位的Ubuntu(耸肩)

按照上述谷歌网上论坛帖子,修改了内核的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,离开她去!