当在内核根目录执行 make menuconfig 时会出现内核配置界面,而配置界面中的选项、条目全都依赖于各个文件夹中的Kconfig配置文件。
可以说各个文件夹中的Kconfig配置文件是整个内核文件这张大网中的每一个节点。
这篇文章主要介绍Kconfig配置文件的语法。


一、关键字介绍

(1) config

配置项。可以定义一行配置选项。
用例:

config MENU_2_1_CONFIG_1                        #二级菜单(1)的选项1bool "MENU_2_1_CONFIG_1"                    #bool类型(y/n),跟着提示信息select MENU_2_1_CONFIG_2                    #本条件选中则选中条件 MENU_2_1_CONFIG_2select MENU_2_1_CONFIG_4                    #本条件选中则选中条件 MENU_2_1_CONFIG_4default y                                   #bool默认值为y

(2)menuconfig

菜单配置项。可以定义一行配置选项,并且子选项会显示在子页面。
用例:

menuconfig Level_2-5_menu                           #二级菜单(5)开始bool "Level 2-5 menuconfig"default nif Level_2-5_menuconfig MENU_2_5_CONFIG_1                    #选项1bool "MENU_2_5_CONFIG_1"                         default n                               #bool默认值为nconfig MENU_2_5_CONFIG_2                    #选项2bool "MENU_2_5_CONFIG_2"                         default y                               #bool默认值为nendif

(3)choice endchoice

单选配置单。选项会在子页面显示。要以 choice 开头, endchoice 结尾。
用例:

choice                                          选择配置项,类似单选功能prompt "choice name"                        #配置项的显示名称default OPTION_2                            #默认选择的配置config OPTION_1                             #选项1bool "OPTION_1"                         config OPTION_2                             #选项2bool "OPTION_2"           config OPTION_3                             #选项3bool "OPTION_3"           config OPTION_4                             #选项4bool                                    #没带提示信息的条件类型不会现实endchoice                                       选择配置项结束

(4)comment

注释。会显示一行注释信息。
用例:

comment "you choose MENU_2_4_CONFIG_1 !!"   #打印注释信息

(5)menu endmenu

菜单。子内容会在子页面显示。要以 menu 开头, endmenu 结尾。菜单标题内容跟在 menu 后。
用例:

menu "Level 2-4 menu"                               #二级菜单(4)开始config MENU_2_4_CONFIG_1                        #二级菜单(4)的选项1bool "MENU_2_4_CONFIG_1"                        #bool类型(y/n),跟着提示信息default n                                       #bool默认值为nif MENU_2_4_CONFIG_1                            #如果 选项(MENU_2_4_CONFIG_1)被选中comment "you choose MENU_2_4_CONFIG_1 !!"   #打印注释信息endif
endmenu                                             #二级菜单(4)结束

(6)if endif

if 判断。if 后面跟着选项名,就是当该选项被选中时成立。
用例:

if MENU_2_4_CONFIG_1                            #如果 选项(MENU_2_4_CONFIG_1)被选中comment "you choose MENU_2_4_CONFIG_1 !!"   #打印注释信息
endif

(7)source

读取其他的配置文件。类似include。
用法:

source "drivers/test/Kconfig"

(8)select

选中指定选项。select 后面可以跟着已经定义了的配置选项,一般用作如果XXX选项被选中则选中YYY选项。
用法:

config MENU_2_1_CONFIG_1                        #二级菜单(1)的选项1bool "MENU_2_1_CONFIG_1"                    #bool类型(y/n),跟着提示信息select MENU_2_1_CONFIG_2                    #本条件选中则选中条件 MENU_2_1_CONFIG_2select MENU_2_1_CONFIG_4                    #本条件选中则选中条件 MENU_2_1_CONFIG_4default y                                   #bool默认值为y

(9)depends on

依赖于XXX选项。如果依赖的选项被选中了,则当前的选项才会显示,是连带关系。类似于子选项。
用法:

config MENU_2_1_CONFIG_2                        #二级菜单(1)的选项2bool "MENU_2_1_CONFIG_2"                    #bool类型(y/n),跟着提示信息default n                                   #bool默认值为nconfig MENU_2_1_CONFIG_3                        #二级菜单(1)的选项3bool "MENU_2_1_CONFIG_3"                    #bool类型(y/n),跟着提示信息depends on MENU_2_1_CONFIG_2                #当条件 MENU_2_1_CONFIG_2 被选中时,本条件才显示default y                                   #bool默认值为y

如果 MENU_2_1_CONFIG_2 被选中,则 MENU_2_1_CONFIG_3 才会显示。

depand on 功能也可以使用 if 替代使用。

(10)选项类型

每个配置选项都有不同的选项类型。

  • bool:布尔类型,可选参数(y/n)
  • tristate三态:内建、模块、移除,可选参数(y/m/n)
  • string:字符串,可填任意字符串内容
  • hex:十六进制,可填任意16进制数值
  • int:整型,可填任意10进制数值

