最新uboot的Kbuild系统 3 .config的生成

2023-05-16

前面的工作产生了一个conf

关键点是由conf产生.config的过程

最后是通过执行

scripts/kconfig/conf  --defconfig=arch/../configs/rpi_defconfig Kconfig 生成的


Kconfig包含了当前目录中可以进行的一些配置信息。

rpi_defconfig包含了默认的配置信息。

conf根据rpi_defconfig的一些配置,参考Kconfig产生最终的.config

如果是make menuconfig。那么就直接读取Kconfig。用户通过界面来配置产生.config


conf通过

conf_parse(Kconfig);来解析可选的配置信息,保存到一个链表中。

随后通过

conf_read(rpi_defconfig)读取默认的设置文件,并且生成新的配置文件

调用

conf_set_all_new_symbols更新关系链表

最后调用

conf_write写入到.config中


首先看Kconfig的构成


Kconfig的基本构成是

1 config项目

config symbolname

options

symbolname 配置名称,options是选项


config LOCALVERSION_AUTO
bool "Automatically append version information to the version string"
default y
help
 This will try to automatically determine if the current tree is a
 release tree by looking for Git tags that belong to the current
 top of tree revision.

LOCALVERSION_AUTO 就是配置名称



bool是变量类型,变量类型有五种。

分别是bool string tristate int hex

bool 只能是y或者n (选择或者不选择)

tristate 可以是y n m (选择或者不选择或者编译为模块)

string就是字符串


"Automatically append version information to the version string"  就是对于该菜单的简单描述。同promote选项

比如

bool "config for cpu"

bool

promote "config for cpu"是一个意思




default y 表示默认是选中y的


help 的内容是详细的解释。在menuconfig的时候使用使用?可以打开帮助


depend on XXX 表示只有XXX配置被选中的时候,当前选项才能够被配置。




2menu项目

通常是

menu  "menu A"

config cfgA

......

config cfgB

....

endmenu


显示后就是

menu--->

[] cfgA 

[] cfgB


3choice选项

choice包含了一组可以被选择的集合,选择只能是bool和tristate类型。并且不能同时存在两种。是bool就全部是bool。是tristate就都是tristate

也就是所有的choice里面bool只选中某一种。



choice

promote "select cpu"

config A

bool "cpu A"

config B

bool "cpu B"

config C

bool "cpu C"

endchoice

那么就是可以选择一个合适的cpu

select cpu---> (cpu A cpu B cpu C)




4 select 选项是反向依赖 dependson是正向依赖

dependson XXX 是如果该选项可以被配置,前提是XXX已经被选中。

而select XXX是如果选中了该选项。那么XXX选项也被选中。









后续menuconfig或者conf qconf 等根据用户选择或者xxx_defconfig将这些选项写入.config文件中

配置后的.confg文件将根据不同的选项分别写入。写入的时候在配置名称前面加上CONFIG_


比如

config ARM

bool

default y

写入.config以后就变成了

CONFIG_ARM=y

还有 CONFIG_MODULEA=m 表明该配置MODULEB被配置编译到模块中

CONFIG_XXX=n或者没有这个配置就表示选择为n


而string就变成了

CONFIG_SYS_ARCH="arm"
CONFIG_SYS_CPU="arm1176"
CONFIG_SYS_SOC="bcm283x"
CONFIG_SYS_VENDOR="raspberrypi"


int变成了

CONFIG_SYS_MALLOC_F_LEN=0x400


所以conf也就是根据rpi_defconfig以及各个目录以及Kconfig里面的一些默认配置,最后产生.config

CONFIG_ARM=y
CONFIG_ARCH_BCM283X=y
CONFIG_TARGET_RPI=y
CONFIG_OF_BOARD_SETUP=y
CONFIG_HUSH_PARSER=y
CONFIG_SYS_PROMPT="U-Boot> "
CONFIG_CMD_BOOTZ=y
# CONFIG_CMD_IMLS is not set
# CONFIG_CMD_FLASH is not set
CONFIG_CMD_MMC=y
CONFIG_CMD_USB=y
# CONFIG_CMD_FPGA is not set
CONFIG_CMD_GPIO=y
CONFIG_CMD_DHCP=y
CONFIG_CMD_MII=y
CONFIG_CMD_PING=y
CONFIG_CMD_EXT2=y
CONFIG_CMD_EXT4=y
CONFIG_CMD_FAT=y
CONFIG_CMD_FS_GENERIC=y
CONFIG_USB=y
CONFIG_USB_STORAGE=y
CONFIG_PHYS_TO_BUS=y
CONFIG_OF_LIBFDT=y

比如根据 TARGET_RPI

config TARGET_RPI
bool "Raspberry Pi (all BCM2835 variants)"
help
 Support for all ARM1176-/BCM2835-based Raspberry Pi variants, such as
 the A, A+, B, B+, Compute Module, and Zero. This option cannot
 support BCM2836/BCM2837-based Raspberry Pis such as the RPi 2 and
 RPi 3 due to different peripheral address maps.


 This option creates a build targetting the ARM1176 ISA.
select BCM2835

自动选中了BCM2835

config BCM2835
bool "Broadcom BCM2835 SoC support"
depends on ARCH_BCM283X
select CPU_ARM1176

随后自动选择了CPU_ARM_1176,又由于依赖了 ARCH_BCM283X。rpi_defconfg中还有一个配置CONFIG_ARCH_BCM283X=y


