Linux-Kconfig總結與分析
阿新 • • 發佈:2019-01-19
con 復選框 有效 內容 生成 clas 修改 依賴 width
使用Kconfig時,需要註意的地方
- 1.在Kconfig中定義的配置宏,前綴都沒有"CONFIG_",只有編譯內核時,自動生成autoconf.h才會出現前綴.
- 2.如果XX_defconfig板卡配置文件中定義新的宏=y時,而在Kconfig並沒有聲明它,則內核編譯出來的autoconf.h裏也不會定義它的.
- 3.如果XX_defconfig板卡配置文件中沒有設置CONFIG_MODULES=y,則編譯make modules時將會失敗,而make menuconfig時, Kconfig中的tristate參數也會被讀寫為bool參數(也就是不能設置m)
CONFIG宏變量參數
- bool: 表示該CONFIG宏只能選擇y(編譯內核)或者n(不編譯),不能選擇m(編譯為模塊)
- tristate: 表示該CONFIG宏可以設置y/m/n三種模式(tristate)
- string: 表示該CONFIG宏可以設為一串字符,比如#define CONFIG_XXX "config test"
- hex: 表示該CONFIG宏可以設為一個十六進制,比如#define CONFIG_XXX 0x1234
- int: 表示該CONFIG宏可以設為一個整數,比如#define CONFIG_XXX 1234
常用參數
- default y: 表示默認是勾上的,當然也可以寫為default m或者default n
- help: 幫助提示信息
- depends on:依賴項,比如depends on XXX 表示當前宏需要CONFIG_ XXX宏打開的前提下,才能設置它 (註意依賴項的config參數只有bool或tristate才有效)
- select : 反依賴項,和depends on剛好相反,比如 selecton XXX表示當前宏如果是y或者m,則會自動設置XXX=y或者m(註意參數只有bool或tristate才有效)
- choice:
- prompt: 提示信息,如果對於choice而言,則會用來當做一個單選框入口點的標簽
- range : 設置用戶輸入的數據範圍,比如range 0 100表示數據只能位於0~100
- menuconfig: menuconfig XXX和config XXX類似,唯一不同的是該選項除了能設置y/m/n外,還可以實現菜單效果(能回車進入該項內部)
示例1-創建復選框(多選多)-探索宏變量參數
接下來我們來試試如何給不同宏設置不同參數,以MY_SYMBOL1~ MY_SYMBOL5為例
設置MY_SYMBOL3~ MY_SYMBOL5依賴於MY_SYMBOL2
修改內核頂層Kconfig文件,添加內容:
menuconfig MY_SYMBOL_TEST #生成一個菜單宏項
bool "MY_SYMBOL_TEST"
default y
config MY_SYMBOL1
bool "my symbol is bool"
default y
depends on MY_SYMBOL_TEST
config MY_SYMBOL2
tristate "my symbo2 is tristate"
default m
depends on MY_SYMBOL_TEST
config MY_SYMBOL3
string "my symbo3 is string"
default "test symbo3"
depends on MY_SYMBOL2 && MY_SYMBOL_TEST
config MY_SYMBOL4
hex "my symbo4 is hex"
range 0 0x2000 #設置hex區間
default 0x1234
depends on MY_SYMBOL2 && MY_SYMBOL_TEST
config MY_SYMBOL5
int "my symbo5 is int"
range 0 2000 #設置int區間
default 1234
depends on MY_SYMBOL2 && MY_SYMBOL_TEST
效果如下所示:
如上圖所示,可以看到我們設置my symbol5超出區間[0,2000]時,直接數據報錯
編譯內核後,查看自動生成的autoconf.h,定義如下:
其中上面的CONFIG_MY_SYMBOL2_MODULE宏是因為我們在Kconfig設置它為default m,所以CONFIG_MY_SYMBOL2_MODULE是個模塊宏.
示例2-通過choice創建單選框(多選一)
choice
prompt "choice example" #作為該單選框入口點的標簽
default y
default MY_SYMBOL3 #默認選擇MY_SYMBOL3配置項
config MY_SYMBOL1
bool "my symbol1 is bool"
help
MY_SYMBOL1 example
config MY_SYMBOL2
bool "my symbo2 is bool"
help
MY_SYMBOL2 example
config MY_SYMBOL3
tristate "my symbo3 is tristate"
help
MY_SYMBOL3 example
endchoice
編譯內核後,查看autoconf.h,如下圖所示,可以看到對於choice單選框來說,tristate屬性其實並沒有module功能,只有y/n
未完,後續再遇到不懂的再總結~
Linux-Kconfig總結與分析