在选项类型后+空格+通过双引号括起来的字符串可以让该选项显示并且显示字符串的内容作为提示信息。
假如选项类型后面不跟任何字符串,那么选项仍然存在,但是不会显示出来。

二、示例Kconfig代码

写了一个测试的Kconfig文件。可以加载出来看看,方便理解。

#
# Kconfig test file
#menu "Level 1 menu"                                     #一级菜单开始menu "Level 2-1 menu"                               #二级菜单(1)开始config MENU_2_1_CONFIG_1                        #二级菜单(1)的选项1bool "MENU_2_1_CONFIG_1"                    #bool类型(y/n),跟着提示信息select MENU_2_1_CONFIG_2                    #本条件选中则选中条件 MENU_2_1_CONFIG_2select MENU_2_1_CONFIG_4                    #本条件选中则选中条件 MENU_2_1_CONFIG_4default y                                   #bool默认值为yconfig MENU_2_1_CONFIG_2                        #二级菜单(1)的选项2bool "MENU_2_1_CONFIG_2"                    #bool类型(y/n),跟着提示信息default n                                   #bool默认值为nconfig MENU_2_1_CONFIG_3                        #二级菜单(1)的选项3bool "MENU_2_1_CONFIG_3"                    #bool类型(y/n),跟着提示信息depends on MENU_2_1_CONFIG_2                #当条件 MENU_2_1_CONFIG_2 被选中时,本条件才显示default y                                   #bool默认值为yconfig MENU_2_1_CONFIG_4                        #二级菜单(1)的选项4bool                                        #bool类型(y/n),没带提示信息,本选项不会显示,但是存在default n                                   #bool默认值为yendmenu                                             #二级菜单(1)结束menu "Level 2-2 menu"                               #二级菜单(2)开始config MENU_2_2_CONFIG_1                        #二级菜单(2)的选项1bool "MENU_2_2_CONFIG_1"                    #bool类型(y/n),跟着提示信息default n                                   #bool默认值为nconfig MENU_2_2_CONFIG_2                        #二级菜单(2)的选项2tristate "MENU_2_2_CONFIG_2"                #tristate类型(y/n/m),跟着提示信息default m                                   #tristate默认值为mconfig MENU_2_2_CONFIG_3                        #二级菜单(2)的选项3string "MENU_2_2_CONFIG_3"                  #string类型(任意字符串),跟着提示信息default "this is MENU_2_2_CONFIG_3"         #string默认值为 this is MENU_2_2_CONFIG_3config MENU_2_2_CONFIG_4                        #二级菜单(2)的选项4hex "MENU_2_2_CONFIG_4"                     #hex类型(十六进制的值),跟着提示信息default 0x456789                            #hex默认值为 0x456789config MENU_2_2_CONFIG_5                        #二级菜单(2)的选项5int "MENU_2_2_CONFIG_5"                     #int类型(十进制的值),跟着提示信息default 666                                 #int默认值为 666endmenu                                             #二级菜单(2)结束menu "Level 2-3 menu"                               #二级菜单(3)开始choice                                          选择配置项,类似单选功能prompt "choice name"                        #配置项的显示名称default OPTION_2                            #默认选择的配置config OPTION_1                             #选项1bool "OPTION_1"                         config OPTION_2                             #选项2bool "OPTION_2"           config OPTION_3                             #选项3bool "OPTION_3"           config OPTION_4                             #选项4bool                                    #没带提示信息的条件类型不会现实endchoice                                       选择配置项结束endmenu                                             #二级菜单(3)结束menu "Level 2-4 menu"                               #二级菜单(4)开始config MENU_2_4_CONFIG_1                        #二级菜单(4)的选项1bool "MENU_2_4_CONFIG_1"                        #bool类型(y/n),跟着提示信息default n                                       #bool默认值为nif MENU_2_4_CONFIG_1                            #如果 选项(MENU_2_4_CONFIG_1)被选中comment "you choose MENU_2_4_CONFIG_1 !!"   #打印注释信息endifendmenu                                             #二级菜单(4)结束menuconfig Level_2-5_menu                           #二级菜单(5)开始bool "Level 2-5 menuconfig"default nif Level_2-5_menuconfig MENU_2_5_CONFIG_1                    #选项1bool "MENU_2_5_CONFIG_1"                         default n                               #bool默认值为nconfig MENU_2_5_CONFIG_2                    #选项2bool "MENU_2_5_CONFIG_2"                         default y                               #bool默认值为nendifendmenu                                                 #一级菜单结束

三、测试

我把这个 Kconfig 文件加在了 Device Drivers 菜单下,假装这是一个设备驱动。

(1)添加 Kconfig 文件

kernel/drivers 目录下创建 teset 文件夹,然后添加文件 Kconfig 并把上面的示例代码拷贝进去。

(2)修改上级Kconfig 文件

上级的 Kconfig 文件在目录 kernel/drivers 下。
打开 Kconfig 文件,在最后一行添加下面一行代码,表示加载 test 文件夹下的 Kconfig 文件。

