交叉编译linux模块缺少include文件



我在为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的情况下构建一个我不知道的模块?

非常感谢您的帮助。

明白了!

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

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

在内核源代码内部。

希望这能帮助人们不要把时间花在这样一个简单的错误上。

最新更新