首页 > 解决方案 > 交叉编译 linux 模块缺少包含文件

问题描述

我在为 Raspberry Pi 4 交叉编译模块时遇到了一些问题。

  1. 使用的编译器是:aarch64-linux-gnu-.
  2. 使用的内核是: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 的模块?

任何帮助是极大的赞赏。

标签: linuxlinux-kernellinux-device-driverembedded-linuxraspberry-pi4

解决方案


知道了!

这些文件是自动生成的,有一个方便的 make 命令用于为树外内核模块准备构建环境。我所做的是运行

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- modules_prepare

在内核源代码中。

希望这可以帮助那些不花时间在这样一个简单的错误上的人。


推荐阅读