首页 > 其他分享 >驱动模块(6)_Kconfig语法

驱动模块(6)_Kconfig语法

时间:2022-12-26 18:00:12浏览次数:49  
标签:... 菜单 Kconfig symbol 配置 语法 依赖 模块 默认值

一、格式

菜单入口 "菜单入口名"
   [依赖]
   [反向依赖]
   [引入其它Kconfig文件]
   ... ...
   [帮助]

配置项 symbol
   值类型
   [输入提示]
   [默认值]
   [依赖]
   [反向依赖]
   ... ...
   [帮助]

 

二、属性

1. 值类型,有 bool/tristate/int/hex/string。只有配置选项有值类型,包括: bool: 值为y或n、 tristate: 值为y或m或n、string: 值为字符串、int: 值为十进制整数、 hex: 值为十六进制整数

 

2. prompt

prompt "提示字符串" [if <expr>]

输入提示,每个菜单入口最多只能有一个展示给用户看的输入提示,可以使用“if”来表示输入提示的依赖性,这个依赖性是可选的。

值类型后可以紧跟一个输入提示(也可以单独使用一个提示属性),所以下面的这两个例子是等价的:

bool "Networking support"
#和
bool
prompt "Networking support"

 

3. default

default <expr> [if <expr>] 

默认值,一个配置选项可以有任意多个默认值,但只有第一个有效的。当输入提示是可见时,才能看到默认值,并且可以输入一个值将默认值覆盖。与输入提示一样,可以使用“if”来表示默认值的依赖性,
这个依赖性是可选的。


4. def_bool/def_tristate

def_bool/def_tristate <expr> ["if" <expr>] 

值类型+默认值,说明值类型时同时说明默认值。可以使用“if”来表示默认值的依赖性,这个依赖性是可选的。


5. depends

depends on <expr-a && expr-b>

依赖,依赖项给菜单入口或配置项定义了一个依赖规则,只有当expr为真或被选中时,该菜单入口或配置项才有效,依赖对菜单入口或配置项中的其它属性都有效。


6. requires

requires <expr> 

依赖,同 depends on。


7. select

select <symbol> ["if" <expr>]

反向依赖,当前配置项被选中时,选中symbol,忽略依赖项和手动设置值。只有boolean和tristate类型的symbol可以使用反向依赖。


8. imply

imply <symbol> [if <expr>]

弱反向依赖:当前配置项被选中时,选中symbol,但是symbol仍然可由依赖或者手动配置为n。


9. range

range <value1> <value2> ["if"<expr>],

值范围,限定int和hex类型symbol的输入值。用户只能输入一个介于value1和value2之间的值,eg: range 12 25 if !H8300。


10. visible

visible if <expr> 

只能用于 menu/endmenu 中,当 expr 为真时菜单可见。


11. help

---help--- / help

帮助,定义了一个帮助文本。帮助文本的结尾是根据缩进级别来决定的,这就意味着如果帮助文本中某一行相对于第一行有更小的缩进,那么这一行就是帮助文档的最后一行。
”—help—”和“help”在使用功能上没有区别,”—help—”是用来作为对开发者的一种提示,它显式区别于文档中的配置选项“help”。


12. option

option <symbol>[=<value>]

其它属性,各种不常见的选项的通过这个选项来定义,比如修改菜单入口的行为和配置symbol。下面这些配置当前是允许的:

defconfig_list: 定义了一系列默认入口,当使用默认配置时可以从这里寻找(当主 .config 文件不存在时会使用默认配置)。
modules: 声明了一个symbol将被当做 MODULES symbol,MODULES symbol是所有配置symbol的第三种模块化状态。
env=<value>: 导入了一个环境变量到Kconfig中。环境变量就像是Kconfig中的一个默认值,但是它是从外部环境中导入的。正因为它从外部环境导入,所以赋值的这个时候它相对于
正常的默认值来说是没有定义的。这个symbol当前没有导出到构建环境中(如果想要这样的话,可以通过另一个symbol导出)。
allnoconfig_y: 声明symol默认值为y。

例如:

config DEFCONFIG_LIST
    option defconfig_list
config EMBEDDED
    option allnoconfig_y
menuconfig MODULES
    option modules

 

三、菜单

1. mainmenu

mainmenu "主菜单名字"

主菜单,也就是最顶层的菜单。


2. menu

menu "string"
    ...
endmenu

多选菜单,带配置项但本身不可配置。它的属性只能是依赖项和可见性。


3. menuconfig

menuconfig 配置关键字
    ...

