Kconfig是我們進行內核配置的關鍵文件,用於生成menuconfig的界面並生成最終確定編譯選項的 文件。關於Kconfig文件的編寫規則,在 有詳盡的敘述。這裡主要用實例進行語法分析。 config 確定了條目前面是否有選項,menuconfig界面中的條目中一共有3種主動選項,分別是 ,`` ...
Kconfig是我們進行內核配置的關鍵文件,用於生成menuconfig的界面並生成最終確定編譯選項的.config
文件。關於Kconfig文件的編寫規則,在Documentation/kbuild/kconfig-language.txt
有詳盡的敘述。這裡主要用實例進行語法分析。
config
確定了條目前面是否有選項,menuconfig界面中的條目中一共有3種主動選項,分別是[ ]
,< >
和( )
,分別表示"被編譯進內核or捨棄","編譯進內核or編譯成模塊or捨棄", "按照提示輸入一個數字",分別對應Kconfig文件中的bool
,tristate
和int
。{ }
和- -
屬於被動選項,是配置系統根據依賴關係自動生成的選項,不能被手動修改。
menu/endmenu
即圖形界面中有--->
的條目,回車後可以展開。條目前面沒有選項
!
menuconfig
是menu和config的結合體,既在前面有選項,回車後也可以展開。
choice/endchoice
展開之後會有多選一的界面,每種選項都有獨立的config管理
comment
if/endif
如果if之後的值被選定了,裡面的內容才能展開
source
表示調用指定路徑的Kconfig,相當於C中的include
,上例已經給出說明
depends on
實現配置的相當關鍵的關鍵字,表示當前選項依賴於另外一個選項,如果另外一個不選,這個都不會出現。
select
另一個相當關鍵的關鍵字,表示當前選項需要另外選項的支持,如果選了當前選項,那麼其後的選項會被強制選擇,{ }
或- -
就是這個實現的。下例中,只要這些Kconfig中進行了"select HAVE_ARM_ARCH_TIMER",都會導致"HAVE_ARM_ARCH_TIMER"被強制選擇,表現在menuconfig上就是"Architected timer support"被強制選定
.config文件分析
經過適當的配置之後保存就會在頂層目錄下生成.config文件
=y
表示該配置將會被編譯進內核,=m
表示該配置需要單獨編譯成模塊