STM32MP25F7-EV1平台OpenSTDroid下btusb.ko模块insmod兼容问题求助
解决STM32MP25F7-EV1平台btusb.ko模块insmod格式错误问题
核心问题定位
模块vermagic(6.1.78-00024-ge4076639eb90)与设备内核vermagic(6.1.78-00024-gf31b8a21afa8)不匹配,这是导致Exec format error的直接原因——内核模块对内核源码的commit哈希、配置、编译环境有严格依赖,哪怕是同一版本号下的不同commit,模块也无法兼容。
针对性修复步骤
1. 切换到与设备完全一致的内核源码commit
- 从设备获取完整内核commit信息:执行
cat /proc/version,提取输出中commit串(即gf31b8a21afa8对应的完整哈希)。 - 在内核目录切换到该commit:
cd <AOSP_ROOT>/kernel/stm32mp2 git checkout gf31b8a21afa8 - 若本地无该commit,先拉取远程仓库所有内容:
git fetch origin
2. 复用设备内核的.config配置
- 从设备导出当前内核配置:
adb pull /proc/config.gz . gzip -d config.gz mv config <AOSP_ROOT>/kernel/stm32mp2/.config - 执行命令确保配置与内核commit兼容:
注:make ARCH=arm64 CROSS_COMPILE=aarch64-linux-android- olddefconfigCROSS_COMPILE需使用OpenSTDroid构建系统提供的工具链,路径通常为<AOSP_ROOT>/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-
3. 编译匹配的btusb模块
- 直接基于匹配的.config和commit编译单个模块,避免全量编译内核引入新差异:
cd <AOSP_ROOT>/kernel/stm32mp2 make ARCH=arm64 CROSS_COMPILE=<正确工具链前缀> M=drivers/bluetooth modules - 检查模块vermagic是否匹配:
确认输出与设备modinfo btusb.ko | grep vermagic/proc/version中的vermagic完全一致。
4. 验证模块加载
- 推送模块到设备:
adb push btusb.ko /system/lib/modules/ - 加载模块:
adb shell insmod /system/lib/modules/btusb.ko
额外注意事项
- 确保交叉编译工具链版本与OpenSTDroid构建设备内核时的版本完全一致,工具链差异也可能导致vermagic不匹配或二进制格式问题。
- 优先使用OpenSTDroid提供的预构建内核源码包(含正确commit和.config),避免自行拉取源码时的commit偏差。
内容的提问来源于stack exchange,提问作者ozi
相关产品推荐
相关产品推荐

