对内核头文件的理解
时间:2008-12-09
来源:互联网
若 libc 和内核使用不同的头文件,则当应用程序以其一为据编译,调用另一方不支持的特性时,必会出错。应用程序多与 libc 打交道,所以应当以 libc 所依赖的标准为依据,也就在是 libc 编译后要保留其所依赖的头文件供应用程序所用。
内核头文件才是 Linux 的真正标准,不仅 libc 要以此为据,内核(使用,非编译)也要以此为准。内核较新时就要委屈内核,不让其发挥新特性。
所谓“净化”也就是把仅在内核内部各部分间使用的接口剔除,只留下供外部使用的公开接口。libc 也就是以此公开接口为标准编译,所有的应用程序也应当是。“净化”过的内核头文件就是绝对标准。
YY ,哈哈!
作者: ch_fb 发布时间: 2008-12-09
作者: lofeng410 发布时间: 2008-12-09
作者: tlze 发布时间: 2008-12-09
不过这个软件好像也没什么用。
作者: ti8er 发布时间: 2008-12-09
作者: ti8er
不过这个软件好像也没什么用。
|
作者: newper 发布时间: 2008-12-10
作者: ch_fb
编译 glibc 之前要安装内核头文件,编译内核之后要保持原有的内核头文件,而不用新的内核源码中的头文件。这样才能确保互为依赖的 libc 和内核完全正常的(理论上的,实际上多少会因 bug 而不能及)协同工作。
|
libc 应用于绝大部分现代系统,与其配合使用的内核绝不仅限于 linux-kernel,其需要的仅是内核头文件提供的平台相关信息。
libc 的历史比 linux-kernel 久的多,找些 glibc 的历史读读会很有帮助的。
另,libc 也绝不止一种,linux系统下可用的有 glibc、uclibc、newlib。
作者: ch_fb
若 libc 和内核使用不同的头文件,则当应用程序以其一为据编译,调用另一方不支持的特性时,必会出错。应用程序多与 libc 打交道,所以应当以 libc 所依赖的标准为依据,也就在是 libc 编译后要保留其所依赖的头文件供应用程序所用。
|
不同版本的 linux-kernel 有可能提供仅版本号定义不同的头文件。
作者: ch_fb
内核头文件才是 Linux 的真正标准,不仅 libc 要以此为据,内核(使用,非编译)也要以此为准。内核较新时就要委屈内核,不让其发挥新特性。
|
作者: ch_fb
所谓“净化”也就是把仅在内核内部各部分间使用的接口剔除,只留下供外部使用的公开接口。libc 也就是以此公开接口为标准编译,所有的应用程序也应当是。“净化”过的内核头文件就是绝对标准。
YY ,哈哈! |
当前版本的 linux-kernel 提供的已是“净化”过的头文件。
作者: 聚焦深空 发布时间: 2008-12-12
http://www.linuxsir.org/bbs/showthread.php?t=260766
深空兄可有提示否?
作者: d00m3d 发布时间: 2008-12-14
毁灭兄给出的链接、还有楼主的部分叙述已说明“净化”问题。
早期的 GNU/Linux 系统使用的是一份独立维护的 libc (libc5),在 glibc-2.0 (libc6) 发布后又合并到一起,见:
http://en.wikipedia.org/wiki/GNU_C_L...temporary_fork
曾经有一段时间,每当 linux-kernel-header 有变化,libc 就要做相应调整,反过来也一样,这对于维护者来说是噩梦,于是有必要维护一份长时间相对稳定的 linux-kernel-header,具体的过程就是“净化”——删除一切用户空间不需要的信息。
安装内核头文件之后,和 linux-kernel 源代码 include 目录下原始的内核头文件比较一下,就可以了解“净化”的过程。
当前的 glibc 由于要运行在多种硬件平台、多种系统,其对 linux-kernel-header 的依赖较早期时要少得多。
作者: 聚焦深空 发布时间: 2008-12-14
作者: d00m3d 发布时间: 2008-12-14
文章中提到的内核头文件是直接拷贝过去用的。
现在我把这个疑问重新提一下:
文章中没有说明配置内核与编译交叉工具链的先后顺序(我想这可能是个低级问题,我是初学者,就请见谅啦)。
我想应该是先
make ARCH=arm menuconfig
然后才能使用内核头文件吧,不管是通过直接拷贝,还是用make header_install来得到纯净的内核头。
不知以后理解是否有错?
如果不错的话,也会有个问题:
针对嵌入式环境,自己裁剪linux内核,定制高度专用化的内核的情况可能比较多吧,比如为了缩小体积,我的应用程序不使用IPC机制相关的功能的话,我完全可以把相应的支持拿掉吧?
如果我上面的理解无误,那岂不是针对每一次裁剪的linux内核,都要相应编译一套它专用的工具链?大家知道,编译工具链是个挺痛苦的过程啊。
作者: true_log 发布时间: 2008-12-14
作者: d00m3d
要麽去"净化"的问题是很早便明白了,但"净化"了什麽却不是很清楚
|
作者: true_log
文章中没有说明配置内核与编译交叉工具链的先后顺序(我想这可能是个低级问题,我是初学者,就请见谅啦)。
|
作者: true_log
我想应该是先
make ARCH=arm menuconfig 然后才能使用内核头文件吧,不管是通过直接拷贝,还是用make header_install来得到纯净的内核头 |
作者: true_log
针对嵌入式环境,自己裁剪linux内核,定制高度专用化的内核的情况可能比较多吧,比如为了缩小体积,我的应用程序不使用IPC机制相关的功能的话,我完全可以把相应的支持拿掉吧?
|
针对特定硬件平台、特定系统您只需要一份工具链。
作者: 聚焦深空 发布时间: 2008-12-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28