linux - 交叉编译 linux 模块缺少包含文件
问题描述
我在为 Raspberry Pi 4 交叉编译模块时遇到了一些问题。
- 使用的编译器是:
aarch64-linux-gnu-
. - 使用的内核是:
linux-5.10.42
并且编译时的错误如下:
make -C /opt/linux-5.10.42 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- M=/home/x/build/linux-driver-gpio-customled modules
make[1]: Entering directory '/opt/linux-5.10.42'
CC [M] /home/x/build/linux-driver-gpio-customled/customled.o
In file included from ./include/linux/types.h:6,
from ./include/linux/list.h:5,
from ./include/linux/module.h:12,
from /home/x/build/linux-driver-gpio-customled/customled.c:1:
./include/uapi/linux/types.h:5:10: fatal error: asm/types.h: No such file or directory
5 | #include <asm/types.h>
| ^~~~~~~~~~~~~
compilation terminated.
make[2]: *** [scripts/Makefile.build:279: /home/x/build/linux-driver-gpio-customled/customled.o] Error 1
make[1]: *** [Makefile:1821: /home/x/build/linux-driver-gpio-customled] Error 2
make[1]: Leaving directory '/opt/linux-5.10.42'
make: *** [Makefile:5: default] Error 2
所以我的问题如下:这个文件 asm/types.h 应该从哪里来?据我所知,它应该包含在内核 arch/arm64/include/asm/ 子目录中。但事实并非如此。其他架构,即 x86 也有。有没有另一种方法来构建一个不包括我不知道的 linux/module.h 的模块?
任何帮助是极大的赞赏。
解决方案
知道了!
这些文件是自动生成的,有一个方便的 make 命令用于为树外内核模块准备构建环境。我所做的是运行
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_prepare
在内核源代码中。
希望这可以帮助那些不花时间在这样一个简单的错误上的人。
推荐阅读
- aspose - 如何获取 StackedColumn 图表中列的动态宽度
- html - Vue.JS 不读取 json 数据
- mysql - 如何在 SQL 脚本中传递预定义的值?
- c# - wpf界面元素被ocx控件覆盖
- postgresql - Activemq postgresql 在 activemq_msgs 表中将消息详细信息和内容记录为 JSON
- c - 如何在 x86_64 中使用 clang-8 的“影子调用堆栈”功能?
- javascript - iOS 通用链接在 Twitter 应用程序中不起作用,但 android 应用程序链接有效
- php - 在 PHP 中使用 jquery ajax 提交条件表单元素
- node.js - 如何使用 Jest 和 Enzyme 在构造函数中测试组件参数
- python - PySpark 将空字符串转换为 null 并在 Parquet 中写入