Linux-Kconfig總結與分析


使用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:      會生成一個單選框,里面通過多選一方式選擇config,需要注意choice中的config參數只能bool或tristate
  • 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

 


未完,后續再遇到不懂的再總結~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM