NCS-OS 系列2:NCS-SDK kconfig语法简介
概述
ncs 相关文章,部分为原始文档翻译,水平有限,如果有错误,欢迎指出。
概念
Kconfig的作用是用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config。在编译以后,配置信息会在autoconf.h
中生成。
常用关键字
1、config
config表示一个配置项的开始,紧跟着的options为配置项名字,需要注意的是,在kconfig文件中省略了前缀 CONFIG_
。
config SAMPLE
bool "help information"
depends on SAMPLE_ENABLE
select SAMPLE_SELECT
default y
我们以上面代码为入口,介绍一些常见的参数及使用方式
上面代码创建了一个叫做SAMPLE
的配置项,类型为bool,默认值为y,在编译以后的代码中,最终会在autoconf.h
中创建一个CONFIG_SAMPLE=y
的宏
这里简单介绍下常用的值类型,方便进行理解
bool
布尔类型,表示该CONFIG宏只能选择y或者ntrisate
表示该CONFIG可以被设置为y,n或者m(编译为模块)string
字符串类型,表示该CONFIG宏可以被设置为字符串hex
十六机制,表示该宏可以被设置为十六进制数int
整型表示该宏可以被设置为一个整数
常见参数类型(以上文代码为示例):
default y
表示该宏默认值为y,注意默认值的类型要与定义的值类型匹配,上面值类型为bool所以默认值可以为y或者nhelp
帮助提示信息"help information"就是帮助信息depends on
依赖项,表示该宏依赖于另一个宏,只有在另一个宏打开的前提下,才能配置这个宏,上述代码表示,只有在SAMPLE_ENABLE
宏设置为y的时候,SAMPLE
宏才被设置为yselect
反依赖项,与depends on刚好相反,表示当前宏设置为y以后,则会自动设置另一个宏为y,上面代码表示,在SAMPLE
设置为y的时候,SAMPLE_SELECT
也会自动被设置为yrange
设置用户输入的数据范围,如range 0 100
表示用户数据只能为0~100之间。
2、choice
choice定义了一组选择项,可以简单理解为一个多选一的选项,需要注意,choice中的参数类型只能是bool或者trisate
示例如下:
choice
prompt "GPS device"
default GPS_USE_SIM
help
Select from which device GPS data will be fetched.
config GPS_USE_SIM
bool "Use GPS simulator"
help
Use simulated GPS data.
config GPS_USE_EXTERNAL
bool "User provided GPS device"
help
Provide a GPS device that location data will be fetched from and
sent to nRF CloudSAMPLE
endchoice
上面表示在GPS_USE_SIM
和GPS_USE_EXTERNA
中选择GPS_USE_SIM
为y,也就是最终生成CONFIG_GPS_USE_SIM=y
的宏。
3、menu
menu用于定义一个菜单,
menu "menu sample"
depends MENU_SAMPLE
config MENU_CONFIG
...
endmenu
所有的在"menu" … “endmenu” 之间都是"menu sample"的子菜单。所有的子菜单选项都继承了父菜单的依赖关系,比如,"MENU_SAMPLE"的依赖关系就被加到了配置选项MENU_CONFIG的依赖列表中。
4、if
if ACCEL_USE_SIM
config ACCEL_DEV_NAME
string
default SENSOR_SIM_DEV_NAME
config ACCEL_TRIGGER
bool
default SENSOR_SIM_TRIGGER
endif
if与C中功能基本一致,用于条件判断,只有在ACCEL_USE_SIM
为y的时候,if和endif中的选项才会被配置。
5、source
source用于读取另一个Kconfig文件
如:
source "drivers/serial/Kconfig.ns16550"
source "drivers/serial/Kconfig.mcux"
source "drivers/serial/Kconfig.mcux_flexcomm"
source "drivers/serial/Kconfig.mcux_lpsci"
上述代码,就是添加四个kconfig文件到当前项目中。
总结
本章节简单介绍了kconfig的基本语法,如果有深入需求,可以针对性的搜索相关用法。