Kconfig详解 1 前言 2. Kconfig的作用 3. Kconfig基本要素

当执行#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.

以上对应的配置界面为

Kconfig详解
1 前言
2. Kconfig的作用
3. Kconfig基本要素

解析:

  •    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条目,在配置界面中如下所示:

 Kconfig详解
1 前言
2. Kconfig的作用
3. Kconfig基本要素

 其中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

 在界面中如下所示:

Kconfig详解
1 前言
2. Kconfig的作用
3. Kconfig基本要素

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条目会没有选项可选,配置界面如下:

Kconfig详解
1 前言
2. Kconfig的作用
3. Kconfig基本要素

可以从这个"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配合使用

当执行#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.

以上对应的配置界面为

Kconfig详解
1 前言
2. Kconfig的作用
3. Kconfig基本要素

解析:

  •    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条目,在配置界面中如下所示:

 Kconfig详解
1 前言
2. Kconfig的作用
3. Kconfig基本要素

 其中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

 在界面中如下所示:

Kconfig详解
1 前言
2. Kconfig的作用
3. Kconfig基本要素

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条目会没有选项可选,配置界面如下:

Kconfig详解
1 前言
2. Kconfig的作用
3. Kconfig基本要素

可以从这个"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配合使用