精华内容
下载资源
问答
  • Kconfig
    2022-07-10 09:43:24

    1. Kconfig介绍

    1. 语法文档位置:linux源码目录Documentation/kbuild/kconfig-language.txt。
    2. 语法例程:uboot源码下的Kconfig文件。

    在项目开发中我们通常需要对一个工程根据不同的需求进行配置、裁剪。通常做法是专门定义一个config_xxx.h的文件,然后再在文件中使用#define CONFIG_XX_XX等宏进行配置和裁剪。但是这种配置不太直观化,而且当一个工程由很多模块组成时,人为的去维护这个文件效率也较低。为此linux使用了KConfig来组织并生成配置文件。

    KConfig文件一般使用menuconfig命令可视化配置,配置完成后被保存为.config文件。然后又将.config文件转化成xxx.h文件。这样c语言就可以识别使用了。

    大多数内核配置选项都对应Kconfig中的一个菜单。每行都是以关键字开始,并可以有多个参数。

    • KConfig语法使用菜单项作为基本组成单位。每个菜单项都有自己的相关属性(菜单项属性)。菜单项之间可以嵌套。
    • 使用#作为注释符.

    2. KConfig的菜单项

    Kconfig配置文件描述了一系列的菜单入口。除了帮助信息之外,每一行都以一个关键字开始,这些关键字如下:config、menuconfig、choice/endchoice、comment、menu/endmenu、if/endif等。前五个关键字都定义了一个菜单选项,if/endif是一个条件选项。KConfig中按菜单项的性质可以分为下面几种菜单项:

    2.1 config 菜单项

    • config菜单项: 定义一个配置选项。可以接受所有的菜单项属性。是语法中最常用的一个菜单项。
    • config关键字定义一个新的配置选项,之后几行定义该配置选项的属性。

    2.1.1 config 语法格式

    //格式
    "config" <symbol>
        <config options>
    
    //eg:
    config TARGET_SMDKC100
        bool "Support smdkc100 board"
        select  OF_CONTROL
    

    2.2 menuconfig 菜单项

    • menuconfig菜单项:定义一个配置选项类似config菜单项。它常常配合if块使用。只有menuconfig菜单项选中时,才会展现if中的配置选项。

    2.2.1 menuconfig 语法格式

    //格式
    "menuconfig" < symbol >
        < config  options>
    
    //eg:
    menuconfig EXPERT
        bool “Configure standard U-Boot features (expertusers)default y
        help 
          This option allows cartain base U-Boot options  and settings 
          to be disabled or tweaked. This is for specialized
          environments which can tolerate a "non-standard" U- Boot,
          Use this only if you really know what you are doing.
    ...
    endmenu
    

    2.3 mainmenu菜单项

    • mainmenu菜单项:这将设置配置程序的标题栏,如果配置程序选择使用它。它应该放在配置的顶部,在任何其他语句之前。

    2.3.1 maimenu 语法格式

    //格式
    "mainmenu" info
        < config options>
    
    //eg:
    mainmenu "U-boot $(UBOOTVERSION) Configuration"
    

    2.4 choice/endchoice菜单项

    • choice/endchoice菜单项:选择器,选择菜单定义一组选项。此选项的类型只能是boolean或tristate型。在一个硬件有多个驱动的情况下可以使用choice菜单,使用choice菜单可以实现最终只有一个驱动被编译进内核中。choice菜单可以接受的另一个选项是optional,这个选项被设置为N,表示没有被选中。

    2.4.1 choice/endchoice语法格式

    //格式
    "choice" [symbol]
        <choice options>
        <choice block>
    "endchoice"
    
    //eg
    choice
        prompt "S5PC1XX board select"
        optional
    config TARGET_SMDKC100
        bool "Support smdkc100 board"
        select  OF_CONTROL
    endchoice 
    

    2.5 menu/endmenu菜单项

    • menu/endmenu菜单项:定义一个菜单块

    2.5.1 menu/endmenu 语法格式

    //格式
        "menu" <prompt>
        <menu options>
        <menu block>
        "endmenu"
    
    //eg:
    menu "ARM architecture"
        depends on ARM
    config SYS_ARCH
        default "arm"
    ...
    endmenu
    

    2.6 comment 菜单项

    • comment菜单项: 添加注释,注释菜单定义了配置过程中显示给用户的注释。此注释也可以被输出到文件中以被查看。
    • 在注释中唯一可以定义的属性是依赖关系,其它的属性不可以定义。

    2.6.1 comment 语法格式

    //格式
    comment <prompt>
    <comment options>
    
    //eg:
    comment "Compiler: $(CC_VERSION_TEXT)"
    

    2.7 if/endif 菜单项

    • if/endif菜单项:定义一个if条件判断块

    2.7.1 if/endif 语法格式

    //格式
    "if" <expr>
        <if block>
    "endif"
    
    if ARCH_S5PC1XX
    
    choice
       prompte "S5PC1XX board select"
       optional
    config TARGET_SMDKC100
       bool "Support smdkc100 board"
       select OF_CONTROL
    endchoice 
    
    config SYS_SOC
      default  "s5pc1xx" 
    source "board/samsung/smdkc100/Kconfig"
    
    endif
    

    2.8 source 菜单项

    • source菜单项: 将其他的Kconfig文件加入到此位置,并解析显示

    2.8.1 source 语法格式

    //格式
    "source" <prompt>
    //eg:
    source "./xxx/Kconfig"
    
    source "board/samsung/smdkc100/Kconfig"
    

    3 菜单项属性

    • 属性可以有类型、输入提示(input/prompt)、依赖关系、帮助信息和默认值等。可以出现两个相同的配置选项,但每个选项只能有一个输入提示并且类型还不能冲突。
    • 每个配置选项都必须指定一种类型,包括bool、tristate、string、hex和int,其中tristate和string是两种基本的类型,其它类型都是基于这两种类型的。
    • 类型定义后面紧跟输入提示,这些提示将显示在配置菜单中。

    每个菜单项必须选择一种类型定义:

    • bool:二值量。取值为y或者n(对应真要么假)。意思是这个配置项只能被2种选择。
    • int:十进制整型数
    • hex:十六进制整型数
    • tristate:三态量。取值为y:选中;n:不选中;m: 编译成模块(意思是三态——3种状态,对应Y、N、M三种选择方式, 意思就是这个配置项可以被三种选择。)
    • string:字符串

    3.1 输入提示(input prompt)

    • 输入提示(input prompt):每个菜单项最多只有一个输入提示。可以使用“if”添加仅针对此提示的可选依赖项。
    • 输入提示的一般语法如下:

    prompt < prompt > [“if” < expr >]

    其中prompt是关键字,表示一个输入提示。< prompt >是一个提示信息。可选项if用来表示该提示的依赖关系。

    3.2 默认值(default)

    • 默认值(default):当depends on的值有效时,下面的default也会成立,将相应的选项选上,有三种选项,分别对应y,n,m。在用户没有对其设置时它使用默认值。配置选项可以有任意数量的默认值。默认值不局限于定义它们的菜单项。这意味着默认值可以在其他地方定义,也可以由以前的定义覆盖。
    • 默认值的语法如下:

    default < expr > [if < expr >]

    一个配置选项可以有多个默认值,但是只有第一个默认值是有效的。只有config选项才能配置默认值。

    3.3 菜单依赖项(depend on)

    • depends on(菜单项依赖):这个菜单项所依赖的菜单项,只有所依赖的菜单项被选中,当前的菜单项才会出现。

    • 意思是本配置项依赖于另一个配置项。如果那个依赖的配置项为Y或者M,则本配置项才有意义;如果依赖的那个配置项本身被设置为N,则本配置项根本没有意义。

    • depends项会导致make menuconfig的时候找不到一些配置项。所以在menuconfig中如果找不到一个选项,但是这个选项在Kconfig中却是有的,则可能的原因就是这个配置项依赖的一个配置项是不成立的。depends依赖的配置项可以是多个,还可以有逻辑运算。这种时候只要依赖项目运算式子的结果为真则依赖就成立。

    • 依赖关系如下:

    depends on < expr >

    如果定义了多个依赖关系,那么可以用"&&"来连接,表示与的关系。依赖关系可以应用到菜单的所有其它选择中。
    depends能够限定一个config选项的能力,即如果A依赖于B,则在B被配置为Y的情况下,A可以为Y、M、N;在B被配置为M的情况下,A可以为M、N;在B被配置为N的情况下,A只能为N,表示禁用该功能。

    3.4 反向依赖(select)

    • select(反向依赖)::表示当epends on的值有效时,下面的select也会成立,将相应的内容选上。 他只能用在bool、tristate类型的菜单项中。

    3.5 帮助信息 help

    • 帮助信息:help或者"—help—"帮助信息,解释这个配置项的含义,以及如何去配置他。
    • 帮助信息的语法如下:

    help (或者–help–)
    begin

    end

    可以用"help"或者"–help–"定义帮助信息。帮助信息可以在开发人员配置内核时给出提示。

    3.6 限制菜单显示(visble if)

    • visible if (限制菜单显示):此属性仅适用于菜单块,如果条件为false,则菜单块不会显示给用户(但包含在其中的符号仍然可以由其他符号选择)。“可见”的默认值为真。

    3.7 数值范围(range min max)

    • range min max(数值范围):限制int、hex类型的范围。大于等于min并且小于等于max

    4 Kconfig和.config文件和Makefile三者的关联

    • 配置项被配置成Y、N、M会影响“.config”(.config 受XX_defconfig文件影响)文件中的CONFIG_XXX变量的配置值。
    • “.config”中的配置值(=y、=m、没有)会影响最终的编译链接过程
      (1)如果=y则会被编入(built-in);
      (2)如果=m会被单独连接成一个”.ko”模块;
      (3)如果没有则对应的代码不会被编译。
    • 那么这是怎么实现的?都是通过makefile实现的
      如makefile中:obj-$(CONFIG_DM9000) += dm9000.o,
      (1)如果CONFIG_DM9000变量值为y,则obj += dm9000.o,因此dm9000.c会被编译;
      (2)如果CONFIG_DM9000变量未定义,则dm9000.c不会被编译。
      (3)如果CONFIG_DM9000变量的值为m则会被连接成“.ko”模块。
    更多相关内容
  • 主要是修改Kconfig文件,在使用ENV工具时,针对于rt-thread的源码进行删减并修改了路径的处理,使得继续能够适应ENV工具
  • Kconfig

    2022-02-17 14:22:07
    Kconfig的作用:Kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config Kconfig文件的基本组成 1.config条目 config ...

    概念

    Kconfig的作用:Kconfig用来配置内核,它就是各种配置界面的源文件,内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.config

    Kconfig文件的基本组成

    1.config条目

    config TMPFS_POSIX_ACL
        bool "Tmpfs POSIX Access Control Lists"
        depends on TMPFS
        select GENERIC_ACL
        help
          POSIX Access Control Lists (ACLs) support permissions for users and
          groups beyond the owner/group/world scheme.
          To learn more about Access Control Lists, visit the POSIX ACLs for
          Linux website <http://acl.bestbits.at/>.
         If you don't know what Access Control Lists are, say N.
    

    config: 关键字,表示一个配置选项的开始;紧跟着的TMPFS_POSIX_ACL是配置选项的名称,省略了前缀"CONFIG_"
    bool表示变量类型,即"CONFIG_ TMPFS_POSIX_ACL "的类型,有5种类型:bool、tristate、string、hex和int,其中 tristate和string是基本的类型

    bool变量的值: y和n

    tristate变量的值:y、n和m

    string变量的值: 字符串
    字符串“Tmpfs POSIX Access Control Lists”是提示信息,在配置界面中上下移动光标选中它时,就可以通过按空格或回车键来设置CONFIG_ TMPFS_POSIX_ACL的值

    depends on:表示依赖于XXX,“depends on TMPFS”表示只有当TMPFS配置选项被选中时,当前配置选项的提示信息才会出现,才能设置当前配置选项
    select :表示CONFIG_ TMPFS_POSIX_ACL被选中时,GENERIC_ACL也会被选中

    2.menu条目

     menu "Floating poing emulation"
    
             config FPE_NWFPE
    
             ..............
    
             config FPE_NWFPE_XP
    
             .............
    
             endmenu
    

    menu之后的Floating poing emulation是菜单名,menu和endmenu间有很多config条目,在配置界面中如下所示:
    Floating poing emulation—>
    [] FPE_NWFPE
    [] FPE_NWFPE_XP

    3.menuconfig有点类似menu,但区别就在于menu后面多了一个config,这个menu是可以配置的,前面比menu类型多了一个方框,通过空格可以修改这个配置项的选中状态。而且从格式上来看,也是有区别的。格式如init/Kconfig中:

    menuconfig MODULES
           bool "Enable loadable module support"config
    if MODULES
    xx
    
    endif
    

    配置项是位于if和endif中。其中的部分就是MODULES子目录显示的内容。如果选中了MODULE,那么if和endif中的内容可以显示。如果没有定义,就只能进入一个空目录。

    4.choice条目

       choice
             prompt "ARM system type"
             default ARCH_VERSATILE
             config ARCH_AAEC2000
                  .........
             config ARCH_REALVIEW
                  .........
        endchoice
    

    choice条目将多个类似的配置选项组合在一起,供用户单选或多选
    prompt "ARM system type"给出提示信息“ARM system type”,光标选中
    后回车进入就可以看到多个config条目定义的配置选项, choice条目中定义的变量只有bool和tristate

    5.comment条目
    comment条目用于定义一些帮助信息,出现在界面的第一行,如在arch/arm/Kconifg中有如下代码

    menu "Floating point emulation"
    comment "At least one emulation must be selected"
    config FPE_NWFPE
    .........                                                                               
    config FPE_NWFPE_XP
    

    在这里插入图片描述

    6.source条目
    source条目用于读取另一个Kconfig文件,如:
    source “net/Kconifg”

    展开全文
  • px4___kconfig-frontends-4.11.0.1.tar.bz2.7z,px4___kconfig-frontends-4.11.0.1.tar.bz2
  • 使用到make menuconfig配置工具的时候会依赖这个包,安装的时候选项记得写./configure --enable-mconf
  • 自从Linux内核代码迁移到Git之后,Linux内核配置/构建系统(也称为Kconfig/kBuild)已经存在了很长时间。然而,作为支持基础设施,它很少受到关注;即使在日常工作中使用它的内核开发人员也从未真正考虑过它。 为了...
  • linux 驱动之Kconfig文件和Makefile文件实例 在Linux编写驱动的过程中,有两个文件是我们必须要了解和知晓的。这其中,一个是Kconfig文件,另外一个是Makefile文件。如果大家比较熟悉的话,那么肯定对内核编译需要的...
  • linux kconfig详解及语法.pdf
  • linux kconfig介绍

    2019-01-04 12:57:35
    kconfig 的语法介绍。查看kconfig具体的使用方法和各个语句段类型
  • Kconfig语法

    2021-12-17 18:39:01
    顾名思义 mainmenu 就是主菜单,也就是输入“make menuconfig”以后打开的默认界面,在顶层 Kconfig 中有如下代码: ``` mainmenu "U-Boot $UBOOTVERSION Configuration" ``` 上述代码就是定义了一个名为“U-Boot $...

    内容来自《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.2.pdf》


    1、 mainmenu

    顾名思义 mainmenu 就是主菜单,也就是输入“make menuconfig”以后打开的默认界面,在顶层 Kconfig 中有如下代码:

    mainmenu "U-Boot $UBOOTVERSION Configuration"
    

    上述代码就是定义了一个名为“U-Boot $UBOOTVERSION Configuration”的主菜单,其中UBOOTVERSION=2016.03,因此主菜单名为“U-Boot 2016.03 Configuration”,如图所示:
    在这里插入图片描述

    2、调用其他目录下的 Kconfig 文件

    和 makefile 一样, Kconfig 也可以调用其他子目录中的 Kconfig 文件,调用方法如下:

    source "xxx/Kconfig" //xxx 为具体的目录名,相对路径
    

    在顶层 Kconfig 中有如下代码:

    12 source "arch/Kconfig"
    ......
    225
    226 source "common/Kconfig"
    227
    228 source "cmd/Kconfig"
    229
    230 source "dts/Kconfig"
    231
    232 source "net/Kconfig"
    233
    234 source "drivers/Kconfig"
    235
    236 source "fs/Kconfig"
    237
    238 source "lib/Kconfig"
    239
    240 source "test/Kconfig"
    

    从示例代码可以看出,顶层 Kconfig 文件调用了很多其他子目录下的 Kcofig 文件,这些子目录下的 Kconfig 文件在主菜单中生成各自的菜单项。

    3、 menu/endmenu 条目

    menu 用于生成菜单, endmenu 就是菜单结束标志,这两个一般是成对出现的。在顶层Kconfig 中有如下代码:

    14 menu "General setup"
    15
    16 config LOCALVERSION
    17 string "Local version - append to U-Boot release"
    18 help
    19 Append an extra string to the end of your U-Boot version.
    20 This will show up on your boot log, for example.
    21 The string you set here will be appended after the contents of
    22 any files with a filename matching localversion* in your
    23 object and source tree, in that order. Your total string can
    24 be a maximum of 64 characters.
    25
    ......
    100 endmenu # General setup
    101
    102 menu "Boot images"
    103
    104 config SUPPORT_SPL
    105 bool
    106
    ......
    224 endmenu # Boot images
    

    示例代码有两个 menu/endmenu 代码块,这两个代码块就是两个子菜单,第 14行的“menu “General setup””表示子菜单“General setup”。第 102 行的“menu “Boot images””表示子菜单“Boot images”。体现在主菜单界面中就如图 34.2.2.2 所示:
    在这里插入图片描述
    在“ General setup”菜单上面还有 “ Architecture select (ARM architecture)”和“ ARM architecture”这两个子菜单,但是在顶层 Kconfig 中并没有看到这两个子菜单对应的menu/endmenu 代码块,那这两个子菜单是怎么来的呢?这两个子菜单就是 arch/Kconfig 文件生成的。包括主界面中的“Boot timing”、“Console recording”等等这些子菜单,都是分别由顶层
    Kconfig 所调用的 common/Kconfig、 cmd/Kconfig 等这些子 Kconfig 文件来创建的。

    3、 config 条目

    顶层 Kconfig 中的“General setup”子菜单内容如下:

    14 menu "General setup"
    15
    16 config LOCALVERSION
    17 string "Local version - append to U-Boot release"
    18 help
    19 Append an extra string to the end of your U-Boot version.
    20 This will show up on your boot log, for example.
    21 The string you set here will be appended after the contents of
    22 any files with a filename matching localversion* in your
    23 object and source tree, in that order. Your total string can
    24 be a maximum of 64 characters.
    25
    26 config LOCALVERSION_AUTO
    27 bool "Automatically append version information to the version
    string"
    28 default y
    29 help
    ......
    45
    46 config CC_OPTIMIZE_FOR_SIZE
    47 bool "Optimize for size"
    48 default y
    49 help
    ......
    54
    55 config SYS_MALLOC_F
    56 bool "Enable malloc() pool before relocation"
    57 default y if DM
    58 help
    ......
    63
    64 config SYS_MALLOC_F_LEN
    65 hex "Size of malloc() pool before relocation"
    66 depends on SYS_MALLOC_F
    67 default 0x400
    68 help
    ......
    73
    74 menuconfig EXPERT
    75 bool "Configure standard U-Boot features (expert users)"
    76 default y
    77 help
    ......
    82
    83 if EXPERT
    84 config SYS_MALLOC_CLEAR_ON_INIT
    85 bool "Init with zeros the memory reserved for malloc (slow)"
    86 default y
    87 help
    ......
    99 endif
    100 endmenu # General setup
    

    可以看出,在 menu/endmenu 代码块中有大量的“config xxxx”的代码块,也就是 config 条目。 config 条目就是“General setup”菜单的具体配置项,如图 34.2.2.3 所示:
    在这里插入图片描述
    “config LOCALVERSION”对应着第一个配置项,“config LOCALVERSION_AUTO”对应着 第 二 个 配 置 项 , 以 此 类 推 。 我 们 以 “ config LOCALVERSION ” 和 “ config LOCALVERSION_AUTO”这两个为例来分析一下 config 配置项的语法:

    16 config LOCALVERSION
    17 string "Local version - append to U-Boot release"
    18 help
    19 Append an extra string to the end of your U-Boot version.
    ......
    24 be a maximum of 64 characters.
    25
    26 config LOCALVERSION_AUTO
    27 bool "Automatically append version information to the version
    string"
    28 default y
    29 help
    30 This will try to automatically determine if the current tree is a
    31 release tree by looking for git tags that belong to the current
    ......
    43
    44 which is done within the script "scripts/setlocalversion".)
    

      第 16 和 26 行,这两行都以 config 关键字开头,后面跟着 LOCALVERSION 和LOCALVERSION_AUTO,这两个就是配置项名字。假如我们使能了 LOCALVERSION_AUTO这个功能,那么就会下.config 文件中生成CONFIG_LOCALVERSION_AUTO,这个在上一小节讲解如何使能 dns 命令的时候讲过了。由此可知, .config 文件中的“CONFIG_xxx” (xxx 就是具体的配置项名字)就是 Kconfig 文件中 config 关键字后面的配置项名字加上“CONFIG_”前缀。
      config 关键字下面的这几行是配置项属性, 17~24 行是 LOCALVERSION 的属性, 27~44 行是 LOCALVERSION_AUTO 的属性。属性里面描述了配置项的类型、输入提示、依赖关系、帮助信息和默认值等。
      第 17 行的 string 是变量类型,也就是“CONFIG_ LOCALVERSION”的变量类型。可以为:bool、 tristate、 string、 hex 和 int,一共 5 种。最常用的是 bool、 tristate 和 string 这三种, bool 类型有两种值: y 和 n,当为 y 的时候表示使能这个配置项,当为 n 的时候就禁止这个配置项。tristate 类型有三种值: y、 m 和 n,其中 y 和 n 的涵义与 bool 类型一样, m 表示将这个配置项编译为模块。 string 为字符串类型,所以 LOCALVERSION 是个字符串变量,用来存储本地字符串,选中以后即可输入用户定义的本地版本号,如图 34.2.2.4 所示:
    在这里插入图片描述
      string 后面的“Local version - append to U-Boot release”就是这个配置项在图形界面上的显示出来的标题。
      第 18 行, help 表示帮助信息,告诉我们配置项的含义,当我们按下“h”或“?”弹出来的帮助界面就是 help 的内容。
      第 27 行,说明“CONFIG_LOCALVERSION_AUTO”是个 bool 类型,可以通过按下 Y 或N 键来使能或者禁止 CONFIG_LOCALVERSION_AUTO。
      第 28 行,“default y”表示 CONFIG_LOCALVERSION_AUTO 的默认值就是 y,所以这一行默认会被选中。

    4、 depends on 和 select

    打开 arch/Kconfig 文件,在里面有这如下代码:

    7 config SYS_GENERIC_BOARD
    8 bool
    9 depends on HAVE_GENERIC_BOARD
    10
    11 choice
    12 prompt "Architecture select"
    13 default SANDBOX
    14
    15 config ARC
    16 bool "ARC architecture"
    17 select HAVE_PRIVATE_LIBGCC
    18 select HAVE_GENERIC_BOARD
    19 select SYS_GENERIC_BOARD
    20 select SUPPORT_OF_CONTROL
    

      第 9 行,“depends on”说明“SYS_GENERIC_BOARD”项依赖于“HAVE_GENERIC_BOARD”,也就是说“HAVE_GENERIC_BOARD”被选中以后“ SYS_GENERIC_BOARD”才能被选中。
      第 17~20 行,“select”表示方向依赖,当选中“ARC”以后,“HAVE_PRIVATE_LIBGCC”、“HAVE_GENERIC_BOARD”、“SYS_GENERIC_BOARD”和“SUPPORT_OF_CONTROL”这四个也会被选中。

    4、 choice/endchoice

    在 arch/Kconfig 文件中有如下代码:

    11 choice
    12 prompt "Architecture select"
    13 default SANDBOX
    14
    15 config ARC
    16 bool "ARC architecture"
    ......
    21
    22 config ARM
    23 bool "ARM architecture"
    ......
    29
    30 config AVR32
    31 bool "AVR32 architecture"
    ......
    35
    36 config BLACKFIN
    37 bool "Blackfin architecture"
    ......
    40
    41 config M68K
    42 bool "M68000 architecture"
    ......
    117
    118 endchoice
    

    choice/endchoice 代码段定义了一组可选择项,将多个类似的配置项组合在一起,供用户单选或者多选。示例代码 34.2.2.7 就是选择处理器架构,可以从 ARC、 ARM、 AVR32 等这些架构中选择,这里是单选。在 uboot 图形配置界面上选择“Architecture select”,进入以后如图 34.2.2.5所示:
    在这里插入图片描述
    可以在图 34.2.2.5 中通过移动光标来选择所使用的 CPU 架构。第 12 行的 prompt 给出这个choice/endchoice 段的提示信息为“Architecture select”。

    5、 menuconfig

    menuconfig 和 menu 很类似,但是 menuconfig 是个带选项的菜单,其一般用法为:

    1 menuconfig MODULES
    2 bool "菜单"
    3 if MODULES
    4 ...
    5 endif # MODULES
    

    第 1 行,定义了一个可选的菜单 MODULES,只有选中了 MODULES 第 3~5 行 if 到 endif之间的内容才会显示。在顶层 Kconfig 中有如下代码:

    14 menu "General setup"
    ......
    74 menuconfig EXPERT
    75 bool "Configure standard U-Boot features (expert users)"
    76 default y
    77 help
    78 This option allows certain base U-Boot options and settings
    79 to be disabled or tweaked. This is for specialized
    80 environments which can tolerate a "non-standard" U-Boot.
    81 Only use this if you really know what you are doing.
    82
    83 if EXPERT
    84 config SYS_MALLOC_CLEAR_ON_INIT
    85 bool "Init with zeros the memory reserved for malloc (slow)"
    86 default y
    87 help
    88 This setting is enabled by default. The reserved malloc
    89 memory is initialized with zeros, so first malloc calls
    ......
    98 should be replaced by calloc - if expects zeroed memory.
    99 endif
    100 endmenu # General setup
    

    第 74~99 行使用 menuconfig 实现了一个菜单,路径如下:

    General setup
        -> Configure standard U-Boot features (expert users) --->
    

    在这里插入图片描述
    从图 34.2.2.6 可以看到,前面有“[ ]”说明这个菜单是可选的,当选中这个菜单以后就可以进入到子选项中,也就是示例代码 34.2.2.9 中的第 83~99 行所描述的菜单,如图 34.2.2.7 所示:
    在这里插入图片描述
    如果不选择“Configure standard U-Boot features (expert users)”,那么示例代码 34.2.2.9 中的第 83~99 行所描述的菜单就不会显示出来,进去以后是空白的。

    6、 comment

    comment 用 于 注 释 , 也 就 是 在 图 形 化 界 面 中 显 示 一 行 注 释 , 打 开 文 件drivers/mtd/nand/Kconfig,有如下所示代码:

    74 config NAND_ARASAN
    75 bool "Configure Arasan Nand"
    76 help
    ......
    80
    81 comment "Generic NAND options"
    

    第 81 行使用 comment 标注了一行注释,注释内容为:“Generic NAND options”,这行注释在配置项 NAND_ARASAN 的下面。在图形化配置界面中按照如下路径打开:

    -> Device Drivers
       -> NAND Device Support
    

    结果如图 34.2.2.8 所示:
    在这里插入图片描述
    从图 34.2.2.8 可以看出,在配置项“Configure Arasan Nand”下面有一行注释,注释内容为

    “*** Generic NAND options ***”。
    

    7、 source

    source 用于读取另一个 Kconfig,比如:

    source "arch/Kconfig"
    
    展开全文
  • Android_Linux_Kconfig[借鉴].pdf
  • kconfig-frontends-3.10.0.0

    2017-02-20 10:13:53
    linux下搭建pixhawk开发环境所必备的组件 - ‘’kconfig-frontends‘’
  • Kconfig简介

    2013-06-24 20:23:31
    Kconfig和Makefile是我们浏览内核代码时最为依仗的两个文件。基本上,Linux 内核中每一个目录下边都会有一个Kconfig文件和一个Makefile文件。Kconfig和Makefile就好似一个城市的地图,地图引导我们去 认识一个城市,...
  • Kconfig 基本笔录

    千次阅读 2022-01-07 21:09:55
    文章目录kconfig-frontendsKconfig文档Hellostring & comment.config.old反向操作界面勿小menusource 多个Kconfig备忘 kconfig-frontends Kconfig文件的配置, 可以用命令行形式的kconfig-conf, 但更多的是使用...

    kconfig-frontends

    Kconfig文件的配置, 可以用命令行形式的kconfig-conf, 也可以使用界面配置的.

    界面的显示至少有两种.

    一种是kconfig-mconf KConfig, 直接在终端里面显示, 类似 make menuconfig 那样的显示效果, 当然做RT Thread的也熟悉这个界面

    在这里插入图片描述

    另一种 kconfig-qconf KConfig, 用qt风格的

    在这里插入图片描述

    图片源自 Using kconfig for own projects. kconfig makes it easy to create… | by boozlachu | Medium

    第一种图形界面的显示最常用. 本篇在Ubuntu18中操练, 不像Ubuntu20那样直接apt安装来的方便

    先装前端

    # Ubuntu各版本代号Code name参考: https://wiki.ubuntu.com/Releases, 如Ubuntu20是Focal, Ubuntu18是Bionic
    # 查看 kconfig-frontends 在Ubuntu 中的发布历史
    # https://launchpad.net/ubuntu/+source/kconfig-frontends/+publishinghistory
    # Target中并没有bionic, 但有Focal
    
    # Ubuntu 20及以后可以直接
    $ sudo apt install kconfig-frontends
    
    # 下面是 Ubuntu 18的安装方法
    # 这个很久没更新了
    # https://github.com/jameswalmsley/kconfig-frontends
    # 那就参考 Nuttx 开发中的 kconfig-frontends 安装
    # https://nuttx.apache.org/docs/latest/quickstart/install.html 
    
    # 可能需要安装的依赖
    $ sudo apt install \
    bison flex gettext texinfo libncurses5-dev libncursesw5-dev \
    gperf automake libtool pkg-config build-essential gperf genromfs \
    libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \
    libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
    
    $ git clone https://bitbucket.org/nuttx/tools.git
    $ cd tools/kconfig-frontends
    $ ./configure --enable-mconf
    $ make
    $ sudo make install
    # 提示 
    # Libraries被放到了: /usr/local/lib
    # 应用放到了 /usr/local/bin
    # echo $PATH 中只有 /usr/local/bin, 没有/usr/local/lib
    # 不慌, 可以把/usr/local/lib加入环境变量? 也可以把几个.so挪到/usr/lib里
    $ sudo cp /usr/local/lib/libkconfig* /usr/lib
    

    kconfig-mconf KConfig界面中提示的一些快捷键, 主要是SPACE, ESC, ENTER 还有用于搜索的 /

    Arrow keys navigate the menu.  
    <Enter> selects submenus ---> (or empty submenus ----).  
    Highlighted letters are hotkeys.
    Pressing <Y> includes, <N> excludes, <M> modularizes features.  
    Press <Esc><Esc> to exit, <?> for Help, </> for Search.
    Legend: [*] built-in  [ ] excluded  <M> module  < > module capable
    

    Kconfig文档

    官方文档: https://www.kernel.org/doc/Documentation/kbuild/kconfig-language.txt

    翻译参考: Kconfig-language翻译 | 唯客工作室 (vinshell.cc)

    Hello

    $ mkdir playground && cd $_
    
    # 新建文件 Kconfig, 一般叫这个名字的在VScode中用插件可以渲染出来
    # config: 启动一个新的配置条目
    # ABC: 符号名Symbol
    # 合起来就是 CONFIG_ABC
    $ vi Kconfig
    config ABC
    	tristate "Hello ABC"
    
    # 进入配置界面
    $ kconfig-mconf Kconfig
    

    终端就出现界面

    在这里插入图片描述

    按空格或者Y选中, 让它变成*号, 然后直接按两下ESC, 退出

    在这里插入图片描述

    默认Yes, 回车, 就退出界面, 此时命令行提示写入了 .config 文件

    $ kconfig-mconf Kconfig 
    configuration written to .config
    
    *** End of the configuration.
    *** Execute 'make' to start the build or try 'make help'.
    
    $ cat .config
    #
    # Automatically generated file; DO NOT EDIT.
    # Configuration
    #
    CONFIG_ABC=y
    

    还是用图片来形象的说明一下吧

    在这里插入图片描述

    其中:

    • config ABC创建新条目(entry), 大写加下划线就变成了.config文件中的CONFIG_ABC
    • tristatestring 是两大基本类型, 前者选中为y, 默认不选中n, 还有一种m代表module, string的前缀是(), 可以输入字符串. 类型定义还有bool/hex/int
    • Hello ABC是输入提示(prompt, 每个entry最多一个prompt)

    string & comment

    继续加码

    $ vi Kconfig
    # two entrys and one comment
    
    config ABC
    	tristate "Hello ABC"
    	default y
    	help
    	  display Hello ABC
    
    config XYZ
    	string "Hello XYZ"
    	default "Please Enter"
    	help
    	  user input will display in ()
    
    comment "it's a comment"
    

    其中:

    • #开头表示注释
    • CONFIG_ABC默认值是y, help后面是帮助信息display Hello ABC
    • CONFIG_XYZ默认值是Please Enter
    • comment 是注释, 后面的文本在界面中会显示出来, 被*** ***包裹

    运行kconfig-mconf Kconfig, 显示

    在这里插入图片描述

    其中:

    • 第一个条目默认选中
    • 第二个条目因为是新增的, 后面会显示(NEW), 保存配置下次就不显示了
    • 第三行为注释的文本

    进入第二个条目, 可以删掉默认的Please Enter字样, 删掉, 随便输入一些文本, 回车

    在这里插入图片描述

    界面就变成了输入的字样:

    在这里插入图片描述

    方向键移到条目, 可以按下?(也就是Shift+/)查看该条目的help, 如Hello XYZ条目的help:

    在这里插入图片描述

    退出后, 按两下ESC, 回车保存退出, 看下.config文件

    $ cat .config
    #
    # Automatically generated file; DO NOT EDIT.
    # Configuration
    #
    CONFIG_ABC=y
    CONFIG_XYZ="dfjsalkd"
    
    #
    # it's a comment
    #
    

    .config.old

    经过上面的操作后, 发现多了 .config.old 文件

    $ tree -a
    .
    ├── .config
    ├── .config.old
    └── Kconfig
    
    0 directories, 3 files
    
    $ cat .config.old
    #
    # Automatically generated file; DO NOT EDIT.
    # Configuration
    #
    CONFIG_ABC=y
    

    .config.old其实保存的是上次的配置, 可以用于回滚等

    反向操作

    .config文件中提示DO NOT EDIT, 但我们还是痛下狠手, 看下直接修改.config会不会影响界面

    $ vi .config
    #
    # Automatically generated file; DO NOT EDIT.
    # Configuration
    #
    CONFIG_ABC=n
    CONFIG_XYZ="dog"
    
    #
    # it's a comment
    #
    

    打开配置界面 kconfig-mconf Kconfig, 如我们所愿, 它变了

    在这里插入图片描述

    所以, 可以不通过界面, 直接修改.config文件, 仍然会使配置项生效, 但是不会更新.config.old, 这有时会有些危险

    $ cat .config.old
    #
    # Automatically generated file; DO NOT EDIT.
    # Configuration
    #
    CONFIG_ABC=y
    

    界面勿小

    把终端窗口缩小, 进入配置

    $ kconfig-mconf Kconfig
    Your display is too small to run Menuconfig!
    It must be at least 19 lines by 80 columns.
    

    提示至少需要19行. 80列

    menu

    类似于界面操作中常见的一级菜单二级菜单, 我们可以把一些条目用 menuendmenu包起来

    $ vi Kconfig
    # two entrys and one comment
    
    menu "it's a menu"
    
    config ABC
    	tristate "Hello ABC"
    	default y
    	help
    	  display Hello ABC
    
    config XYZ
    	string "Hello XYZ"
    	default "Please Enter"
    	help
    	  user input will display in ()
    
    endmenu
    
    comment "it's a comment"
    

    进入配置面 kconfig-mconf Kconfig

    在这里插入图片描述

    可以按Enter进入这个菜单, 那这两个条目确实是进来了

    在这里插入图片描述

    source 多个Kconfig

    关键字source用于读取指定的配置文件, 可以用source把多个Kconfig串起来, 就像代码展开一样

    我们新建一个test文件夹, 里面也放一个Kconfig

    $ tree -a
    .
    ├── .config
    ├── .config.old
    ├── Kconfig
    └── test
        └── Kconfig
    
    1 directory, 4 files
    
    $ cat test/Kconfig
    config TEST
    	tristate "Hello TEST"
    	help
    	  display Hello TEST
    	  
    $ cat Kconfig
    menu "it's a menu"
    
    config ABC
    	tristate "Hello ABC"
    	default y
    	help
    	  display Hello ABC
    
    config XYZ
    	string "Hello XYZ"
    	default "Please Enter"
    	help
    	  user input will display in ()
    
    endmenu
    
    source "test/Kconfig"
    
    comment "it's a comment"
    

    Kconfig中source放在了menu和comment中间, 进入配置kconfig-mconf Kconfig看看效果

    在这里插入图片描述

    发现 test/Kconfig 的配置条目Hello Test被插进去了, 选中它保存退出

    $ tree -a
    .
    ├── .config
    ├── .config.old
    ├── Kconfig
    └── test
        └── Kconfig
    
    1 directory, 4 files
    
    $ cat .config
    #
    # Automatically generated file; DO NOT EDIT.
    # Configuration
    #
    
    #
    # it's a menu
    #
    CONFIG_ABC=y
    CONFIG_XYZ="dog"
    CONFIG_TEST=y
    
    #
    # it's a comment
    #
    

    test文件夹下并没有.config, 是因为我们没有进去test文件夹kconfig-mconf Kconfig

    外面的.config确实是有CONFIG_TEST的配置项

    备忘

    几大关键字的用法这里就不展开一一测试了

    - config
    - menuconfig
    - choice/endchoice
    - comment
    - menu/endmenu
    - if/endif
    - source
    

    更多信息和用法可以参考官方的 Kconfig 文档, 或者直接去看linux内核源码中的Kconfig

    还有一些kconfig-开头的常用命令

    $ kconfig-
    kconfig-conf     kconfig-diff     kconfig-gettext  kconfig-mconf    kconfig-merge    kconfig-nconf    kconfig-tweak
    
    # 一行一行命令的方式配置: kconfig-conf Kconfig
    # 比较两个.config的差异: kconfig-diff .config .config.old
    # 查看配置?: kconfig-gettext Kconfig
    # merge操作: kconfig-merge
    # 更朴素的界面形式: kconfig-nconf Kconfig
    # 微调?: kconfig-tweak
    

    欢迎扫描二维码关注微信公众号, 及时获取最新文章:
    在这里插入图片描述

    展开全文
  • 工程分析:Kconfig

    2021-08-19 14:35:23
    实验背景 uboot 源码链接 编译方式# for arm $ export ARCH=arm $ export CROSS_COMPILE=arm-linux-gnueabi- $ make vexpress_ca9x4_defconfig ...uboot 和 linux 源码 的编译系统:Makefile + Kconfig
  • Kconfig 和 Kbuild

    2022-08-21 21:31:00
    Kconfig 是饭店菜单,Makefile 是菜谱,.config 是用户在菜单上的勾选。
  • Kconfig和Makefile

    2012-12-19 21:31:23
    Linux内核源码树的每个目录下都有两个文档Kconfig和Makefile。分布到各目录的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文档相关的内核配置菜单。在执行内核配置make menuconfig时...
  • Kconfig language exposition document
  •   Kconfig 是 Linux Kernel Build System 中用来对 Linux 内核进行配置工具,后来 U-Boot 也引入了 Kbuild/Kconfig 系统。当执行 make menuconfig 时会出现一个配置界面,允许开发者通过类似于 UI 的方式来对内核...
  • kconfig 介绍 (Intro) Every Linux professional write scripts. Someеimes light, linear. Sometimes complex script with functions and libs(yes, you can write your bash-library for use in other scripts). ...
  • Kconfig语法学习

    2022-03-21 21:48:16
    1、调用其它Kconfig 顶层Kconfig需要调用其他路径下的Kconfig source "xxx/Kconfig" eg: source "arch/Kconfig" /*也就是引用arch文件下的Kconfig*/ source "boards/Kconfig" source "soc/Kconfig" source ...
  • Kconfig 语法介绍1

    2018-01-09 17:24:07
    Kconfig 语法介绍1 Kconfig 语法介绍1 Kconfig 语法介绍1 Kconfig 语法介绍1
  • 创建自己的kconfig文件,kconfig各种使用方法实验,kconfig创建菜单,kconfig创建依赖项。
  • Kconfig Kbuild

    千次阅读 2022-03-21 19:30:05
    代码工程中常常会见到一些名为Kconfig Kbuild的文件 这种文件的作用是:面向编译脚本,屏蔽硬件的差异。Kconfig 并不是一种特殊的脚本,而是一种解决问题的方法,他可以用任何方法实现:python、shell+makfefile...
  • Kconfig配置文件

    2020-10-24 15:07:02
    内核源码树的目录下都有两个文件Kconfig和Makefile。分布到各目录的Kconfig文件构成了一个分布式的内核配置数据库,每个Kconfig文件分别描述了所属目录源文档相关的内核配置菜单。在内核配置make menuconfig(或...
  • Kconfig详解

    2021-01-27 15:01:43
    当执行#make menuconfig时会出现内核的配置界面,所有配置工具都是通过读取"arch/$(ARCH)Kconfig"文件来生成配置界面,这个文件就是所有配置的总入口,它会包含其他目录的Kconfig 注:对于uboot来讲,配置的总入口...
  • kconfig

    2015-01-10 18:20:09
    makefile menuconfig过程讲解 当我们在执行make menuconfig这个命令时,系统到底帮我们做了...arch/$ARCH/Kconfig文件、各层目录下的Kconfig文件 Linux内核根目录下的makefile文件、各层目录下的makefile文件 Linu
  • Linux内核配置之Kconfig

    千次阅读 2021-07-28 13:56:39
    Kconfig是按照特定的格式来书写的文件,menuconfig程序可以识别这种格式,然后从中提取出有效信息组成menuconfig中的菜单项。在修改内核配置或驱动移植时,需要在Kconfig文档中修改或添加一些内容。 经典 博文 网址 ...
  • $(xxxxxxxx)也被称为“引用变量”,引用的是Kconfig文件定义的config句柄的变量(config XXX)xxx就是变量,在这个条目下会有bool int 等定义变量类型 解决了刚才的“小插曲”(但是Makefile,config,Kconfig建议...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,195
精华内容 7,278
关键字:

Kconfig