linux - 为什么编译内核模块需要内核的source code?
大家讲道理
大家讲道理 2017-04-17 13:14:27
0
1
340

鸟哥说

由於核心模組的編譯其實與核心原本的原始碼有點關係的,因此如果你需要重新編譯模組時, 那除了 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才可能插的上。

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!