U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig

这篇具有很好参考价值的文章主要介绍了U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在上一节中,我们介绍了U-Boot编译和.config配置文件生成分析,我们可以通过make xxx__defconfig来进行一些配置,其中xxx__defconfig对应config目录下的基于不同开发板的一些配置,指令执行完后会根据对应的配置在根目录下生成一个.config配置文件。而这个配置文件也可以通过图形化配置页面来生成,这一节就来介绍一下。

1 xxx_defconfig和.config文件

1.1 文件对比

1、imx6ul_isiot_emmc_defconfig及其对应.config对比

我们对比一下两个文件,左边是imx6ul_isiot_emmc_defconfig文件,右边是make imx6ul_isiot_emmc_defconfig生成的.config文件,可以看到配置文件里有的,.config文件里都有,除此之外.config文件里还有一些其它的配置。

  • 文件中#开头的为注释

U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig,嵌入式Linux,linux

2、imx6ul_isiot_emmc_defconfigimx6ul_isiot_nand_defconfig对比

这里找一个与imx6ul_isiot_emmc_defconfig类似的配置imx6ul_isiot_nand_defconfig,来看一下区别:

U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig,嵌入式Linux,linux

可以看到,如果要使能NAND的话,需要多定义几个宏定义。

3、nand的.config和emmc的.config对比

左边是nand的.config,右边是emmc的.config

U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig,嵌入式Linux,linux

可以看出,比如nand的一行CONFIG_MTD_RAW_NAND=y,生成出来后可能对应了多个与此相关的配置。

1.2 总结

1、xxx_defconfig

在U-Boot的defconfig文件中,配置项之间存在依赖关系。当你在defconfig文件中启用或禁用某个配置项时,可能会触发相关的配置项引申或取消。

  1. 直接依赖关系:defconfig文件中,一些配置项可能有直接的依赖关系。这意味着启用或禁用一个配置项可能会导致与之直接相关的其他配置项的状态发生变化。这通常是通过配置项的名称来指定的。
  2. 间接依赖关系: 有些配置项可能存在间接的依赖关系。这意味着启用或禁用一个配置项可能会触发一系列的配置项状态变化,这些变化可能是由于其他配置项的依赖关系而产生的。

所以在生成的.config文件中,xxx_defconfig的一项配置可能有与之相关的多个配置。

2、.config

.config文件是一个文本文件,包含了一系列的宏定义,用于指定U-Boot的构建选项。这些宏定义决定了编译过程中使用的各种配置,如开启或关闭某个功能、指定交叉编译工具链的路径等。例如,在C代码中可以使用类似以下的方式来检查某个配置是否被定义:

#ifdef CONFIG_MY_FEATURE
    // 这段代码只有在 CONFIG_MY_FEATURE 被定义时才会被编译
#endif

2 图形化配置之Kconfig

2.1 介绍

Kconfig(Kernel Configuration)是Linux内核中用于配置构建选项的工具之一。它允许开发者通过一个文本界面或图形界面来选择、配置和调整内核的各种功能和模块。Kconfig文件包含了内核的配置信息,这些信息指定了内核编译时的各种选项,如支持的硬件、文件系统、网络协议等。

以下是Kconfig的一些主要特点和用法:

  1. 配置系统的基本原理: Kconfig采用了一种树状结构的配置系统。用户可以通过选择配置项,打开或关闭功能、模块或驱动,以满足特定需求。
  2. 配置文件: Kconfig的配置信息存储在内核源代码树中的Kconfig文件中。每个子目录都可以包含一个Kconfig文件,用于配置该目录下的源代码。
  3. 菜单配置界面: Kconfig提供了一个文本界面,也可以通过图形界面工具(如menuconfignconfigxconfig等)进行配置。这些工具允许用户在配置过程中浏览选项,选择开启或关闭功能,并设置相应的参数。
  4. 依赖关系: Kconfig支持配置项之间的依赖关系。某些功能可能依赖于其他功能的开启或关闭,Kconfig会确保用户不能选择不合理的配置。
  5. 自动生成配置: Kconfig支持自动检测系统硬件和软件环境,从而生成适用于当前系统的默认配置。这有助于简化配置过程。
  6. 配置文件生成: 在用户完成配置后,Kconfig会生成一个.config文件,其中包含了用户选择的所有配置信息。这个文件将用于实际的内核编译过程。
  7. make命令: 用户可以使用make menuconfigmake nconfig等命令来启动配置工具。在配置完成后,使用make命令即可开始内核的编译过程。

