我是C编程语言的新手,目前正试图通过重新编译内核来向Linux内核添加新的syscall
。
当我阅读源代码时,我发现很难定位头文件的路径。
例如:
#include <linux/kernel.h> /* for printk */
#include <linux/syscalls.h> /* for SYSCALL_DEFINE1 macro */
SYSCALL_DEFINE1(printmsg, int, i)
{
printk(KERN_DEBUG "Hello! This is a msg %d", i);
return 1;
}
这是我自定义的一个系统调用,我编辑了kernel/
文件夹和syscall_64.tbl
中的MakeFile,重新编译后,工作正常,没有编译错误。
但是我现在的问题是预处理器如何解析<linux/syscalls.h>
这样的路径,根据我之前的理解,预处理器会到/usr/include
文件夹中查找,当然/usr/include
里面有***no***linux/syscalls.h
。
我发现linux/syscalls.h
实际上是在linux的项目include/linux/
中。
我想知道是什么使得项目中的预处理器搜索与include " "
一样,而实际上它使用的是<>
。
我想知道这是不是因为makefile的某个部分?如果是,makefile中的哪个命令可以使这种情况发生?
谢谢你的帮助,如果我误解了什么,请告诉我。
1条答案
按热度按时间tgabmvqs1#
预处理器有许多内置搜索路径(
gpp -print-search-dirs
),其他路径可以在运行时通过-Idir
选项添加。