• Linux-Kconfig总结与分析


    使用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


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

  • 相关阅读:
    几个很实用的BOM属性对象方法
    JavaScript hash
    WPF中ControlTemplate和DataTemplate的区别
    C#性能测试方法
    Lc.exe已退出,代码为-1
    C#遍历enum类型
    WPF画线问题,几千条以后就有明显的延迟了。
    WPF学习笔记(3):Path绘制命令zz
    WPF: 旋转Thumb后,DragDelta移动距离出错的解决
    在Revit中如何显示附件模块(Add Ins) 这个命令页?zz
  • 原文地址:https://www.cnblogs.com/lifexy/p/10292742.html
Copyright © 2020-2023  润新知