Kconfig詳解


1 前言

當執行#make menuconfig時會出現內核的配置界面,所有配置工具都是通過讀取"arch/$(ARCH)Kconfig"文件來生成配置界面,這個文件就是所有配置的總入口,它會包含其他目錄的Kconfig

注:對於uboot來講,配置的總入口在uboot/Kconfig

2. Kconfig的作用

Kconfig用來配置內核,它就是各種配置界面的源文件,內核的配置工具讀取各個Kconfig文件,生成配置界面供開發人員配置內核,最后生成配置文件.config

3. Kconfig基本要素

Kconfig的語法可以參考“Documentation/kbuild/kconfig-language.txt”

3.1  config條目(entry)

  config TMPFS_POSIX_ACL

    bool "Tmpfs POSIX Access Control Lists"

    depends on TMPFS

    select GENERIC_ACL

    help

      POSIX Access Control Lists (ACLs) support permissions for users and

      groups beyond the owner/group/world scheme.

 

      To learn more about Access Control Lists, visit the POSIX ACLs for

      Linux website <http://acl.bestbits.at/>.

     If you don't know what Access Control Lists are, say N.

以上對應的配置界面為

 

解析:

  •    config是關鍵字,表示一個配置選項的開始;緊跟着的TMPFS_POSIX_ACL是配置選項的名稱,省略了前綴"CONFIG_"
  •     bool表示變量類型,即"CONFIG_ TMPFS_POSIX_ACL "的類型,有5種類型:bool、tristate、string、hex和int,其中tristate和string是基本的類型

              bool變量的值:    y和n

              tristate變量的值:y、n和m

              string變量的值:  字符串

    bool之后的字符串“Tmpfs POSIX Access Control Lists”是提示信息(在上面的配置界面中就是通過它來識別CONFIG_TMPFS_POSIX_ACL),在配置界面中上下移動光標選中它時,就可以通過按空格或回車鍵來設置CONFIG_ TMPFS_POSIX_ACL的值(即選擇了哪個值就會把該值賦值給CONFIG_TMPFS_POSIX_ACL)

  •     depends on:表示依賴於XXX,“depends on TMPFS”表示只有當TMPFS配置選項被選中時,當前配置選項的提示信息才會出現,才能設置當前配置選項
  •     select:是反向依賴關系的意思,即當前配置選項被選中,則GENERIC_ACL就會被選中。

3.2.menu條目

   menu條目用於生成菜單,其格式如下:

         menu "Floating point emulation"

         config FPE_NWFPE

         ..............

         config FPE_NWFPE_XP

         .............

         endmenu

 

   menu之后的Floating poing emulation是菜單名。menu和endmenu間有很多config條目,在配置界面中如下所示:

 

 其中Floating point emulation就是菜單名,然后進入這個菜單有 FPE_NWFPE、FPE_NWFPE_XP...等config條目選擇

         Floating point emulation--->

                       [] FPE_NWFPE

                       [] FPE_NWFPE_XP

3.3 choice條目

   choice條目將多個類似的配置選項組合在一起,供用戶單選或多選,這不同於menu條目

       choice

             prompt "ARM system type"

             default ARCH_VERSATILE

 

             config ARCH_AAEC2000

                  .........

             config ARCH_REALVIEW

                  .........

        endchoice

      prompt "ARM system type"給出提示信息“ARM system type”,光標選中后回車進入就可以看到多個config條目定義的配置選項

     choice條目中定義的變量只有bool和tristate

3.4.comment條目

   comment條目用於定義一些幫助信息,出現在界面的第一行,如在arch/arm/Kconifg中有如下代碼:

menu "Floating point emulation"

                                                                                          

comment "At least one emulation must be selected"

                                                                                              

config FPE_NWFPE

.........                                                                               

config FPE_NWFPE_XP

 在界面中如下所示:

3.5.source條目

   source條目用於讀取另一個Kconfig文件,如:

        source "net/Kconifg"                

4.特例 

在Kconfig文件中有些config條目很簡單,比如在uboot中arch/arm/Kconfig:

menu "ARM architecture"
depends on ARM

config SYS_ARCH
default "arm"

config ARM64
bool

config HAS_VBAR
bool

......

config CPU_V7
bool
select HAS_VBAR

......

只有簡單的格式,這樣在menu "ARM architecture"配置界面中那些含有bool但后面沒跟字符串的config條目會沒有選項可選,配置界面如下:

可以從這個"ARM architecture"配置界面中看出並沒有config SYS_ARCH,config HAS_VBAR。。。config CPU_V7等配置選項可選,不像前面文章的3.1節所述的config條目一樣有選項可選。其實這里就要用到select了,在uboot中arch/arm/Kconfig文件中

choice
prompt "Target select"

config TARGET_INTEGRATORAP_CM720T
bool "Support integratorap_cm720t"
select CPU_ARM720T

config TARGET_INTEGRATORAP_CM920T
bool "Support integratorap_cm920t"
select CPU_ARM920T

config TARGET_INTEGRATORCP_CM920T
bool "Support integratorcp_cm920t"
select CPU_ARM920T

。。。

config TARGET_MX6SABRESD
bool "Support mx6sabresd"
select CPU_V7
select SUPPORT_SPL

。。。

有"Target select" choice條目,當我們選擇其中一個比如cconfig TARGET_MX6SABRESD,

從上面可知

config TARGET_MX6SABRESD
bool "Support mx6sabresd"
select CPU_V7
select SUPPORT_SPL

這個就會select CPU_V7, select SUPPORT_SPL意思就是當前配置選項被選中(TARGET_MX6SABRESD被選中,也就是選擇了support mx6sabresd),則CPU_V7, SUPPORT_SPL就會被選中, 所以這些簡單的條目就是為了與select配合使用


免責聲明!

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



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