You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

交叉编译未知嵌入式Linux内核模块时的加载问题

嵌入式Linux交叉编译内核模块问题

我正在学习嵌入式Linux交叉编译,最终目标是为一款不支持RTL8188无线USB适配器的老旧嵌入式Linux设备编译对应的内核模块,目前借助Buildroot和Bill Van Leeuwen的指南搭建基础交叉编译环境。

目标设备架构信息

通过SSH探测目标设备,获取到以下架构信息:

Processor:      ARM926EJ-S
Architecture:   armv5tejl
Kernel Version: 4.12.0BSP8.44.10.38 (unsurprisingly a custom kernel)
GCC Version:    11.2.0
LibC:           uClibc 1.0.39

Buildroot配置(仅展示与默认值不同的设置)

据此配置Buildroot:

--- Target Options ---
Target Architecture:          ARM little-endian
Target Architecture Variant:  arm926t
Target ABI:                   EABI
--- Toolchain ---
Toolchain Type:               External Toolchain
Toolchain:                    Custom Toolchain
Toolchain Origin:             armv5-eabi--glibc--stable-2022.08-1.tar.bz2 from Bootlin
Toolchain GCC version:        11.x
Toolchain Kernel Headers:     4.9.x
Toolchain C Library           uClibc
--- Kernel ---
Kernel Version:               4.12
Kernel Configuration:         In-tree defconfig file
Kernal Defconfig Name:        multi_v5

初始模块加载失败问题

Buildroot编译成功,也能编译Bill的示例hello.c内核模块,但模块无法在目标设备上运行:

# insmod hello.ko
insmod: can't insert 'hello.ko': invalid module format

目标设备上的dmesg未显示额外错误解释模块格式问题。

modinfo输出对比

从目标设备复制一个现有驱动并运行modinfo,与编译的hello.ko输出对比:

$ modinfo hello.ko
filename:       ~/kmod_hello/hello.ko
license:        GPL
vermagic:       4.12.0BSP8.44.10.38 preempt mod_unload ARMv5 p2v8
...
$ modinfo 8192cu.ko
filename:       ~/kmod_hello/8192cu.ko
license:        GPL
vermagic:       4.12.0BSP8.44.10.38 preempt mod_unload modversions ARMv5
...

交叉编译的.ko文件与设备上现有.ko文件的唯一区别是p2v8内核标志,疑惑这是否会导致模块完全无法工作,且无论如何配置Buildroot内核都无法移除该标志。


编辑1:问题推进

调整并修改multi_v5_defconfig内核配置的默认值后,编译环境几乎与正常.ko文件匹配:

$ modinfo hello.ko | grep vermag
vermagic:       4.12.0BSP8.44.10.38 preempt mod_unload modversions ARMv5 p2v8
$ modinfo 8192cu.ko | grep vermag
vermagic:       4.12.0BSP8.44.10.38 preempt mod_unload modversions ARMv5

现在运行insmod时,dmesg终于给出错误信息:

hello: disagrees about version of symbol module_layout
hello: disagrees about version of symbol module_layout

问题推进到需要解决module_layout版本匹配的问题,初步了解到这并非易事。

内容的提问来源于stack exchange,提问作者Axel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:59:51