3

我在 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- 根根 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”:模块中的未知符号或无效参数
root@android:/system/lib/modules/dtbaker2-ics # insmod bcm4329.ko          
insmod: init_module 'bcm4329.ko' 失败(没有这样的文件或目录)
root@android:/system/lib/modules/dtbaker2-ics # modinfo bcm4329.ko             
文件名:bcm4329.ko
许可证:GPL v2
别名:sdio:c*v02D0d4319*
别名:sdio:c*v02D0d4329*
别名:sdio:c*v02D0d0493*
别名:sdio:c*v02D0d0492*
别名:sdio:c*v02D0d0000*
要看:        
vermagic:2.6.38.8-dtbaker2-ics+ 抢占 mod_unload ARMv7
参数:dhd_oob_gpio_num:DHD oob gpio 编号
parm:clockoverride:SDIO 卡时钟覆盖

modprobe 或 insmod 后的 dmesg 输出:

[1525.047424] bcm4329:未知符号_GLOBAL_OFFSET_TABLE_(错误0)

我自定义构建的内核的 /proc/config.gz 输出与全新安装此 ICS ROM 的输出相同(日期除外)。

一些论坛帖子提到了 SLAB/SLUB 和模块加载问题,所以我什至尝试使用 SLUB 选项 (dtbaker2-ics) 重建初始 SLAB 内核 (dtbaker-ics) 并且存在相同的问题。

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

4

1 回答 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 因为 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

然后重新构建内核模块:

打扫干净
制作模块

并将我的新模块复制回android,她走了!

于 2013-05-05T09:33:55.883 回答