linux - 为什么编译内核模块需要内核的source code?
大家讲道理
大家讲道理 2017-04-17 13:14:27
[Linux讨论组]

鸟哥说

由於核心模組的編譯其實與核心原本的原始碼有點關係的,因此如果你需要重新編譯模組時, 那除了 make, gcc
等主要的編譯軟體工具外,你還需要的就是 kernel-devel
這個軟體!記得一定要安裝喔!而如果你想要在預設的核心底下新增模組的話,那麼就得要找到 kernel 的 SRPM 檔案了!
將該檔案給他安裝,並且取得 source code 後,才能夠順利的編譯喔!

这里前半段话说的很清楚,编译内核模块需要gcc,make,kernel-devel提供的头文件,那这句话是什么意思呢:

而如果你想要在預設的核心底下新增模組的話,那麼就得要找到 kernel 的 SRPM 檔案了!

这句话的意思是不是把内核模块编译进内核,变成内核的一部分,也就是built-in?不然又为什么需要内核的源码呢?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(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才可能插的上。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号