Linux核心原始碼很多,有數千個設定選項,設定相當複雜。
為了更好選擇自己想要的功能配置,linux核心原始碼組織了一個配置系統;
配置系統包括三個部分:
##Makefile:負責整體的設定編譯
主Kconfig
檔案呼叫其他目錄的Kconfig
文件,其他目錄的Kconfig
檔案呼叫各級子目錄的Kconfig
文件,形成樹狀的設定選項;
例如: drivers/net/usb/Kconfig中,DM9601選單:
config USB_NET_DM9601
是選單項目;選單項目下面的是選單的屬性;
選單都是以config
開頭,中間有空格,後面大寫的就是選單項目。
tristate
:表示提示訊息,在配置選單中顯示的字串 depends
:表示依賴的選項(所依賴的選項選上,才能選這個選項)select
:表示本選單選上後,自動選用的選單Help
:說明文字;Kconfig的語法詳細參考:Documentation/ kbuild/kconfig-languages.txt
核心配置完畢之後,會在核心原始碼的頂層目錄下產生.config
文件;
#開.config
文件,我們可以看到內容如下:
#這裡在設定中選了」Davicom DM96xx based USB 10/100 ethernet device」
選項,在.config
檔案中會產生「CONFIG_USB_NET_DM9601= y
」的設定資訊;如果沒有選上,這個選用上會用「#」註解掉;
#和Kconfig
一樣,頂層以及各子目錄下都有一個Makefile
檔。其功能如下:
Makefile
負責配置編譯整個linux核心;讀取
.config文件,根據
.config文件的設定選項編譯核心;
遞歸地遍歷核心原始碼中的所有子目錄,編譯所有的目標文件;
文件,這些
Makefile檔案會使用
.config檔案中的信息,編譯對應的檔案;
#Makefile中的範例:
obj-$(CONFIG_USB_NET_DM9601) = dm9601.o
相當於:
obj-y = dm9601.o
obj-y
的意思是把dm9601.o
目標檔編譯進內核,dm9601 .o
目標檔案應該從dm9601.c
或dm9601.S
檔案中編譯過來;obj-m
的意思是把目標檔案編譯成模組#通常每個廠商都有自己的defconfig
文件,載入配置時只需執行make xxx_defconfig
,然後就會產生一個.config
文件,即代表載入完配置。
在日常開發過程中,對於修改過.config
,通常也會將.config
拷貝覆寫原來的xxx_defconfig
,然後上傳程式碼。
以上是一個Linux驅動工程師必知的核心配置知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!