kconfig语法整理

配置文件kconfig语法

配置文件描述了菜单选项,每行都是以一关键字开头(除了帮助信息),下一个关键字结束此菜单选项:
1 - config 配置项
2 - menuconfig 带菜单的配置项
3 - choice/endchoice 单选配置项
4 - comment 注释
5 - menu/endmenu 菜单
6 - if/endif 条件判断
7 - source 读取其他配置文件
前5个同样可以用在菜单选项定义的开始。

命令 说明
config 此关键字定义了一新的配置选项
menuconfig 此关键字和前面的关键字很相似,但它在前面的基础上要求所有的子选项作为独立的行显示。
choice/endchoice 该关键字定义了一组选择项。
comment 这里定义了在配置过程中显示给用户的注释,该注释还将写进输出文件中。格式说明: comment "eg: description content"
menu / endmenu 这里定义了一个菜单,所有依赖于此菜单的选项都是它的子选项。
if/endif 这里定义了if结构。
source 读取其他具体的配置文件,其他配置文件会被解析。

1、菜单选项
每个菜单项都有一个关键字标识,最常见的就是config,一个配置选项定义的形式:

config  MODVERSIONS
   bool  "Set version information on all module symbols"
   depends  MODULES
   help
      Usually, modules have to be recompiled whenever you switch to a new
      kernel. ...

"config" 为定义了一新的配置选项。下面的几行定义了该配置选项的属性。属性可以是该配置选项的(1)类型,(2)输入提示(input prompt),(3)依赖关系,(4)默认值和,(5)帮助信息。
一个配置选项可以用相同的名字定义多次,但每个定义只能有一个输入提示并且类型还不能冲突。

(1)配置选项的类型:"bool"/"tristate"/"string"/"hex"/"int"
每个config菜单项都要有类型定义

  • bool:布尔类型
  • tristate三态:内建、模块、移除
  • string:字符串
  • hex:十六进制
  • int:整型
    如:bool类型的只能选中或不选中,tristate类型的菜单项多了编译成内核模块的选项等,类型定义可以用输入提示,所以下面的两个例子是等价的:
   bool "Networking support"

   bool
   prompt "Networking support"

每个菜单选项最多只能有一个显示给用户的输入提示。可以用 "if" 来表示该提示的依赖关系输入提示:( "prompt" <prompt> ["if" <expr>]),当然这是可选的。
(2) 输入提示:
输入提示,举例:

prompt "Networking support"

(3) 依赖关系:"depends on"/"requires" <expr>
为一菜单选项定义依赖关系。如果定义了多个依赖关系,它们之间用 '&&' 间隔。依赖关系也可以应用到该菜单中所有的其它选项。并且depends on与if等价,如下等价:

   bool "foo" if BAR
   default y if BAR

   depends on BAR
   bool "foo"
   default y
   depends on BAR

(4)默认值:
"default" <expr> ["if" <expr>]
一个配置选项可以有任意多个默认值。如果有多个默认值,那么只有第一个被定义的值是可用的。如果用户没有设置(通过上面的输入提示),配置选项的值就是显示输入也即默认值。如果可以显示输入提示的话,就会把默认值显示给用户,并可以让用户进行修改。
默认值的依赖关系可以用 "if" 添加。(可选项)
(4)帮助信息
"help" or "---help---"
帮助信息的结束就由缩进的水平决定的,这也就意味着信息是在第一个比帮助信息开始行的缩进小的行结束。
"---help---" 和 "help" 在实现的作用上没有区别,"---help---" 有助于将文件中的配置逻辑与给开发人员的提示分开。

2、菜单结构
菜单在树中的位置可由两种方法决定。第一种——直接树状结构:

menu "Network device support"
   depends NET

config NETDEVICES
   ...

endmenu

所有的在"menu" ... "endmenu" 之间都是"Network device support"的子菜单。所有的子菜单选项都继承了父菜单的依赖关系,比如,"NET"的依赖关系就被加到了配置选项NETDEVICES的依赖列表中。
第二种_通过分析依赖关系生成菜单的结构:

config MODULES
   bool "Enable loadable module support"

config MODVERSIONS
   bool "Set version information on all module symbols"
   depends MODULES

如果菜单选项在一定程度上依赖于前面的选项,它就能成为该选项的子菜单。前面的(父)选项必须是依赖列表中的一部分并且它们中必须有满足下面两个条件的选项:

  • 如果父选项为'n',子选项必须不可见。
  • 如果父选项可见,子选项才能可见。

