linux内核编译Kconfig总结

linux内核make menuconfig生成.config时,会调用GUI配置工具,这个GUI配置工具具体调用的就是内核各目录下的Kconfig文件,Kconfig文件层次结构和各内核目录中层次相似,最终形成GUI的各级配置菜单。

make uImage时会使用.config文件,依据其中的变量值来编译内核。

下面首先介绍Kconfig文件规则:

Kconfig  文件的基本要素:

1.config  条目(entry)

  config TMPFS_POSIX_ACL

    bool "Tmpfs POSIX Access Control Lists"

    depends on TMPFS

    select GENERIC_ACL

    default y

    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 .

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

解析:

   一个config条目就是配置菜单中的一个选项。

   config是关键字,表示一个配置选项的开始;紧跟着的TMPFS_POSIX_ACL是配置选项的名称,省略了前缀"CONFIG_",这个选项会在.config生成一个CONFIG_TMPFS_POSIX_ACL变量并且给其赋相应的值,用来在makefile中使用。

    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配置选项被选中时,当前配置选项的提示信息才会出现,才能设置当前配置选项。

   defalut  标示配置选项的默认值。

   select   反向依赖,这个关键字表示了当本配置项选中后,其他的配置项也就会选中CONFIG_ GENERIC_ACL=y。

  help是帮助文档,在按?会显示该内容。

 prompt:提示,显示在make menuconfig中的名称,一般省略。下面两种写法相同。

     a.       bool “Networking Support”

    b.       bool

    prompt “Networking Support”

range:范围,用于hex和integer

range A B表示当前值不小于A,不大于B

comment:注释


linux内核编译Kconfig总结_第1张图片

2.menu/endmenu 条目

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

         menu "Floating poing emulation"

         config FPE_NWFPE

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

         config FPE_NWFPE_XP

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

        endmenu 

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

         Floating poing emulation--->

                       [] FPE_NWFPE

                       [] FPE_NWFPE_XP

menu的作用,可以理解成一个目录,menu可以把其中一部分配置项包含到一个menu中,这样有利于配置的分类显示。menu与endmenu是一组指令,必须同时出现。menu和endmenu中包含的部分就是子目录中的配置项。

比如,在init/Kconfig中24行(可能不同)显示为:

menu "General setup"

这样,就会生成一个目录,特征就是右侧会出现一个箭头,如图1中第一行。当点击确认键时,会进入这个菜单项,如图2。

图1

图2

3、menuconfig

menuconfig有点类似menu,但区别就在于menu后面多了一个config,这个menu是可以配置的,如图2中的第二行,前面比menu类型多了一个方框,通过空格可以修改这个配置项的选中状态。而且从格式上来看,也是有区别的。格式如init/Kconfig中1131行:

menuconfig MODULES

bool "Enable loadable module support"config

if MODULES

xx

endif

也就是说,配置项是位于if和endif中。其中的部分就是MODULES子目录显示的内容。如果选中了MODULE,那么if和endif中的内容可以显示。如果没有定义,就只能进入一个空目录。

 

3.choice条目

   choice条目将多个类似的配置选项组合在一起,供用户单选或多选,记住menuconfig就是给各种CONFIG_XXX的赋值,这是基本目标,choice只是一种组织方式。

       choice

             prompt "ARM system type"

             default ARCH_VERSATILE

 

             config ARCH_AAEC2000

                  .........

             config ARCH_REALVIEW

                  .........

        end

      prompt "ARM system type"给出提示信息“ARM system type”,光标选中

  后回车进入就可以看到多个config条目定义的配置选项

     choice条目中定义的变量只有bool和tristate






linux内核编译Kconfig总结_第2张图片

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

 

在界面中如下所示:



***后面为comment内容,用来说明条目内容的。

5.source条目

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

        source "net/Kconifg"

是KConfig构成层次结构的方法,将个目录下KConfig文件联系起来。





在make menuconfig时可以查看一个条目的help信息(条目下?或选择help按钮)知道其依赖、值类型、kconfig文件位置等信息。

你可能感兴趣的:(linux,编译,linux,内核)