首页 / 操作系统 / Linux / Linux 内核脚本文件Kconfig
//Rocky@20110312 Android Kconfig 入门 万事开头难,希望可以说明白Linux内核脚本文件的语法。本文只讲基础简单入门型的。 内核脚本文件语法主要包含以下几个方面 一:菜单入口config 大多数的内核配置文件都对应Kconfig的一个菜单入口。也就是一项。最常见的如下所示: #rocky@20110312 add config DEC_TOUCH_A bool "Touch A" default n depends on USE_TOUCH help Please add word here to help understand what it is you can add just like this . #rocky@20110312 end 分析以上语法如下: 以#开头表示此行后面都是注释。 "config" 关键字定义新的配置选项,之后的几行定义了这个配置选项的一些属性。这些属性包含类型,数据范围,输入提示,依赖关系, 帮助信息,以及默认值等。 每个配置选项都必须指定类型,类型包括 bool ,tristate,string,hex ,int 。其中string和tristate是两种最基础的类型。其他类型都是 基于这两种基本的类型。类型后面紧跟着提示,下面的两段脚本是等价的。 脚本1 bool "Touch A" 脚本2 bool prompt "Touch A" 通过default关键词,可以设置默认值。如我们行面的示例所示一样,默认值是 n 依赖关系也是非常重要的一个概念,表示此项的存在和多个菜单选项是相连在一起的。 依赖关系的格式如下所示 depends on <expr> 例如例子中所示的一样。 只有当USE_TOUCH为Y的情况下,TOUCH_A可以为Y或者N,当USE_TOUCH为N的情况下,TOUCH_A只能为为N. help关键词表示帮助信息,格式如下: help (或 --help--) 开始 ....... 结束 这样我们就可以完成最基本的config配置 二:菜单结构Menu 菜单入口在菜单树种的位置可以由两种方式来决定。第一种方式是如下所示: menu "Network device support" depends on NET config DEVICE_A .... endmenu 所有处于menu和endmenu之间的菜单入口会成为Network device support的子菜单想。所有的子菜单都会集成父菜单的依赖关系。例如 menu Network device support 对NET的依赖会传递到子菜单的所有项里面。 初次之外,Kconfig还可以使用comment,if endif ,choice endchoice这类的语法。简单介绍下 ##choices endchoices 语法结构如下所示: choices <choice options> <choice block> endchoice 给个实例,menu中的config可以表示一项,当我们有单选题的时候,例如一个系统我们给内核定义版本。此时只能选一种,且必须选一种。 choice prompt "select one item" default ITEM_B config ITEM_A bool "ITEM_MODE_A" default n help this is item_mode_a for .... .......ITEM_B .......ITEM_C endchoice 这样就完成了一个单选题的设计。注意的是choice下的prompt必须存在,否则没有任何提示,看不见。 里瓦,可以设置choice的default,如果不设置,则第一个就是默认值。 comment 表示可见的注释的意思。例如Menu就会进入新一页,这个时候使用comment来注释一段话,做为抬头非常适合。 if ..endif if 后面跟着config值,这样表示一个选择判断关系。当为Y或者M时,才显示中间包含的内容。 另外一种情况就是给menu加一个选择。 另外还有一种是非常常用的,就是menuconfig,给menu当成一个config来配置,所以就有menuconfig这种语法。 menuconfig MENU_PROJECT_CBS bool "提示信息" default 默认值 depends on 依赖项 if MENU_PROJECT_CBS endif 也给出一个示例,按照这个来做就肯定没有问题。 menuconfig CBS_PROJECT bool "CBS_PROJECT" if CBS_PROJECT choice prompt "select one porject" config PROJECT_CBS7001 bool "CBS7001" #bool type default n #default n help this is cbs7001 config PROJECT_CBS7002 bool "CBS7002" default n help this is cbs7002 config PROJECT_CBS7003 bool "CBS7003" default n help this is cbs7003 endchoice endif ##注意这个menuconfig没有endmenu这个关键词,它就是相当于一个config。这个我觉得基本上就能满足大部分的内核脚本配置要求的了。
收藏该网址