文章目录
Kernel Build System
想要使用一些工具时,需要开启内核中的某些设置,所以配置,编译内核就必不可少了,本文是linux kernel官方文档中的Kernel Build System章节的中文版本,翻译水平有限,仅供参考
Kconfig 语言
介绍
配置数据库是一系列的一树形组织的配置选项的集合:
+- Code maturity level options
| +- Prompt for development and/or incomplete code/drivers
+- General setup
| +- Networking support
| +- System V IPC
| +- BSD Process Accounting
| +- Sysctl support
+- Loadable module support
| +- Enable loadable module support
| +- Set version information on all module symbols
| +- Kernel module loader
+- ...
每个条目都拥有自己的依赖。这些依赖用来决定一个条目的可见性。任何子条目只有在他的父条目可见时才可见。
菜单条目
许多条目定义了一个配置选项。所有其他的条目用来组织他。一个单独的配置选项一般这样定义:
config MODVERSIONS
bool "Set version information on all module symbols"
depends on MODULES
help
Usually, modules have to be recompiled whenever you switch to a new
kernel. ...
每一行都由一个关键字开始并可以跟随多个参数。config
开始一个新的配置条目。后面的行定义了这个配置项的属性。属性可以是配置选项,输入提示,帮助文本和默认值等类型。一个配置选项可以使用同一个名字定义多次,但是每个定义必须仅能有一个输入提示,并且类型不能冲突。
菜单属性
一个菜单条目可以有多个属性。这些属性可能在有些地方不适用。
- 类型定义: “bool”/”tristate”/”string”/”hex”/”int”
每个配置选项都必须有一个类型。有且仅有两个基础类型:三态(tristate)和字符串。其他所有的类型都是基于这两个基本类型。类型定义后面可以跟输入提示,以下两个例子的作用是相同的:
bool "Networking support"
和
bool
prompt "Networking support"
- 输入提示:“prompt” [“if” ]
每个菜单项最多只能有一个提示符,用于显示给用户。只针对此提示的可选依赖项可以使用“if”添加。 - 默认值: “default” [“if” ]
配置选项可以有任意数量的默认值。如果有多个默认值可见,则只有第一个定义的默认值是激活的。默认值不局限于菜单项是在哪定义的。这意味着默认值可以在其他地方定义,也可以被早期的定义覆盖。只有在用户没有设置其他值(通过上面的输入提示)时,默认值才会分配给配置符号。如果可以看到输入提示,则默认值将显示给用户,用户可以覆盖该值。可以选择使用" if "添加仅与此默认值相关的依赖项。
默认值故意默认为’ n ',以避免过度构建。除了少数例外,新的配置选项不应该改变这一点。目的是为了“make oldconfig”在一个版本到另一个版本的配置中添加尽可能少的内容。