gpt4 book ai didi

c - 针对自定义 Linux 内核编译简单 C 程序的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:39 24 4
gpt4 key购买 nike

我最近编译了一个自定义内核,它定义了一个名为“AF_CUSTOM”的新地址族/协议(protocol)族

例如,我的内核源代码中的 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 套接字程序,看看是否将“套接字(AF_INET,SOCK_STREAM,0)”替换为“套接字(AF_CUSTOM,SOCK_STREAM,0)”会编译,但它没有。使用 gcc 编译时出现以下错误:'AF_CUSTOM' undeclared我假设它至少可以编译,因为 AF_CUSTOM 应该在当前内核中定义。

在我看来,问题是 gcc 使用默认内核头文件来解析“#include ”,而不是与当前正在运行的自定义内核相对应的头文件。我尝试在 gcc 上同时使用 -I 和 -isystem 选项将其定向到 Ubuntu 似乎为其他内核放置内核头文件的路径,因为它们似乎与我的 Google 研究相关,但它们没有帮助。

我的问题是:如何根据当前运行的自定义内核的 header 而不是默认内核 header 编译 C 程序。

我试过这个:gcc -isystem/usr/src/linux-headers-3.8.8-custom.5/sendOnCustom.c -o sendOnCustom

仅供引用,使用 make-kpkg 编译。另外,这是我的第一个问题,我希望它是可以理解的。

最佳答案

Linux 系统上的常见做法是使用 Linux 内核 header 的“净化”副本来构建软件。可能 GCC 正在寻找不在/usr/src/linux 中的头文件,而是在其他一些位置(这可能是特定于发行版的——在我运行 Gentoo 的机器上,这些头文件位于/usr/include/asm,/usr/include/linux, ...).

此页面有更多相关信息:http://headers.cross-lfs.org/

我的猜测是,当你编译你的包含路径时,你需要非常确定其中有/usr/src/linux (或者你修改过的标题所在的任何地方),并且该行至少需要在另一行之前出现 header ,如果您不能完全省略它们的话。

另一件需要注意的事情是,从您的帖子来看,您似乎希望为当前内核定义的任何符号都在各处定义 - 事实并非如此。每当您编译软件时,编译器看到的定义与正在运行的内核无关。编译器只知道如何搜索其包含路径以尝试查找您指定的 header ,并检查这些 header 。

关于c - 针对自定义 Linux 内核编译简单 C 程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16554026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com