Kconfig 配置的学习

Kconfig是按照特定的格式来书写的文件,在编译前生成顶层头文件,用来裁剪出需要的代码,学习一下 Kconfig 配置工具的编写

Kconfig 一般配置项

  • 标题栏
mainmenu "Hello Kconfig"
  • 菜单
menu "root menu"
    ...
endmenu
  • 注释
comment "config value type"
  • 帮助信息
help
    this is a helpful information.
  • 引用其他配置文件
source "arch/Kconfig"
source "kernel/Kconfig"
source "drivers/Kconfig"

📌 Kconfig 数据配置项

数据配置

  • 配置的数据类型,有字符串、十六进制、数字、布尔、三态类型
string | hex | int | bool | tristate
  • 一个数据配置项
config CFG_STR
    string "I AM STRING VALUE"
    default "str"
  • 范围限制
range 0 888
  • 选择
choice
    prompt "A or B or C"
    default CHOICE_A

config CHOICE_A
    bool "A"

config CHOICE_B
    bool "B"

config CHOICE_C
    bool "C"

endchoice
  • 判断
config CFG_IF
    bool "I AM IF"
    default n

if CFG_IF=y
config CFG_IF_Y
    string "I AM IF_Y"
    default "Y"
endif

if CFG_IF=n
config CFG_IF_N
    string "I AM IF_N"
    default "N"
endif

依赖关系

  • 依赖关系
comment "depends on and select"
config CFG_PARENTMENU
    bool "I AM PARENTMENU"
    default n

config CFG_SUBMENU
    hex "I AM SUBMENU"
    # 有它才有'我'
    depends on CFG_PARENTMENU
    default 0x88
  • 反向依赖关系
config CFG_SELECT_1
    bool "I AM SELECT_1"
    # 有'我'必有它
    select CFG_SELECT_2
    select CFG_IMPLY_2
    default n

config CFG_SELECT_2
    bool "I AM SELECT_2"
    default n

🔼 实例

mainmenu "Hello Kconfig"
# 配置项最终生成 CONFIG_CFG_BOOL
menu "root menu"
    # 配置类型
    comment "config value type"
    config CFG_BOOL
        # 显示内容
        bool "I AM BOOL VALUE"
        # 默认值
        default y
        # 帮助信息
        help
            this is a helpful information.

    config CFG_STR
        string "I AM STRING VALUE"
        default "str"

    config CFG_INT
        int "I AM INT VALUE"
        range 0 88
        default 99

    config CFG_HEX
        hex "I AM HEX VALUE"
        range 0 888
        default 0x99

    config CFG_TRISTATE
        tristate "I AM TRISTATE VALUE (y, n, m)"
        default m

    # 依赖关系
    comment "depends on and select"
    config CFG_PARENTMENU
        bool "I AM PARENTMENU"
        default n

    config CFG_SUBMENU
        hex "I AM SUBMENU"
        # 有它才有'我'
        depends on CFG_PARENTMENU
        default 0x88

    # 反向依赖关系
    config CFG_SELECT_1
        bool "I AM SELECT_1"
        # 有'我'必有它
        select CFG_SELECT_2
        select CFG_IMPLY_2
        default n

    config CFG_SELECT_2
        bool "I AM SELECT_2"
        default n

    # 选择
    comment "choice"
    choice
        prompt "A or B or C"
        default CHOICE_A

    config CHOICE_A
        bool "A"

    config CHOICE_B
        bool "B"

    config CHOICE_C
        bool "C"

    endchoice

    # 判断
    config CFG_IF
        bool "I AM IF"
        default n

    if CFG_IF=y
    config CFG_IF_Y
        string "I AM IF_Y"
        default "Y"
    endif

    if CFG_IF=n
    config CFG_IF_N
        string "I AM IF_N"
        default "N"
    endif

endmenu

# 其他路径
source "arch/Kconfig"
source "kernel/Kconfig"
source "drivers/Kconfig"

主页效果

-

root menu 效果

  • 一般界面

-

  • 显示出隐藏项

-

⚡⚡⚡ OVER ⚡⚡⚡