一個Linux驅(qū)動工程師必知的內(nèi)核編譯機制
Linux內(nèi)核的編譯主要過程:配置、編譯、安裝。
配置主要由
Kconfig
提供圖形界面完成編譯主要基于
Kbuild
編譯系統(tǒng),執(zhí)行make
完成編譯安裝主要也是基于
Kbuild
提供的腳本,然后執(zhí)行make
完成安裝
Kconfig
Kconfig
用于內(nèi)核的配置,make menuconfig
顯示的菜單就來自Kconfig
。
make menuconfig
的菜單包括了多層,每層都是各個目錄下對應(yīng)的Kconfig
產(chǎn)生的,選擇好配置后,配置結(jié)果會被保存到.config
文件中。
執(zhí)行Makefile
時,Makefile
就會根據(jù).config
的結(jié)果來實現(xiàn)內(nèi)核的編譯。
Kconfig語法

Kbuild
Kbuild
即Kernel build
,是內(nèi)核的一個編譯系統(tǒng)。
簡單來說,Kbuild
是對Makefile
語法功能的擴展。
例如,kbuild
定義了很多有用的變量如obj-m`` obj-y
,-objs
等等,用戶只要為這些變量賦值,kbuild
會自動把代碼編譯到內(nèi)核或者編譯成模塊。
Linux
內(nèi)核使用kbuild
編譯時,會掃描兩次Linux
的Makefile
:首先讀取頂層的Makefile
文件,然后根據(jù)讀取到的內(nèi)容第二次讀取kbuild的Makefile
文件來編譯Linux
內(nèi)核。
內(nèi)核的Makefile
包括五部分:

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【749907784】整理了一些個人覺得比較好的學習書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。。ê曨l教程、電子書、實戰(zhàn)項目及代碼)? ?


Makefile
頂層的Makefile
是編譯的入口,下面分析一下頂層Makefile
文件。
頂層Makefile
會向各子目錄的Makefile
傳遞一些信息,有些變量,例如vmlinux-dirs
,不僅在頂層Makefile
中定義并且賦值,而且在arch/*/Makefile
還作了擴充。

原文作者:嵌入式Linux充電站