如上面的例子中:MODVERSIONS 直接依赖 MODULES,这就意味着如果MODULES不为'n',该选项才可见。换句话说,当MODULES可见时,MODVERSIONS选项才可见(MODULES的(空)依赖关系也是选项依赖关系的一部分)。

3、选择项定义
示例如下:

choice
    prompt "Device type"
    default STM32F100RC
    config STM32F100RC
        bool "STM32F100RC"
    config STM32F100RD
        bool "STM32F100RD"
endchoice

4、一个完整的实例

以下是正点原子STM32F429阿波罗板对应的board目录下kconfig文件,可以参考学习!

menu "Hardware Drivers Config"      #定义1级菜单

config SOC_STM32F429IG              #选择MCU
    bool                            #bool数据类型后面为空,表示配置界面不会显示
    select SOC_SERIES_STM32F4
    default y

menu "Onboard Peripheral Drivers"   #定义2级菜单

    config BSP_USING_USB_TO_USART   #2级菜单中的一行新的配置项,BSP_USING_USB_TO_USART只是标识
        bool "Enable USB TO USART (uart1)"   #配置项显示的内容,配置类型为bool
        select BSP_USING_UART       #
        select BSP_USING_UART1      #如果使能该配置项,select表示会在rtconfig.h文件增加宏定义
        default y                   #使能配置项,决定上面宏定义是否增加

    config BSP_USING_COM2
        bool "Enable COM2 (uart2 pin conflict with Ethernet and PWM)"
        select BSP_USING_UART
        select BSP_USING_UART2
        default n

    config BSP_USING_COM3
        bool "Enable COM3 (uart3 pin conflict with Ethernet)"
        select BSP_USING_UART3
        default n

    config BSP_USING_SDRAM
        bool "Enable SDRAM"
        select BSP_USING_FMC
        default n

    config BSP_USING_SPI_FLASH
        bool "Enable SPI FLASH (W25Q256 spi5)"
        select BSP_USING_SPI
        select BSP_USING_SPI5
        select RT_USING_SFUD
        select RT_SFUD_USING_SFDP
        default n

    config BSP_USING_MPU9250
        bool "Enable MPU 9250 (i2c1)"
        select BSP_USING_I2C1
        select PKG_USING_MPU6XXX
        default n

    config PHY_USING_LAN8720A
        bool

    config BSP_USING_ETH
        bool "Enable Ethernet"
        select BSP_USING_I2C1
        select PKG_USING_PCF8574
        select RT_USING_LWIP
        select PHY_USING_LAN8720A
        default n

    config BSP_USING_SDCARD
        bool "Enable SDCARD (sdio)"
        select BSP_USING_SDIO
        select RT_USING_DFS
        select RT_USING_DFS_ELMFAT
        default n

endmenu                             # 2级菜单的结束

