Kconfig文件结构(图文)简介
1?Kconfig和Makefile
毫不夸張地說,Kconfig和Makefile是我們瀏覽內核代碼時最為依仗的兩個文件?;旧?#xff0c;Linux?內核中每一個目錄下邊都會有一個Kconfig文件和一個Makefile文件。Kconfig和Makefile就好似一個城市的地圖,地圖引導我們去?認識一個城市,而Kconfig和Makefile則可以讓我們了解一個內核目錄下面的結構。在希望研究內核的某個子系統、某個驅動或其他某個部分時,都?有必要首先仔細閱讀一下相關目錄下的Kconfig和Makefile文件。 分布到各目錄的Kconfig構成了一個分布式的內核配置數據庫,每個Kconfig分別描述了所屬目錄源文檔相關的內核配置菜單。在內核配置make?menuconfig時,從Kconfig中讀出菜單,用戶選擇后保存到.config的內核配置文檔中。?在內核編譯時,主Makefile調用這個.config,就知道了用戶的選擇。 假如想使這個驅動被編譯,則要修改Makefile文件,因此,需要添加新的驅動時,需要修改的文件有兩個:Kconfig,Makefile. 2?菜單組織結構
menu?菜單名??
??
菜單項或菜單鏈接1??
菜單項或菜單鏈接2??
...??
菜單項或菜單鏈接n??
??
endmenu??
復制代碼 其中菜單項就是指菜單的子菜單,所謂菜單鏈接就是指鏈接到另一個Kconfig文件,如此一下,菜單就可以實現隨意嵌套了.
#?drivers/Kconfig??
menu?"Device?Drivers"??
source?"drivers/base/Kconfig"??
source?"drivers/connector/Kconfig"??
source?"drivers/mtd/Kconfig"??
source?"drivers/of/Kconfig"??
source?"drivers/parport/Kconfig"??
source?"drivers/pnp/Kconfig"??
source?"drivers/block/Kconfig"??
source?"drivers/hello/Kconfig"??
config?test??
??bool?"提示字符串"??
??default?y??
??...??
endmenu???
復制代碼 2.1?菜單項
config?<symbol>??
<config?options>??
復制代碼 <symbol>為一符號,就好像代碼中的局部變量x一樣,可用于后邊的表達式中.
config?UEVENT_HELPER_PATH??
???????string?"path?to?uevent?helper"??
???????depends?on?HOTPLUG??
???????default?"/sbin/hotplug"??
???????help??
??????Path?to?uevent?helper?program?forked?by?the?kernel?for??
??????every?uevent.??
復制代碼上面菜單項的屬性string表示菜單的類型,每一個菜單項必須有一個類型.
注:每個config菜單項都會產生一個配置選項CONFIG_XXX,?XXX即為<symbol>.?如上,則會產生一個配置項:CONFIG_UEVENT_HELPER_PATH,此配置項的值記錄在內核根目錄下的隱藏文件.config內,?例:~/WORKING_DIRECTORY/kernel/goldfish/.config文件內.2.2?菜單鏈接
菜單鏈接的格式如下:source?"路徑"??
復制代碼如:
source?"drivers/pnp/Kconfig"??
復制代碼 2.3?菜單屬性2.3.1?類型
菜單類型屬性就好比一個控件,bool相當于單選框,trstate相當于有三種狀態的復選框,string相當于供用戶輸入字符串的文本編輯框,hex相當于供用戶輸入16進制數的文本編輯框,而int就相當于供用戶輸入整型數的文本編輯框。 類型關鍵字后邊可跟隨提示字符,也可以不跟隨,取決于情況。如:
string?"path?to?uevent?helper"??
復制代碼bool?"Prevent?firmware?from?being?built"
復制代碼 注:每一個菜單項必須有類型屬性。
2.3.2?默認值
config?UEVENT_HELPER_PATH??
????string?"path?to?uevent?helper"??
????default?"/sbin/hotplug"??
復制代碼 表示當前菜單項若用戶沒有選擇或輸入任何值時,所取的默認值.上述所示為當前的默認值為"/sbin/totplug".
2.3.3?依賴
depends?on/requires?<expr>
復制代碼 <expre>為表達式,可為之前定義的菜單項名.
depends?on?HOTPLUG??
復制代碼 表示此菜單項顯示與否取決于另外一個菜單項HOTPLUG?,只有當菜單項HOTPLUG這個菜單項有效顯示,當前菜單項才會顯示。
config?MODULES????
????bool?"Enable?loadable?module?support"????
???
config?MODVERSIONS????
????bool?"Set?version?information?on?all?module?symbols"????
????depends?on?MODULES????
???
????comment?"module?support?disabled"????
????depends?on?!MODULES???
復制代碼 菜單項MODVERSIONS的顯示與否取決于菜單項MODULES。這種信賴關系常用在子菜單項中。
2.3.4?選擇
choice??
??
選擇項??
??
..??
??
endchoice
復制代碼2.3.5?提示
語法: comment?"提示信息字符串"??
comment選項??
復制代碼 comment只是用來給用戶提示信息的,后跟字符串,此字符串也可以在終端中顯示。 comment選項只可以是deponds?on。2.3.6?幫助
語法:help/---help---?<字符串>??
復制代碼例如:
config?EXTRA_FIRMWARE_DIR??
????string?"Firmware?blobs?root?directory"??
????depends?on?EXTRA_FIRMWARE?!=?""??
????default?"firmware"??
????help??
??????This?option?controls?the?directory?in?which?the?kernel?build?system??
??????looks?for?the?firmware?files?listed?in?the?EXTRA_FIRMWARE?option.??
??????The?default?is?the?firmware/?directory?in?the?kernel?source?tree,??
??????but?by?changing?this?option?you?can?point?it?elsewhere,?such?as??
??????the?/lib/firmware/?directory?or?another?separate?directory??
??????containing?firmware?files.??
復制代碼 help相當于注釋一樣,在給編輯Kconfig文件的人看的,這樣可以保持其可讀性.
3?舉例
#?drivers/Kconfig??
??
menu?"Device?Drivers"??
??
source?"drivers/base/Kconfig"??
??
source?"drivers/connector/Kconfig"??
??
source?"drivers/mtd/Kconfig"??
...??
endmenu??
復制代碼 其對應的make?menuconfig界面如下圖所示:?
source?"drivers/base/Kconfig"中的Kconfig內容如下:即對應著上圖中的第一項"Generic?Driver?Option"的子菜單內容:
這里不再列出來!
顯示效果如下圖所示:
?
#??
#?Automatically?generated?make?config:?don't?edit??
#?Linux?kernel?version:?2.6.29??
#?Thu?Dec?15?21:15:25?2011??
#??
CONFIG_ARM=y??
CONFIG_SYS_SUPPORTS_APM_EMULATION=y??
#?CONFIG_GENERIC_GPIO?is?not?set??
CONFIG_GENERIC_TIME=y??
CONFIG_GENERIC_CLOCKEVENTS=y??
CONFIG_MMU=y??
#?CONFIG_NO_IOPORT?is?not?set??
CONFIG_GENERIC_HARDIRQS=y??
CONFIG_STACKTRACE_SUPPORT=y??
CONFIG_HAVE_LATENCYTOP_SUPPORT=y??
CONFIG_LOCKDEP_SUPPORT=y??
CONFIG_TRACE_IRQFLAGS_SUPPORT=y??
CONFIG_HARDIRQS_SW_RESEND=y??
CONFIG_GENERIC_IRQ_PROBE=y??
CONFIG_RWSEM_GENERIC_SPINLOCK=y??
#?CONFIG_ARCH_HAS_ILOG2_U32?is?not?set??
#?CONFIG_ARCH_HAS_ILOG2_U64?is?not?set??
CONFIG_GENERIC_HWEIGHT=y??
CONFIG_GENERIC_CALIBRATE_DELAY=y??
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y??
CONFIG_VECTORS_BASE=0xffff0000??
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"??
復制代碼每一個CONFIG_xxx記錄著之前Kconfig文件內的菜單項的值.
總結
以上是生活随笔為你收集整理的Kconfig文件结构(图文)简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何将Win7便签添加到桌面快捷方式
- 下一篇: spring源码分析2本最高清带书目PD