.config就是这样生成的。至于conf由于功能不变。所以就不解析了,东西太多,只要看成一个黑盒子,作用就是按照一定的规则将defconfig和Kbuild输入变成.config输出就行了 ,这个规则就是kconfig的规则。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

最新uboot的Kbuild系统 3 .config的生成 的相关文章

随机推荐

  • Python量化相关

    量化实例 xff1a 可转债轮动策略 LOF 封基 ETF动量策略 小市值策略 Python xff1a Python 基础教程 菜鸟教程Python 3 教程 菜鸟教程Windows搭建python开发环境 xff0c python入门到
  • Visual Basic相关

    vb教程
  • 三极管和运放构成的几种恒流源电路分析

    如何利用三极管和运放设计一个150mA的恒流源 xff0c 求电路图 xff0c 验证过的 xff01 xff01 xff01 三极管和运放构成的几种恒流源电路分析 还不是太理解 这几种电路都可以在负载电阻RL上获得恒流输出 第一种由于RL
  • AI相关资料整理

    scikit learn中文社区
  • Android开发知识备忘

    Android Studio 上jar包 xff0c aar包 xff0c aidl xff0c aidl打成aar包的正确使用Android AIDL bindService后不能调用onServiceConnected方法 xff08
  • 【C++】struct和class的区别

    在C 43 43 中我们可以看到struct和class的区别并不是很大 xff0c 两者之间有很大的相似性 那么为什么还要保留struct 这是因为C 43 43 是向下兼容的 xff0c 因此C 43 43 中保留了很多C的东西 一 首
  • MPLAB程序中如何设置配置字

    基于MPLAB X IDE配置位设置讲解 在不同的芯片中其配置字不尽相同 xff0c 但是管家最常用到的有如下几部分 xff1a 1 芯片的振荡模式 xff0c 有内外之分 xff0c 还有三个速度的选择 2 xff0c 片内看门狗的启用
  • 直流电机驱动电路设计

    http bbs ednchina com BLOG ARTICLE 177889 HTM 一 直流电机驱动电路的设计目标 在直流电机驱动电路的设计中 xff0c 主要考虑一下几点 xff1a 功能 xff1a 电机是单向还是双向转动 xf
  • 奇偶校验码

    http blog 163 com ma youzhong blog static 42459154200821785759423 老顽童 xff08 原创 xff09 二进制数据经过传送 存取等环节 xff0c 会发生误码 xff08 1
  • 串口半双工与全双工

    怎么这么多人认为 xff14 xff18 xff15 是半双工 xff1f 大家能不能看一下具体的定义啊 xff1f xff01 不要认为我们经常使用 xff14 xff18 xff15 的半双工方式就认为 xff14 xff18 xff1
  • NPN传感器PNP传感器原理和分类

    PNP与NPN型传感器其实就是利用三极管的饱和和截止 xff0c 输出两种状态 xff0c 属于开关型传感器 但输出信号是截然相反的 xff0c 即高电平和低电平 PNP输出是高电平1 xff0c NPN输出的是低电平0 PNP与NPN型传
  • Windows系统上在vscode连接服务器http-server

    1 打开vscode xff0c 创建一个HTML文件 2 查看 gt 终端 3 Windows10的终端是powershell xff0c 点击 xff0c 在下拉栏找到默认 xff0c 更改成cmd终端 4 输入 npm install
  • 精密单点定位技术(PPP)和RTK技术有什么区别

    首先用通俗的话来说 xff0c RTK是先架设一个基站 xff0c 基站把自己的误差是多少告诉我 xff0c 我再用这个误差项去消除自己移动站的误差 而PPP不用我们自己架设基站 xff0c 已经有一些基础的基站 xff0c 通过卫星发送的
  • ubuntu network manager 网络需要手工重启解决

    乌班图的无线和网络需要手工 sudo service network manager restart才可以搜索到 其实主要是我手工编辑了 etc network interface 修改的方法就是在 etc NetworkManager N
  • C#垃圾回收GC机制

    https www cnblogs com yzl050819 p 6245463 html 可以参考这篇文章的内容 程序员不能控制解构器何时将被执行因为这是由垃圾收集器决定的 垃圾收集器检查不在被应用程序使用的对象 它认为这些条件是符合清
  • 编译xlslib 测试写入中文

    1下载xlslib库 https sourceforge net projects xlslib source 61 directory 我下载的是 xlslib package 2 5 0 zip 解压 在xlslib xlslib bu
  • 电商API:拍立淘图片搜索

    item search img 按图搜索淘宝商品 xff08 拍立淘 xff09 查看演示 onebound taobao item search img 请求参数 xff1a imgid 61 http g search3 alicdn
  • Qt的UI布局以及控件间隔(Spacing)边距(Margins)

    替一个Widget设置布局有两种方法 1layout 构造函数传递QWidget QVBoxLayout MainQVboxLayout 61 new QVBoxLayout MainWidget 2layout构造函数传递NULL xff
  • 让Qt自定义窗口边界可以拉伸

    qt去掉外边框以后 边界不能拉伸 第一 根据mouseevent事件到达边界的时候自己处理 通过resize 来设置 这种需要写的代码较多 windows平台上有更简版的方法 处理winevent里面的 WM NCHITTEST switc
  • 最新uboot的Kbuild系统 3 .config的生成

    前面的工作产生了一个conf 关键点是由conf产生 config的过程 最后是通过执行 scripts kconfig conf defconfig 61 arch configs rpi defconfig Kconfig 生成的 Kc