在新安装的Ubuntu上,我在/usr/include/linux
和/usr/src/kernel-version-headers/include/linux
它们是否相同?
答案 0 :(得分:9)
他们非常不同; /usr/include/linux
标头是编译系统标准C库时使用的标头。它们归C库包装所有,并与标准C库保持同步更新。它们的存在是为了向内核提供 userland 接口,如C库所理解和“代理” 1 。
/usr/src/linux-headers-$(uname -r)/include/linux
标头通过/lib/modules/$(uname -r)/build
符号链接使用。它们由内核头文件包拥有,并与内核保持同步更新。这些是内核头文件的子集,以及构建树外内核模块所需的足够Kbuild系统。这些文件代表内核内部 - 如果要正确理解内存中的对象,模块必须针对这些文件进行构建。有关详细信息,请参阅内核的Documentation/kbuild/modules.txt
文件。
1:“Mediated”是我的第一个单词选择,但它暗示了某种访问控制,但事实并非如此。 “Brokered”意味着第三方流程,但事实并非如此。考虑:当C程序调用{{1}}时,它实际上调用标准C库的_exit()
包装器,它调用_exit()
系统调用。 exit(2)
接口具有可以跟踪的文件描述符数量的上限,并且该限制被编译到标准C库中。即使扩展了内核的接口,也需要重新编译C库。