https://cloud.tencent.com/developer/article/1431908

使用Kconfig时,需要注意的地方

  • 1.Kconfig中定义的配置宏,前缀都没有"CONFIG_",只有编译内核时,自动生成autoconf.h才会出现前缀.
  • 2.如果XX_defconfig板卡配置文件中定义新的宏=y时,而在Kconfig并没有声明它,则内核编译出来的autoconf.h里也不会定义它的.
  • 3.如果XX_defconfig板卡配置文件中没有设置CONFIG_MODULES=y,则编译make modules将会失败,而make menuconfig时, Kconfig中的tristate参数也会被读写为bool参数(也就是不能设置m)

CONFIG宏变量参数

  • bool: 表示该CONFIG宏只能选择y(编译内核)或者n(不编译),不能选择m(编译为模块)
  • tristate: 表示该CONFIG宏可以设置y/m/n三种模式(tristate)
  • string: 表示该CONFIG宏可以设为一串字符,比如#define CONFIG_XXX "config test"
  • hex: 表示该CONFIG宏可以设为一个十六进制,比如#define CONFIG_XXX 0x1234
  • int: 表示该CONFIG宏可以设为一个整数,比如#define CONFIG_XXX 1234

常用参数

  • default y: 表示默认是勾上的,当然也可以写为default m或者default n
  • help: 帮助提示信息
  • depends on:依赖项,比如depends on XXX 表示当前宏需要CONFIG_ XXX宏打开的前提下,才能设置它 (注意依赖项的config参数只有bool或tristate才有效)
  • select : 反依赖项,和depends on刚好相反,比如 selecton XXX表示当前宏如果是y或者m,则会自动设置XXX=y或者m(注意参数只有bool或tristate才有效)
  • choice: 会生成一个单选框,里面通过多选一方式选择config,需要注意choice中的config参数只能bool或tristate
  • prompt: 提示信息,如果对于choice而言,则会用来当做一个单选框入口点的标签
  • range : 设置用户输入的数据范围,比如range 0 100表示数据只能位于0~100
  • menuconfig: menuconfig XXX和config XXX类似,唯一不同的是该选项除了能设置y/m/n外,还可以实现菜单效果(能回车进入该项内部)

示例1-创建复选框(多选多)-探索宏变量参数 接下来我们来试试如何给不同宏设置不同参数,以MY_SYMBOL1~ MY_SYMBOL5为例 设置MY_SYMBOL3~ MY_SYMBOL5依赖于MY_SYMBOL2 修改内核顶层Kconfig文件,添加内容:

menuconfig MY_SYMBOL_TEST    #生成一个菜单宏项
bool "MY_SYMBOL_TEST"
default y config MY_SYMBOL1
bool "my symbol is bool"
default y
depends on MY_SYMBOL_TEST
config MY_SYMBOL2
tristate "my symbo2 is tristate"
default m
depends on MY_SYMBOL_TEST config MY_SYMBOL3
string "my symbo3 is string"
default "test symbo3"
depends on MY_SYMBOL2 && MY_SYMBOL_TEST config MY_SYMBOL4
hex "my symbo4 is hex"
range 0 0x2000 #设置hex区间
default 0x1234
depends on MY_SYMBOL2 && MY_SYMBOL_TEST config MY_SYMBOL5
int "my symbo5 is int"
range 0 2000 #设置int区间
default 1234
depends on MY_SYMBOL2 && MY_SYMBOL_TEST

效果如下所示:

如上图所示,可以看到我们设置my symbol5超出区间[0,2000]时,直接数据报错

编译内核后,查看自动生成的autoconf.h,定义如下:

其中上面的CONFIG_MY_SYMBOL2_MODULE宏是因为我们在Kconfig设置它为default m,所以CONFIG_MY_SYMBOL2_MODULE是个模块宏.

示例2-通过choice创建单选框(多选一)

choice
prompt "choice example" #作为该单选框入口点的标签
default y
default MY_SYMBOL3 #默认选择MY_SYMBOL3配置项 config MY_SYMBOL1
bool "my symbol1 is bool"
help
MY_SYMBOL1 example config MY_SYMBOL2
bool "my symbo2 is bool"
help
MY_SYMBOL2 example config MY_SYMBOL3
tristate "my symbo3 is tristate"
help
MY_SYMBOL3 example endchoice

编译内核后,查看autoconf.h,如下图所示,可以看到对于choice单选框来说,tristate属性其实并没有module功能,只有y/n

未完,后续再遇到不懂的再总结~

Kconfig中的select和depends on

经测试,select与depends on是相反的逻辑关系。
A depends on B
那么只有在B选中才能选A
A select
B
那么只要选中A就会选中B

所以select叫反向依赖。

最新文章

  1. PHP开发中的缓存技术汇总
  2. C++语法-指针 (1)
  3. Solr入门之(2)快速启动:第一个例子
  4. Mac OS X上安装 Ruby运行环境
  5. POJ 3207 Ikki's Story IV - Panda's Trick (2-SAT,基础)
  6. CentOS 安装 Tomcat
  7. 2.定义图形类Shape,该类中有获得面积的方法getArea();定义长方形类Rect,该类是Shape的子类,类中有矩形长和宽的变量double a,double b,设置长和宽的方法setWidth()、setHeight(),使用getArea()求矩形面积;利用getArea方法实现题1中圆面积的求解。
  8. jquery转盘抽奖的研究
  9. JavaScript前端和Java后端的AES加密和解密
  10. iOS学习——Quartz2D学习之DrawRect
  11. linux awk 常见字符串处理
  12. impala系列: 基本命令和jdbc连接
  13. PHP05
  14. Mouse Without Borders软件,主要功能备忘录
  15. 【Java并发编程五】信号量
  16. mapStateToProps,mapDispatchToProps的使用姿势
  17. (libev) cannot allocate xxx bytes, aborting 问题的一种触发条件
  18. Django之进阶相关操作
  19. 简单的使用POI导出excel
  20. cookie的路径决定服务器在发送请求时候 是否决定发送 当路径匹配时候 则发送给服务器(默认发送原则)

热门文章

  1. 学习wavenet_vocoder之环境配置
  2. 树莓派安装配置teamviewer host
  3. 深入理解JVM虚拟机11:Java内存异常原理与实践
  4. 前端入门——day1(简介及推荐书籍和网站)
  5. Fabric基础架构原理(一)
  6. principal components analysis 主成份分析
  7. __main__ — Top-level script environment
  8. The MEAN stack is a modern replacement for the LAMP (Linux, Apache, MySQL, PHP/Python) stack
  9. fedora如何使用themes主题?
  10. centOS 7 安装nginx服务