make menuconfig是Linux内核编译中使用的一个命令,它打开一个文本菜单界面,允许用户配置内核的各种选项。在执行make menuconfig之前,相关的文件主要包括:

  1. Kconfig文件: Kconfig文件包含了内核的配置信息,以树状结构的形式组织。每个功能、模块或驱动都有对应的Kconfig条目。这些文件通常位于内核源代码树的各个目录中,例如,arch/目录、drivers/目录等。make menuconfig通过这些文件构建菜单界面。
  2. Makefile: 内核源代码中的Makefile包含了编译内核的相关规则和指令。make menuconfig命令会使用Makefile中的规则来创建配置菜单并执行相应的操作。
  3. .config文件: 在用户使用make menuconfig过程中,配置的结果会保存在一个名为.config的文件中。这个文件包含了用户在配置过程中所做的选择,即内核的具体配置。.config文件将在后续的编译过程中被使用。

执行make menuconfig后,系统会读取Kconfig文件和已经存在的.config文件,然后在终端中打开一个菜单,用户可以在菜单中选择和配置不同的内核功能。选择保存并退出后,配置的结果会被写入.config文件中。

虽然Kconfig是设计用来配置Linux内核的工具,但是U-Boot也使用了这个图形工具。使用这个图形化工具需要安装libncurses-dev库:

sudo apt-get install libncurses-dev

2.1 U-Boot的图形配置

我们直接使用make menuconfig就可以打开图形配置界面了,在上一节中我们已经修改了Makefile指定了CROSS_COMPILE,如果没有指定的话需要指定这个变量:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

如下图所示:
U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig,嵌入式Linux,linux
如上面的提示,输入Y可以将某个功能编译进U-Boot源码,输入N则是取消编译,输入M则是将功能编译成模块。

比如我们进入下面的Command Line Interface,这个界面就是用来配置U-Boot命令行中支持的指令:
U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig,嵌入式Linux,linux
我们进去Memory commands看一下:
U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig,嵌入式Linux,linux
我们可以通过按下YN来使能和取消某些不需要支持的指令。所有的选项配置完之后选择下面的Save即可保存配置到.config中。

实际上这些配置都对应代码中的宏定义,我们可以根据我们的需求打开或关闭一些功能,从而实现U-Boot的裁剪。当然如果有必要的话,还是建议把每一个配置项都理解一遍。

3 .config中的配置是如何使用的

.config 文件通常不是直接包含在代码中的头文件(.h 文件)中。它是通过Makefile中的一些规则和变量传递给预处理器的。

U-Boot的Makefile通常会包含一个名为config.mk的文件,这个文件会包含.config文件的内容并将其转换为Makefile变量。通过这种方式,Makefile 中的规则可以使用这些变量,将它们传递给编译器进行条件编译。

下面举一个简单的例子说明U-Boot的Makefile中如何处理.config文件:文章来源地址https://www.toymoban.com/news/detail-793091.html

# Makefile

# Include the configuration file
-include config.mk

# Compiler flags
CFLAGS += -Wall

# Conditional compilation based on configuration options
ifeq ($(CONFIG_FEATURE_A),y)
  CFLAGS += -DFEATURE_A_ENABLED
endif

ifeq ($(CONFIG_FEATURE_B),y)
  CFLAGS += -DFEATURE_B_ENABLED
endif

# Target rule
all: my_program

my_program: some_code.c
    $(CC) $(CFLAGS) $^ -o $@
  • -include config.mk用于包含config.mk文件,该文件会根据.config文件的内容生成相应的变量。
  • ifeq ($(CONFIG_FEATURE_A),y)ifeq ($(CONFIG_FEATURE_B),y)用于检查配置文件中的选项是否为 y(启用),如果是,则在CFLAGS变量中添加相应的编译选项。

