美文网首页
kconfig语法整理

kconfig语法整理

作者: huojusan | 来源:发表于2019-05-19 19:22 被阅读0次

    配置文件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
    

    相关文章

      网友评论

          本文标题:kconfig语法整理

          本文链接:https://www.haomeiwen.com/subject/azwqzqtx.html