可选菜单,带配置项且本身就是配置项。配置关键字前面添加 CONFIG_ 后就构成了“.config”文件中的配置项名字。


4. config

config 配置关键字
    ... ...

配置项,配置关键字前面添加 CONFIG_ 后就构成了“.config”文件中的配置项名字,但不是配置界面显示的字符,配置界面显示的是提示字符。


5. choice

choice
...
endchoice

单选菜单,单选菜单只能是bool类型或tristate类型 ,并且布尔选择只允许一个单一的配置项被选中,三态选择还允许任何配置项被设置为“M”。这可以用在下面的情况中使用
如果一个硬件存在多个驱动程序,并且只有一个驱动程序可以编译/加载到内核中,但所有的驱动程序可以编译成模块。

应该就是对提供的多个选项进行单选。


6. comment

comment "..."

注释,这定义了一条在用户配置过程中显示的注释,同时会写入导出文件。它的属性只有依赖项。

 

7. 条件判断

if <expr>
 ... ...
endif

当expr为真或选中时,中间的内容才有效,比如:

config BLK_DEV_INITRD
    ...
if BLK_DEV_INITRD
source "usr/Kconfig"
endif

 

8. source

source "...dir/Kconfig"

引入其他Kconfig文件,方便菜单嵌套。


四、菜单结构

1. 一种是使用了菜单入口明确指定,如下中所有位于“menu”…和“endmenu”之间的入口都是”Network device support”的一个子菜单入口。所有的子入口都继承了菜单入口的依赖项,
例如,依赖项”NET”就会被加入到子菜单”NETDEVICESx”的依赖项列表中。

menu "Network device support"
    depends on NET

    config NETDEVICES1
       ...

    config NETDEVICES2
        ... 

endmenu

 

标签:...,菜单,Kconfig,symbol,配置,语法,依赖,模块,默认值
From: https://www.cnblogs.com/hellokitty2/p/17006357.html

相关文章

  • Maven多模块管理
    项目的目录结构:一、创建父工程的必须遵循以下两点:1、packaging标签的文本内容必须设置为pom1<?xmlversion="1.0"encoding="UTF-8"?>2<projectxmlns="http://m......
  • Python模块学习,模块是,什么
    模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。模块名要遵循Python变量命名规范,不要使用中文、特殊字......
  • Django:auth认证模块
    目录一、django的auth认证模块1.什么是auth模块2.生成auth物理表二、创建django-admin账户1.创建超级管理员2.注册超级管理员账户3.登录admin账户三、auth模块中的方法1.导......
  • python之路56 csrf跨站请求 auth模块登录注册方法
    csrf跨站请求伪造钓鱼网站:模仿一个正规的网站让用户在该网站上做操作但是操作的结果会影响到用户正常的网站账户但是其中有一些猫腻eg:英语四六级考试需要网上先......
  • 将ES6的语法转为ES5(为了兼容 ES5) (Babel)
    掌握ES6之后,如果你的业务需要考虑ES5的兼容性,则可以这样做:写ES6语法的js代码,然后通过Babel将ES6转换为ES5。如果没有这样的需要,那么下面的内容,了解即可。babe......
  • Android 程序自动更新功能模块实现
    在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新。在程序启动的时候首先调用更新模块检测服务器上存放的版本号跟当前程序的版本号如果大于当......
  • javaScript 列表常用语法基础大全
    javascript数组常用方法1.push()=>语法,数组.push(数据)=>作用:向数组的末尾追加数据=>返回值:添加数据以后,返回新的数组2.pop()=>语法,数组.pop(数据)=>作用:删除......
  • Android.mk 文件语法详解
    0.Android.mk简介:Android.mk文件用来告知NDKBuild系统关于Source的信息。Android.mk将是GNUMakefile的一部分,且将被BuildSystem解析一次或多次。所以,请尽量少的在A......
  • 非隔离负电压输出线性可调直流升压电源模块GRB系列12V24V转0-负50V/100V/250V/200V/38
    特点●效率高达70%以上●1*2英寸标准封装●单电压负输出●价格低●电压控制,输出电压随控制电压变化线性变化●工作温度:-40℃~+85℃●阻燃封装,满足UL94-V0要求●......
  • 语法错误 : 缺少“;”(在“*”的前面) 缺少类型说明符 - 假定为 int。注意: C++ 不支
    vs2010编译的时候遇到错误:errorC2143:语法错误:缺少“;”(在“*”的前面)errorC4430:缺少类型说明符-假定为int。注意:C++不支持默认interrorC4430:缺......