树莓派4交叉编译Linux内核模块缺失asm/types.h报错问题求助
问题1:asm/types.h 缺失原因与对应路径
asm/types.h 不是Linux内核源码自带的静态文件,属于架构配置完成后自动生成的导出头文件。对于arm64架构的linux-5.10内核,该文件生成后会存放在arch/arm64/include/generated/asm/目录下,内核构建时会自动将该路径加入头文件搜索链,你遇到的报错是因为所用的内核源码没有提前完成arm64架构的配置和头文件生成步骤。
修复步骤:
- 进入内核源码目录:
cd /opt/linux-5.10.42 - 生成arm64架构的默认配置(如果是为树莓派4编译,建议直接使用树莓派官方提供的内核配置文件替换生成的
.config,避免后续模块加载不兼容):make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig - 生成架构相关的导出头文件:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- headers_install
执行完成后重新编译你的内核模块即可解决头文件缺失报错。
问题2:是否可以不引入linux/module.h编译内核模块
不存在合法的实现方案。linux/module.h包含了内核模块必需的全部基础定义:包括模块声明宏、加载/卸载函数注册逻辑、内核符号导出规则、版本校验标记等。缺失该头文件时,内核构建系统无法识别编译目标为可加载内核模块,也无法完成模块的合法性校验,你无法得到可以正常加载运行的内核模块产物。
内容的提问来源于stack exchange,提问作者Tristan Šneider
相关产品推荐
相关产品推荐