source "drivers/test/Kconfig"

(3)make menuconfig

kernal 目录下执行 make menuconfig 进行测试。

  • 进入Device Drivers —>
  • 在最下面的菜单就是了。

参考1:https://www.jianshu.com/p/aba588d380c2

Linux驱动之Kconfig语法——学习笔记(11)相关推荐

  1. Linux内核设计与实现学习笔记目录

    **注:**这是别人的笔记,我只是把目录抄过来 <Linux内核设计与实现学习笔记> 1.<Linux内核设计与实现>读书笔记(一)-内核简介 2.<Linux内核设计与 ...

  2. MySQL语法学习笔记

    MySQL语法学习笔记 学习之道,非尽心竭力者不能进也!我是小七黛,欢迎查看我的笔记,有问题欢迎交流探讨. SQL是一种结构查询语言,用于查询关系数据库的标准语言,包括若干关键字和一致的语法,便于数据 ...

  3. Verilog HDL 语法学习笔记

    今天给大侠带来Verilog HDL 语法学习笔记,话不多说,上货. 关于详细的VHDL语法以及Verilog HDL语法可参见往期文章. 一周掌握 FPGA VHDL Day 7 暨汇总篇 一周掌握 ...

  4. VHDL语法学习笔记:一文掌握VHDL语法

    今天给大侠带来FPGA 之 VHDL 语法学习笔记,话不多说,上货. VHDL语法学习笔记 一.VHDL简介 1.1 VHDL 的历史 VHDL 的 英 文 全 名 是 Very-High-Speed ...

  5. 点云学习笔记11——VoxelNet算法+代码运行

    点云学习笔记11--VoxelNet算法+代码运行 一.算法分析 摘要 介绍 相关工作 1.2. 贡献 2.VoxelNet 2.1.特征学习网络 2.1.1 特征学习网络 二.代码复现 2.1.环境 ...

  6. 《鸟哥的Linux私房菜》个人学习笔记-第一篇

    <鸟哥的Linux私房菜>个人学习笔记-基础篇 这是一篇一个linux菜鸡自学的笔记 csdn上的各位大手子们好,本人实习生一枚最近想自己深入学习下linux,所以在社区里发博客,希望能记 ...

  7. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  8. SpringMVC:学习笔记(11)——依赖注入与@Autowired

    SpringMVC:学习笔记(11)--依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...

  9. 《Linux高性能服务器编程》学习笔记

    <Linux高性能服务器编程>学习笔记 Linux高性能服务器编程 TCP/IP协议族 TCP/IP协议族体系结构以及主要协议 数据链路层 网络层 传输层 应用层 封装 分用 测试网络 A ...

  10. Hadoop学习笔记—11.MapReduce中的排序和分组

    Hadoop学习笔记-11.MapReduce中的排序和分组 一.写在之前的 1.1 回顾Map阶段四大步骤 首先,我们回顾一下在MapReduce中,排序和分组在哪里被执行: 从上图中可以清楚地看出 ...

最新文章

  1. Memcache的部署和使用
  2. java点到直线的投影点到经纬度_12分高考答题必刷题型,“空间向量分析点到线的距离问题”...
  3. python内置函数map reduce filter详解,面试必备知识
  4. kotlin dsl_Spring Webflux – Kotlin DSL –实现的演练
  5. 电磁波传播相位是否会变化_相位常数β与波数k是一回事吗?
  6. 【重识 HTML + CSS】CSS 选择器
  7. HTTP 接口测试的流程
  8. ip地址冲突该如何解决?
  9. 什么是Zigbee,主要有哪些特点,主要应用于哪些领域?
  10. PIL imagefont 添加下划线
  11. UGUI-ContentSizeFitter之最简单实现maxSize限制
  12. 【UML】UML基本概念
  13. python break函数用法_Python break用法详解
  14. Google(谷歌)拼音输入法发布
  15. plotly绘制简单图形<7>--用plotly画图参数设置
  16. Java实验报告实验4
  17. 一个年轻董事长给大学生18条很好的建议
  18. oracle五种数据类型,Oracle数据类型
  19. 【Android的从零单排开发日记】之入门篇(十六)——Android的动画效果
  20. 方舟生存进化是什么游戏?好不好玩

热门文章

  1. Unity粒子特效工具需求文档
  2. 大一计算机课程ppt作业,《计算机应用基础》课程第4次作业-PPT操作题答案步骤...
  3. Java 案例大全(详细)二
  4. 小米android手机怎么刷机,小米手机要刷机如何进入recovery模式
  5. matlab对语音信号预加重处理,语音信号的预加重处理和加窗处理
  6. 遥感植被指数128个
  7. VUE引入JsBarcode组件异常记录
  8. Qt界面开发(一)(各种控件以及图表)
  9. 计算机520错误,完美解决win7遇到已停止工作问题
  10. 学计算机的思维导图,电脑上最好用的6款,思维导图软件测评