linux 模块编程为什么要编译内核源码树
如题了,linux模块编程为什么要编译内核源码树。以及为什么内核版本跟内核源码树还有不兼容的情况。嗯,问题就是这样啦。为什么呢?!!就是内核源码树的作用是什么?!!...
如题了,linux模块编程为什么要编译内核源码树。
以及为什么内核版本跟内核源码树还有不兼容的情况。
嗯,问题就是这样啦。
为什么呢?!!
就是内核源码树的作用是什么?!! 展开
以及为什么内核版本跟内核源码树还有不兼容的情况。
嗯,问题就是这样啦。
为什么呢?!!
就是内核源码树的作用是什么?!! 展开
1个回答
展开全部
当然需要。。。
第一点,就是源码树中有相应的头文件和函数的实现,没有源码树,你哪调用去呢?(PC上编译的时候内核有导出符号,系统中有头文件,这样就可以引用内核给你的接口了,但是只能编译你PC上版本的内核可加载的模块)。
第二个,内核模块中会记录版本号的部分,需要记录版本号的原因是不同的内核版本之间,那些接口和调用可能会有比较大的差异,因此必须要保证你的代码和某个特定的内核对应,这样编译出来的模块就可以(也是只能)在运行这个内核版本的Linux系统中加载,否则一个很简单的异常就会导致内核崩溃,或者你的代码根本无法编译通过(接口名变了)。
我上面说的是编译模块的情况,当然如果是把模块直接编译到内核当中去的话,那就不用说了,没有内核源码,你无法编译内核。
第一点,就是源码树中有相应的头文件和函数的实现,没有源码树,你哪调用去呢?(PC上编译的时候内核有导出符号,系统中有头文件,这样就可以引用内核给你的接口了,但是只能编译你PC上版本的内核可加载的模块)。
第二个,内核模块中会记录版本号的部分,需要记录版本号的原因是不同的内核版本之间,那些接口和调用可能会有比较大的差异,因此必须要保证你的代码和某个特定的内核对应,这样编译出来的模块就可以(也是只能)在运行这个内核版本的Linux系统中加载,否则一个很简单的异常就会导致内核崩溃,或者你的代码根本无法编译通过(接口名变了)。
我上面说的是编译模块的情况,当然如果是把模块直接编译到内核当中去的话,那就不用说了,没有内核源码,你无法编译内核。
追问
您第一个的回答说:源码树中有头文件和函数的实现,那么系统本来没有源码树,难道系统在运行的时候就不需要这些源码树。。。
有点不明白,求解答。
PC上编译的时候内核有导出符号,系统中有头文件,这样就可以引用内核给你的接口了,但是只能编译你PC上版本的内核可加载的模块
这句没懂。。。通俗点,谢谢。
追答
奥~~~你说的是编译模块给本机用?如果是的话,那就是我理解错了。一般大家都是编译了模块给开发板用的..呵呵..
我说的是编译模块给别的地方用的情况,。。CPU架构和内核版本不同的话,都需要源码树的。。。
自己PC上编自己用的译模块的时候,是通过头文件和内核导出符号来引用的。。(头文件应该不算是源码树)。导出符号+头文件的引用方式和动态库的使用方式类似。。。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |