Kconfig学习记录

运行 make menuconfig 等时,配置工具首先分析与体系结构对应的/arch/xxx/Kconfig 文件(xxx即为传入的 ARCH 参数), /arch/xxx/Kconfig 文件中除本身包含一些与体系结构相关的配置项和配置菜单以外,还通过 source 语句引入了一系列 Kconfig 文件,而这些 Kconfig 又可能再次通过 source引入下一层的 Kconfig

(1)菜单入口-->config。
大多数的内核配置选项都对应 Kconfig 中的一个菜单入口

“config” 关键字定义新的配置选项,之后的几行定义了该配置选项的属性。配置选项的属性
包括类型、数据范围、输入提示、依赖关系、选择关系及帮助信息和默认值等。

例如:kconfig文件有这么一句
config ARM

.config文件里就是
CONFIG_ARM=y

每个配置选项都必须指定类型,类型包括 bool、 tristate、 string、 hex 和 int,其中 tristate 和
string 是两种基本的类型,其他类型都基于这两种基本类型。

  • 输入提示
    类型定义后可以紧跟输入提示,下面的两段脚本是等价的
bool "Networking support"

bool
prompt "Networking support"
  • 默认值的格式为:
default <expr> [if <expr>]

一个配置选项可以存在任意多个默认值,这种情况下,只有第一个被定义的值是可用的。如
果用户不设置对应的选项,配置选项的值就是默认值

  • 依赖关系的格式为:
depends on(或者 requires) <expr>

如果定义了多重依赖关系,它们之间用“&&” 间隔。依赖关系也可以应用到该菜单中所有
的其他选项(同样接受 if 表达式),下面的两段脚本是等价的

bool "foo" if BAR
default y if BAR

depends on BAR
bool "foo"
default y
  • 选择关系(也称为反向依赖关系)的格式为:
select <symbol> [if <expr>]

A 如果选择了 B,则在 A 被选中的情况下, B 自动被选中。

(2)菜单结构。
菜单入口在菜单树结构中的位置可由两种方法决定。第一种方式为:

menu "Network device support"
depends on NET
config NETDEVICES
…
endmenu

所有处于“menu” 和“endmenu” 之间的菜单入口都会成为“Network device support” 的子菜单。

而且,所有子菜单选项都会继承父菜单的依赖关系,比如,“Network device support” 对“NET”
的依赖会被加到了配置选项 NETDEVICES 的依赖列表中。

注意 menu 后面跟的“Network device support”项目仅仅是 1 个菜单,没有对应真实的配置选
项,也不具备 3 种不同的状态。这是它和 config 的区别。

另一种方式是通过分析依赖关系生成菜单结构。如果菜单选项在一定程度上依赖于前面的选
项,它就能成为该选项的子菜单。如果父选项为“N”,子选项不可见;如果父选项可见,子选项才能可见。例如:

config MODULES
bool "Enable loadable module support"

config MODVERSIONS
bool "Set version information on all module symbols"
depends on MODULES
comment "module support disabled"
depends on !MODULES

MODVERSIONS 直接依赖 MODULES,只有 MODULES 不为“n”时,该选项才可见

  • “choices … endchoice” 的结构为:
    它定义一个选择群,其接受的选项(choice options)可以是前面描述的任何属性, 例如 LDD6410 的 VGA 输出分辨率可以是 1 024768 或者 800600,drivers/video/samsung/Kconfig 就定义了如下的 choice:
choice
depends on FB_S3C_VGA
prompt "Select VGA Resolution for S3C Framebuffer"
default FB_S3C_VGA_1024_768
config FB_S3C_VGA_1024_768
bool "1 024*768@60Hz"
---help---
TBA
config FB_S3C_VGA_640_480
bool "640*480@60Hz"
---help---
TBA
endchoice

kconfig的帮助文档
Kconfig 配置脚本和 Makefile 脚本编写的更详细信息,可以分别参看内核文档 Documentation目录的 kbuild 子目录下的 Kconfig-language.txt 和 Makefiles.txt 文件。

一个实际的例子

book@book-desktop:~/system/linux-2.6.22.6/drivers/sgy$ ls -al
total 16
drwx------  3 book book 4096 2017-09-08 06:10 .
drwxrwxrwx 68 book book 4096 2017-09-08 05:43 ..
drwx------  2 book book 4096 2017-09-08 06:10 cpu
-rw-------  1 book book  178 2017-09-08 06:11 Kconfig
-rw-------  1 book book    0 2017-09-08 06:11 test.c
-rw-------  1 book book    0 2017-09-08 06:11 test_client.c
-rw-------  1 book book    0 2017-09-08 06:11 test_ioctl.c
-rw-------  1 book book    0 2017-09-08 06:11 test_proc.c
-rw-------  1 book book    0 2017-09-08 06:11 test_queue.c
book@book-desktop:~/system/linux-2.6.22.6/drivers/sgy$ tree 
.
|-- Kconfig
|-- cpu
|   `-- cpu.c
|-- test.c
|-- test_client.c
|-- test_ioctl.c
|-- test_proc.c
`-- test_queue.c

我们需要在arch/arm/目录下使用source包含我们的新kconfig文件,之前尝试直接在drivers/目录下的Kconfig使用source不生效

menu "Device Drivers" 这一栏下面
source "drivers/sgy/Kconfig"

自己写的Kconfig文件内容如下,并没有什么实际的意义

menu "sgy"
comment "comment sgy"
    config CONFIG_TEST
        bool "TEST Driver"
        
choice
depends on CONFIG_TEST
prompt "Select VGA Resolution for S3C Framebuffer"
default sgy_VGA_1024_768
config sgy_VGA_1024_768
bool "1 024*768@60Hz"

config sgy_VGA_640_480
bool "640*480@60Hz"

endchoice
endmenu

可以看见Device Drivers下已经有一个sgy


sgy-config效果

不选中的TEST_DRIVER的情况

不选中的TEST_DRIVER的情况
选中的TEST_DRIVER的情况

choice的效果

choice的效果
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,588评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,456评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,146评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,387评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,481评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,510评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,522评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,296评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,745评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,039评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,202评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,901评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,538评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,165评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,415评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,081评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,085评论 2 352

推荐阅读更多精彩内容