当执行make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是所有配置的总入口,它会包含其他目录的Kconfig

Kconfig的作用:Kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config

Kconfig的语法可以参考“Documentation/kbuild/kconfig-language.txt

 

Kconfig文件的基本要素:

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的值

     depends on:表示依赖于XXX,“depends on TMPFS”表示只有当TMPFS配置选项被选中时,当前配置选项的提示信息才会出现,才能设置当前配置选项


2. menu条目

    menu条目用于生成菜单,其格式如下:

         menu "Floating poing emulation"

         config FPE_NWFPE

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

         config FPE_NWFPE_XP

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

         endmenu

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

         Floating poing emulation--->

                       [] FPE_NWFPE

                       [] FPE_NWFPE_XP


3. choice条目

    choice条目将多个类似的配置选项组合在一起,供用户单选或多选

        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


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


5. source条目

    source条目用于读取另一个Kconfig文件,如

         source "net/Kconifg"


实战

eg1. 

[root@localhost linux-3.5]# make menuconfig 

出现如下界面:

【内核驱动】 Kconfig简介_提示信息


eg2:

解析Kconfig的代码的位置如下

[root@localhost kconfig]# pwd
/var/opt/linux-3.5/scripts/kconfig
[root@localhost kconfig]# vim mconf.c 

编译之后会生成mconf可执行文件

[root@localhost linux-3.5]# ./scripts/kconfig/mconf  ./arch/arm/Kconfig

生成如下图形界面:

【内核驱动】 Kconfig简介_linux_02


eg3: 

创建自己的Kconfig

[root@localhost uplooking]# pwd
/var/opt/linux-3.5/drivers/uplooking
[root@localhost uplooking]# touch Kconfig 

      Kconfig文件内容如下

【内核驱动】 Kconfig简介_Kconfig_03

[root@localhost linux-3.5]# ./scripts/kconfig/mconf  ./drivers/uplooking/Kconfig 

解析结果如下:

            【内核驱动】 Kconfig简介_字符串_04

修改上一层Kconfig

【内核驱动】 Kconfig简介_二维码_05

最后会添加到Drivers选项中,结果如下图所示:

【内核驱动】 Kconfig简介_二维码_06


嵌入式学习交流群:143847203

二维码:

【内核驱动】 Kconfig简介_linux_07