我正在尝试编译模块。我可以通过调用make来实现,make调用的是
make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules
但我想看到预处理后的输出,所以我试着手动用 cc -E file.c
. 问题是,它不能看到头 <linux/init.h>
:
fatal error: linux/init.h: No such file or directory
#include <linux/init.h>
我注意到,当调用make的时候,它首先进入这个dir /usr/src/linux-headers-5.0.0-38-generic
可能有头,但我不知道在哪里。我已经尝试过 gcc -E -I'/usr/src/linux-headers-5.0.0-38-generic file.c
但还是一样的错误。那么,怎么可能包含内核头文件(这一点 <linux/init.h> is
)在用户模式下--这就是如何从另一个目录中包含头文件?
PS: 按照 @uzsolt 在评论中的建议,我加入了 include
到路径的尽头。gcc -I /usr/src/linux-headers-5.0.0-38-generic/include
. 但又少了另一个头- <asm/linkage.h>
我不知道这个头在哪个目录下。
你应该使用 find
命令。find /usr/src/linux-headers-5.0.0-38-generic -name MISSED_FILE
.
我不知道你的linux发行版,但我认为你应该把这些参数添加到 gcc
:
-I/usr/src/linux-headers-5.0.0-38-generic/include -I/usr/src/linux-aws-headers-5.3.0-1003/arch/x86/include/