linux -/usr/include/linux和linux内核源码中的include文件夹有什么区别?

标签 linux include linux-kernel

在新安装的 Ubuntu 上,我在 /usr/include/linux/usr/src/kernel-version-headers/include/linux 中找到了内核头文件>

它们是否相同?

最佳答案

它们非常不同; /usr/include/linux header 是编译系统标准 C 库时使用的 header 。它们由 C 库打包拥有,并与标准 C 库同步更新。它们的存在是为了向内核提供 userland 接口(interface),正如 C 库所理解和“代理”1 的那样。

/usr/src/linux-headers-$(uname -r)/include/linux header 通过 /lib/modules/$(uname -r)/使用构建 符号链接(symbolic link)。它们由内核头文件包拥有,并与内核同步更新。这些是内核头文件的子集,并且是构建树外内核模块所需的足够的 Kbuild 系统。这些文件代表内核内部——如果模块要正确理解内存中的对象,就必须针对这些文件进行构建。有关详细信息,请参阅内核的 Documentation/kbuild/modules.txt 文件。


1:“中介”是我选择的第一个词,但它暗示某种访问控制,事实并非如此。 “代理”意味着第三方流程,但事实并非如此。考虑:当 C 程序调用 _exit() 时,它实际上是在调用标准 C 库的 _exit() wrapper,后者调用 exit(2) 系统调用。 select(2) 接口(interface)对可跟踪的文件描述符数量有上限,并且该限制被编译到标准 C 库中。即使扩展了内核的接口(interface),C库也需要重新编译。

关于linux -/usr/include/linux和linux内核源码中的include文件夹有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9094237/

相关文章:

杀死 parent 后关闭文件子描述符?

linux - 在 linux 上使用 mingw 与 clang 交叉编译

xml - 更新 xml 值的脚本

c - C 中的 Fork() 函数

linux - 调度程序中的 sched_feat 宏是什么意思

c - 访问超出报告容量的 block 设备数据

c - 在 C 中包含 Guards 语法

java - 动态发送 JSP 并将其包含在另一个 JSP 中

android - findViewById在<include> d View 内的LinearLayout上返回null

sockets - 在UDP套接字上即时更改SOL_SOCKET,SO_RCVBUF的可预期行为是什么?