linux 模块编程为什么要编译内核源码树

如题了,linux模块编程为什么要编译内核源码树。以及为什么内核版本跟内核源码树还有不兼容的情况。嗯,问题就是这样啦。为什么呢?!!就是内核源码树的作用是什么?!!... 如题了,linux模块编程为什么要编译内核源码树。
以及为什么内核版本跟内核源码树还有不兼容的情况。
嗯,问题就是这样啦。
为什么呢?!!
就是内核源码树的作用是什么?!!
展开
 我来答
handsoul
2011-05-19 · TA获得超过955个赞
知道小有建树答主
回答量:500
采纳率:0%
帮助的人:745万
展开全部
当然需要。。。

第一点,就是源码树中有相应的头文件和函数的实现,没有源码树,你哪调用去呢?(PC上编译的时候内核有导出符号,系统中有头文件,这样就可以引用内核给你的接口了,但是只能编译你PC上版本的内核可加载的模块)。

第二个,内核模块中会记录版本号的部分,需要记录版本号的原因是不同的内核版本之间,那些接口和调用可能会有比较大的差异,因此必须要保证你的代码和某个特定的内核对应,这样编译出来的模块就可以(也是只能)在运行这个内核版本的Linux系统中加载,否则一个很简单的异常就会导致内核崩溃,或者你的代码根本无法编译通过(接口名变了)。

我上面说的是编译模块的情况,当然如果是把模块直接编译到内核当中去的话,那就不用说了,没有内核源码,你无法编译内核。
追问
您第一个的回答说:源码树中有头文件和函数的实现,那么系统本来没有源码树,难道系统在运行的时候就不需要这些源码树。。。
有点不明白,求解答。
PC上编译的时候内核有导出符号,系统中有头文件,这样就可以引用内核给你的接口了,但是只能编译你PC上版本的内核可加载的模块
这句没懂。。。通俗点,谢谢。
追答
奥~~~你说的是编译模块给本机用?如果是的话,那就是我理解错了。一般大家都是编译了模块给开发板用的..呵呵..

我说的是编译模块给别的地方用的情况,。。CPU架构和内核版本不同的话,都需要源码树的。。。

自己PC上编自己用的译模块的时候,是通过头文件和内核导出符号来引用的。。(头文件应该不算是源码树)。导出符号+头文件的引用方式和动态库的使用方式类似。。。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式