为什么编译内核模块需要内核的source code?
鸟哥说
由於核心模組的編譯其實與核心原本的原始碼有點關係的,因此如果你需要重新編譯模組時, 那除了 make, gcc
等主要的編譯軟體工具外,你還需要的就是 kernel-devel
這個軟體!記得一定要安裝喔!而如果你想要在預設的核心底下新增模組的話,那麼就得要找到 kernel 的 SRPM 檔案了!
將該檔案給他安裝,並且取得 source code 後,才能夠順利的編譯喔!
这里前半段话说的很清楚,编译内核模块需要gcc,make,kernel-devel提供的头文件,那这句话是什么意思呢:
而如果你想要在預設的核心底下新增模組的話,那麼就得要找到 kernel 的 SRPM 檔案了!
这句话的意思是不是把内核模块编译进内核,变成内核的一部分,也就是built-in?不然又为什么需要内核的源码呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
打个比方,做嵌入式开发时,你本机的内核和目标机上是不同的,怎么在本机上编出能在目标机上可以工作的kernel module呢?
除了需要和目标机架构对应的编译工具链,你还需要一份和目标机内核版本对应的kernel source,这个kernel source的获得方法就是安装一个目标机内核对应版本的kernel-devel SRPM(source RPM),并将编译时make -C选项的参数指定到目标机版本的kernel source目录。
补充一下:
内核是时时刻刻都在发生变化的,一个kernel module必然会使用内核以及其他模块export出来的函数,怎么保证这些接口能跟它的kernel module对应,kernel的做法是给每个release的内核版本都打一个tag,这个值可以从uname -r的输出种查看到。
用modinfo命令去查看一个kernel module的属性时,vergemic字段保存的签名要和目标机上uname -r的输出一致,kernel module才可能插的上。