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

时间:2013-05-05 09:30:51

标签: android

我在Android上加载内核模块时遇到问题,内核已经从64位的linux盒子中进行了交叉编译。内核启动很好,它只是不会加载任何模块(甚至bcm4329.ko为wifi)

在恢复过程中,使用CWM“从zip安装”功能将内核和模块闪存到设备(HTC Desire)上。

root@android:/data # uname -a                                                  
Linux localhost 2.6.38.8-dtbaker2-ics+ #3 PREEMPT Sun May 5 18:50:10 EST 2013 armv7l GNU/Linux

尝试手动加载模块:

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和模块加载问题,所以我甚至尝试使用SLUB选项(dtbaker2-ics)重建初始SLAB内核(dtbaker-ics)并且存在相同的问题。

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

1 个答案:

答案 0 :(得分:4)

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

我记得很早就换了使用prebuilt toolchain arm-linux-androideabi-4.4.3而不是arm-eabi-4.4.0,因为arm-eabi-4.4.0在64bit ubuntu(耸肩)上对我不起作用

根据上面的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,然后她去了!