我最近编译了一个自定义内核,它定义了一个名为“AF_CUSTOM”的新地址族/协议族
这样,我的内核源代码中的 include/linux/socket.h 已更改,如此处所示(以及 PF_CUSTOM):
#define AF_NFC 39 /* NFC sockets */
#define AF_CUSTOM 40 /* Custom sockets */
#define AF_MAX 41 /* For now.. */
我计划实现 AF_CUSTOM,但作为快速的健全性检查,我决定修改一个典型的示例 c 套接字程序,看看用“socket(AF_CUSTOM, SOCK_STREAM, 0)”替换“socket(AF_INET, SOCK_STREAM, 0)”是否会编译,但它没有。使用 gcc 编译时出现以下错误:'AF_CUSTOM' undeclared
我认为它至少会编译,因为 AF_CUSTOM 应该在当前内核中定义。
如我所见,问题在于 gcc 正在使用默认内核头文件来解析“#include <sys/socket.h>”,而不是与当前正在运行的自定义内核相对应的头文件。我尝试在 gcc 上同时使用 -I 和 -isystem 选项将其引导到 Ubuntu 似乎为其他内核放置内核头文件的路径,因为它们似乎与我的 Google 研究相关,但它们没有帮助。
我的问题是:如何针对当前运行的自定义内核的头文件而不是默认的内核头文件编译 C 程序。
我试过这个:
gcc -isystem /usr/src/linux-headers-3.8.8-custom.5/ sendOnCustom.c -o sendOnCustom
仅供参考,使用 make-kpkg 编译。另外,这是我的第一个问题,希望可以理解。