到了这里,关于U-Boot学习(3):.config、defconfig文件对比及图形化配置Kconfig的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Boot学习一】创建项目 && Spring Boot的配置文件

    目录 一、安装插件 二、创建Spring Boot项目 1、创建项目 1.1 使用IDEA创建  1.2 网页版本创建 2、项目目录介绍与运行 三、Sping Boot的配置文件(重点) 🌷1、.properties配置文件 (1)基础语法:Key = value (2)读取配置⽂件中的内容,@Value 注解使⽤“${}”的格式读取; 🌷2、.y

    2024年02月16日
    浏览(42)
  • U-boot常用命令(二)

    有时候需要在uboot中对SD卡或EMMC中存储的文件进行操作,这时候就要用到文件操作命令。跟文件操作相关的命令有:fatinfo、fatls、fstype、fatload 和 fatwrite,但是这些文件操作命令只支持 FAT 格式的文件系统!! 对于I.MX6U来说,SD/EMMC分为三个分区。 存放uboot 存放Linux zImage,dtb设

    2024年02月04日
    浏览(32)
  • U-Boot 烧写与启动

    1.uboot 编译好以后就可以烧写到板子上使用了,这里我们跟前面裸机例程一样,将 uboot 烧写到 SD 卡中,然后通过 SD 卡来启动来运行 uboot。使用 imxdownload 软件烧写,命令如 下:  chmod 777 imxdownload   //给予 imxdownload 可执行权限  sudo fdisk -l   //查看挂载设备  ./imxdownload u-boo

    2023年04月26日
    浏览(44)
  • Mainline Linux 和 U-Boot编译

    By Toradex胡珊逢 Toradex 自从 Linux BSP v6 开始在使用 32位处理器的 Arm 模块如 iMX6、iMX6ULL、iMX7 上提供 mainline/upstream kernel ,部分 64位处理器模块如 Verdin iMX8M Mini/Plus 也提供实验性支持。文章将以季度发布版本 Linux BSP V6.3.0 为例介绍如何下载和编译 mainline/upstream Linux k

    2024年02月10日
    浏览(45)
  • U-boot(四):start_armboot

            本文主要探讨210的uboot启动的第二阶段,主要函数为start_armboot。 uboot     一阶段初始化SoC内部部件(看门狗、时钟等),初始化DDR,重定位     二阶段初始化其余硬件(iNand、网卡芯片···)以及命令、环境变量等···     启动打印硬件信息,进入bootdelay,读秒完后执行bootc

    2024年02月04日
    浏览(44)
  • mmsegmentation的config文件配置

    mmseg-datasets 存储了所有数据集的类别和配色等等,导入自己的一个py文件。 config- base -datasets -ZihaoDataset_pipeline.py文件。 这里需要修改的是 数据集的类名和数据集路径 。以及还有其他一些参数。 主要修改的是类别数目。路径为:work/20240116/mmsegmentation/Zihao-Configs。

    2024年01月17日
    浏览(37)
  • VSCode gdb 调试 qemu u-boot 的方法

    最近使用 VS Code GDB 调试 qemu,有了一点收获,u-boot 编译后生成了一个 elf 文件:u-boot,是否也可以调试一下? 为何需要 VS Code GDB 调试,直接 gdb 调试不就可以了吗?答案就是:VS Code 可以界面调试,命令行调试会枯燥很多 使用 qemu,就是不需要板子 win10 64位 VMware Workstation P

    2024年02月11日
    浏览(45)
  • Java企业级开发学习笔记(4.4)Spring Boot加载自定义配置文件

    创建 Spring Boot 项目 单击【创建】按钮 在 resources 里创建 myconfig.properties 文件 设置文件编码 设置学生的四个属性值 在 cn.kox.boot 包里创建config子包,在子包里创建 StudentConfig 打开自带的测试类 ConfigDemo01ApplicationTests 注入学生配置实体,创建 testStudentConfig() 测试方法,在里面输

    2024年02月08日
    浏览(48)
  • U-Boot移植 (2)- LCD 驱动修改和网络驱动修改

    链接: C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂 一般 uboot 中修改驱动基本都是在 xxx.h 和 xxx.c 这两个文件中进行的, xxx 为板子名称,即 board/freescale/mx6ull_myboard/mx6ull_myboard.c 和 include/configs/mx6ull_myboard.h 这两个文件。 一般修改 LCD 驱动重点注意以下

    2024年02月12日
    浏览(58)
  • Spring Boot学习随笔- @SpringBootApplication详解、加载绝对路径配置文件、工厂创建对象(@ConfigurationProperties、@Value)

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 这是一个 组合注解 ,就是由多个注解组成。下列注解红框内称为 元注解 (jdk提供) @Target :指定注解作用范围 @Retention :指定注解什么时候生效 重要注解 @SpringBootConfiguration:自动配置Spring、SpringMVC相关环境 @EnableAutoCo

    2024年02月05日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包