开发者社区> 问答> 正文

为什么编译内核模块需要内核的source code?

由於核心模組的編譯其實與核心原本的原始碼有點關係的,因此如果你需要重新編譯模組時, 那除了 make, gcc
等主要的編譯軟體工具外,你還需要的就是 kernel-devel
這個軟體!記得一定要安裝喔!而如果你想要在預設的核心底下新增模組的話,那麼就得要找到 kernel 的 SRPM 檔案了!
將該檔案給他安裝,並且取得 source code 後,才能夠順利的編譯喔!
这里前半段话说的很清楚,编译内核模块需要gcc,make,kernel-devel提供的头文件,那这句话是什么意思呢:

而如果你想要在預設的核心底下新增模組的話,那麼就得要找到 kernel 的 SRPM 檔案了!
这句话的意思是不是把内核模块编译进内核,变成内核的一部分,也就是built-in?不然又为什么需要内核的源码呢?

展开
收起
a123456678 2016-06-21 16:02:05 2257 0
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才可能插的上。

    2019-07-17 19:45:02
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Well-That-Escalated-Quickly-How-Abusing-The-Docker-API-Led-To-Remote-Code-Execution-Same-Origin-Bypass-And-Persistence 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载