Linux从头学习之kbuild/kconfig/make menuconfig

本文介绍了Linux内核配置系统Kconfig的基本语法,包括menu/endmenu、menuconfig、config、choice/endchoice和source等关键组成部分。详细解释了各部分的功能及用法,并提供了实例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本语法(参考链接)

可以查看 /documentation/kbuild/kconfig-language.txt

         基本构成包括五种,menu/endmenu,menuconfig,config,choice/endchoice,source。下面就对每种详细介绍:

1.1 menu/endmenu

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

1.2 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中的内容可以显示。如果没有定义,就只能进入一个空目录。

1.3 config

config是构成Kconfig的最基本单元,其中定义了配置项的详细信息。定义的格式参考arch/arm/Kconfig中的第8行。

config ARM

         bool

         default y

         select xxxxxxxxxx

         help

           ???????????

可知,config需要定义名称,与menuconfig相同。这个名称不但用于裁剪内核中,还用于配置项之间的相互依赖关系中。

config的类型有5种,分别是bool(y/n),tristate(y/m/n),string(字符串),hex(十六进制),integer(整数)。其中,需要特别介绍一下bool和tristate,bool只能表示选中和不选,而tristate还可以配置成模块(m),特别对于驱动程序的开发非常有用。

其他语法如下:

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

a.       bool “Networking Support”

b.       bool

prompt “Networking Support”

2)       default:默认值

一个配置项可以有多个默认值,但是只有第一个被定义的值是有效的。

3)       depends on/requires:依赖关系

如果依赖的配置项没有选中,那么就当前项也无法选中。

4)       select:反向依赖

如果当前项选中,那么也选中select后的选项。

5)       range:范围,用于hex和integer

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

6)       comment:注释

1.4  choice/endchoice

choice的作用,多选一,有点像MFC中的Radio控件。参考arch/arm/Kconfig第205行。

choice

         prompt "ARM system type"

         default ARCH_VERSATILE

         ???????

         config ARCH_S3C2410

         bool "Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443"

         select GENERIC_GPIO

         select ARCH_HAS_CPUFREQ

         select HAVE_CLK

???????

         endchoice

1.5 source

source只是将另外一个Kconfig文件直接复制到当前位置而已。但它的作用也是明显的,可以将这个系统贯穿在一起。从开始位置arch/arm/Kconfig,来将整个系统都作为配置型。 

分析根配置文件

根目录下的kconfig

#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#
mainmenu "Linux/$ARCH $KERNELVERSION Kernel Configuration"

config SRCARCH
    string
    option env="SRCARCH"

source "arch/$SRCARCH/Kconfig"

mainmenu  表示标题   

        $ARCH   $KERNELVERSION位于Makefile里面arm  和 版本号

source "arch/$SRCARCH/Kconfig"

开始引入下级Kconfig

利用source将所有的Kconfig连接,最终实现的效果相当于在一个文件里面按顺序展开菜单里面的所有内容。

使用技巧

在利用make menuconfig进行配置时候,使用/进行搜索进行快速定位,因为有的模块因为依赖关系并不出现,需要先理清楚依赖关系,方便配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值