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

树莓派4编译内核模块遇Exec format error问题求助(交叉编译内核)

问题分析与解决

根本原因

  1. 架构不兼容导致fixdep无法执行:你的内核是在x86服务器交叉编译生成的,编译内核过程中生成的scripts/basic/fixdep是x86架构的可执行文件。树莓派4采用aarch64(ARM64)架构,无法直接运行x86二进制程序,因此出现Exec format error。
  2. 编译器版本不匹配:内核由Debian 10的aarch64-linux-gnu-gcc 10.2.1编译,而你当前在树莓派上使用Ubuntu的gcc 11.2.0编译模块。虽然这只是警告,但编译器版本差异可能导致模块与内核的ABI(应用二进制接口)不兼容,引发潜在的加载或运行问题。

解决方法

方法一:在树莓派上重新编译内核辅助工具

进入内核头文件目录,重新编译scripts目录下的所有工具,生成适配aarch64架构的版本:

cd /usr/src/linux-headers-5.15.65-rt49-preemptrt-full-raspi
make scripts

完成后回到模块目录,重新执行编译命令:

make -C /lib/modules/$(uname -r)/build M=/home/ubuntu/dont-trace modules

方法二:在x86服务器上交叉编译模块

利用x86服务器上已有的交叉编译链,直接编译出适配aarch64的模块,再拷贝到树莓派加载:

# 在x86服务器上执行
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C /path/to/your/kernel/source M=/path/to/dont-trace modules

将编译生成的dont_trace.ko文件通过scp或其他方式拷贝到树莓派,使用insmod dont_trace.ko加载模块。

方法三:匹配内核编译的编译器版本

在树莓派上安装与内核编译版本一致的gcc,避免ABI不兼容问题:

sudo apt update
sudo apt install gcc-10

编译模块时指定使用gcc-10:

make CC=gcc-10 -C /lib/modules/$(uname -r)/build M=/home/ubuntu/dont-trace modules

此方法建议配合方法一使用,彻底解决工具链和架构的双重问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:45:34