menu "On-chip Peripheral Drivers"   # 新的2级菜单

    config BSP_USING_GPIO
        bool "Enable GPIO"
        select RT_USING_PIN
        default y

    menuconfig BSP_USING_UART       # 带菜单的配置项,配置后可以进入该菜单继续配置
        bool "Enable UART"
        default y                   # 没有select 选项,说明该菜单配置项强制选中
        select RT_USING_SERIAL
        if BSP_USING_UART           # 带菜单的配置项如果被配置,则if生效
            config BSP_USING_UART1
                bool "Enable UART1"
                default y

            config BSP_UART1_RX_USING_DMA
                bool "Enable UART1 RX DMA"
                depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA  #依赖两个宏定义
                default n

            config BSP_USING_UART2
                bool "Enable UART2"
                default n

            config BSP_UART2_RX_USING_DMA
                bool "Enable UART2 RX DMA"
                depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA
                default n
                
            config BSP_USING_UART3
                bool "Enable UART3"
                default n
   
            config BSP_UART3_RX_USING_DMA
                bool "Enable UART3 RX DMA"
                depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA
                default n  
        endif

    config BSP_USING_ON_CHIP_FLASH
        bool "Enable on-chip FLASH"
        default n

    menuconfig BSP_USING_SPI
        bool "Enable SPI BUS"
        default n
        select RT_USING_SPI
        if BSP_USING_SPI
            config BSP_USING_SPI1
                bool "Enable SPI1 BUS"
                default n

            config BSP_SPI1_TX_USING_DMA
                bool "Enable SPI1 TX DMA"
                depends on BSP_USING_SPI1
                default n
                
            config BSP_SPI1_RX_USING_DMA
                bool "Enable SPI1 RX DMA"
                depends on BSP_USING_SPI1
                select BSP_SPI1_TX_USING_DMA
                default n

            config BSP_USING_SPI2
                bool "Enable SPI2 BUS"
                default n  
                
            config BSP_SPI2_TX_USING_DMA
                bool "Enable SPI2 TX DMA"
                depends on BSP_USING_SPI2
                default n
                
            config BSP_SPI2_RX_USING_DMA
                bool "Enable SPI2 RX DMA"
                depends on BSP_USING_SPI2
                select BSP_SPI2_TX_USING_DMA
                default n
                
            config BSP_USING_SPI5
                bool "Enable SPI5 BUS"
                default n        

            config BSP_SPI5_TX_USING_DMA
                bool "Enable SPI5 TX DMA"
                depends on BSP_USING_SPI5
                default n
                
            config BSP_SPI5_RX_USING_DMA
                bool "Enable SPI5 RX DMA"
                depends on BSP_USING_SPI5
                select BSP_SPI5_TX_USING_DMA
                default n  
        endif

    menuconfig BSP_USING_I2C1
        bool "Enable I2C1 BUS (software simulation)"
        default n
        select RT_USING_I2C
        select RT_USING_I2C_BITOPS
        select RT_USING_PIN
        if BSP_USING_I2C1
            comment "Notice: PH4 --> 116; PH5 --> 117"   #配置项的注释说明
            config BSP_I2C1_SCL_PIN
                int "I2C1 scl pin number"                #配置项类型为整型
                range 1 176                              #配置项的值取值范围设定
                default 116
            config BSP_I2C1_SDA_PIN
                int "I2C1 sda pin number"
                range 1 176
                default 117
        endif

    menuconfig BSP_USING_TIM
        bool "Enable timer"
        default n
        select RT_USING_HWTIMER
        if BSP_USING_TIM
            config BSP_USING_TIM11
                bool "Enable TIM11"
                default n

            config BSP_USING_TIM13
                bool "Enable TIM13"
                default n

            config BSP_USING_TIM14
                bool "Enable TIM14"
                default n
        endif

    menuconfig BSP_USING_PWM
        bool "Enable pwm"
        default n
        select RT_USING_PWM
        if BSP_USING_PWM
        menuconfig BSP_USING_PWM2
            bool "Enable timer2 output pwm"
            default n
            if BSP_USING_PWM2
                config BSP_USING_PWM2_CH4
                    bool "Enable PWM2 channel4"
                    default n
            endif
        endif

    menuconfig BSP_USING_ADC
        bool "Enable ADC"
        default n
        select RT_USING_ADC
        if BSP_USING_ADC
            config BSP_USING_ADC1
                bool "Enable ADC1"
                default n
        endif

    menuconfig BSP_USING_ONCHIP_RTC
        bool "Enable RTC"
        select RT_USING_RTC
        select RT_USING_LIBC
        default n
        if BSP_USING_ONCHIP_RTC               #条件判断
            choice                            #选择配置项,其值可选,类似单选框功能
                prompt "Select clock source"  #配置项的显示名称
                default BSP_RTC_USING_LSE     #默认选择的配置

                config BSP_RTC_USING_LSE      #配置选项
                    bool "RTC USING LSE"

                config BSP_RTC_USING_LSI
                    bool "RTC USING LSI"
            endchoice                         #结束选择配置项
        endif

    config BSP_USING_WDT
        bool "Enable Watchdog Timer"
        select RT_USING_WDT
        default n

    config BSP_USING_SDIO
        bool "Enable SDIO"
        select RT_USING_SDIO
        select RT_USING_DFS
        default n

    config BSP_USING_FMC
        bool
        default n
endmenu

menu "Board extended module Drivers"

endmenu

endmenu
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,723评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,485评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,998评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,323评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,355评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,079评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,389评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,019评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,519评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,971评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,100评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,738评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,293评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,289评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,517评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,547评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,834评论 2 345

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,720评论 0 10
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,367评论 0 5
  • Linux习惯问题: 在vim编辑时,按了ctrl + s后,再按ctrl + q就可以继续执行了。ctrl + ...
    光着脚的鞋阅读 4,487评论 0 16
  • 我国有许多流传下来的俗语,因为脱离了当时的语境,现在的人读起来觉得莫名其妙,即使照字面的意思理解,也与实际含义出现...
    江雪阁阅读 1,806评论 14 46
  • 说到人气小零食,一定少不了坚果。 办公室犯困,晚上追剧,或者嘴里没味儿、无聊到爆表的时候,坚果都会是你最好的朋友。...
    dhqdhq阅读 255评论 0 0