RK平台U-Boot开发干货:defconfig分层配置体系

电子说

1.4w人已加入

描述

U-Boot 内置上千项可配置开关,如果每款硬件板卡都单独维护一份完整配置文件,配置文件数量会急剧膨胀、维护成本极高。瑞芯微 RK 平台独创基础 defconfig + config fragment 配置片段叠加方案,完美解决多板卡配置冗余、同步难的痛点,本文以 RK3576 为例完整拆解整套配置体系。

一、RK3576 完整配置家族图谱

RK3576 所有产品配置均依托同一份基础配置衍生,不同产品仅保留差异化配置项,整体层级关系如下:

瑞芯微

核心设计思路:每个产品变体只维护差异配置项,不再拷贝完整基础配置

二、基础 defconfig:所有产品统一底层底座

configs/rk3576_defconfig  RK3576 全系产品的通用基础配置,内置约 120 项通用开关,按功能分类整理核心配置如下:

1. 架构与 SoC项)

  •  
  •  
  •  
  •  
CONFIG_ARM=yCONFIG_ARCH_ROCKCHIP=yCONFIG_ROCKCHIP_RK3576=yCONFIG_TARGET_EVB_RK3576=y

2. 启动流程(项)

  •  
  •  
  •  
  •  
  •  
  •  
  •  
CONFIG_SUPPORT_TPL=y           # 三级启动CONFIG_SUPPORT_SPL=y           # 二级启动CONFIG_SPL_ATF=y               # 加载ATFCONFIG_SPL_AB=y                # AB系统升级CONFIG_ANDROID_BOOTLOADER=y    # Android引导CONFIG_ANDROID_AVB=y           # 安全验证CONFIG_SPL_SPI_FLASH_SUPPORT=y # SPI Flash启动

3. 存储(项)

  •  
  •  
  •  
  •  
  •  
  •  
  •  
CONFIG_MMC_DW=y                # DW MMC控制器CONFIG_MMC_SDHCI=y             # SDHCI控制器CONFIG_SDHCI_ROCKCHIP=y        # RK SDHCICONFIG_SPI_FLASH=y             # SPI NORCONFIG_SPI_NAND=y              # SPI NANDCONFIG_UFS=y                   # UFSCONFIG_CMD_SATA=y              # SATA命令

4. 显示(项)

  •  
  •  
  •  
  •  
  •  
CONFIG_DRM_ROCKCHIP=yCONFIG_ROCKCHIP_HDMI_QP=y      # HDMI QP(RK3576特有)CONFIG_ROCKCHIP_DP=y           # DisplayPortCONFIG_ROCKCHIP_MIPI_DSI2=y    # MIPI DSI2CONFIG_ROCKCHIP_RGB=y          # RGB接口

5. 网络(项)

  •  
  •  
  •  
CONFIG_GMAC_ROCKCHIP=yCONFIG_CMD_DHCP=yCONFIG_CMD_PING=y

6. 调试(项)

  •  
  •  
  •  
CONFIG_DEBUG_UART_BASE=0x2ad40000  # UART2基地址CONFIG_DEBUG_UART_CLOCK=24000000   # 24MHz时钟CONFIG_BAUDRATE=1500000            # 1.5M波特率

完整基础配置合计约 120 项,以上为开发中高频使用的核心开关。

三、Config Fragment:产品差异化配置片段

Fragment 配置片段语法和标准 defconfig 完全一致,文件内仅存放需要新增、关闭、覆盖的差异化配置,通过指定基础配置实现自动继承。

1. 平板变体 rk3576-tb.config

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
# rk3576-tb.configCONFIG_BASE_DEFCONFIG="rk3576_defconfig"   # 核心标识:绑定基础defconfig# Falcon模式:SPL直接启动内核(跳过U-Boot Proper)CONFIG_SPL_KERNEL_BOOT=yCONFIG_SPL_ADC_KEY=y          # ADC按键检测CONFIG_SPL_INPUT=y            # 输入子系统# 关闭AB系统,使用单分区# CONFIG_SPL_AB is not set# 关闭TPL,SPL直接完成DDR初始化# CONFIG_SUPPORT_TPL is not set

2. 车载变体 rk3576-car.config

  •  
  •  
  •  
  •  
  •  
  •  
  •  
CONFIG_BASE_DEFCONFIG="rk3576_defconfig"# Serdes串行显示芯片支持CONFIG_DISPLAY_MAXIM_SERDES=yCONFIG_ROCKCHIP_RKX111=y     # RK串行器CONFIG_ROCKCHIP_RKX121=y     # RK解串器# 多路GPIO扩展芯片CONFIG_GPIO_PCA953X=y

3. USB 下载极简变体 rk3576-usbplug.config

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
CONFIG_BASE_DEFCONFIG="rk3576_defconfig"# 极致精简,仅保留USB镜像烧录功能# CONFIG_MMC is not set# CONFIG_UFS is not set# CONFIG_DRM_ROCKCHIP is not set# CONFIG_NET is not set# CONFIG_CMD_PING is not set# ... 其余非必要功能全部关闭

该配置编译出的 U-Boot 仅具备 USB 烧录镜像能力,无其他冗余功能。

四、两种 Fragment 编译构建方式

方式 1RK 封装 [make.sh](make.sh) 脚本(推荐)

  •  
  •  
  •  
  •  
# 编译基础EVB完整固件./make.sh rk3576              # 等价于 make rk3576_defconfig + 编译打包# 编译平板变体固件(自动叠加fragment)./make.sh rk3576-tb

方式 2:原生 make 命令分步编译

手动执行配置叠加流程,适合调试场景:

  •  
  •  
  •  
  •  
  •  
  •  
# 第一步:加载通用基础配置make rk3576_defconfig# 第二步:叠加产品差异化片段make rk3576-tb.config# 第三步:指定交叉编译器编译全量代码make CROSS_COMPILE=... all

五、编译时完整配置加载流程

执行./make.sh rk3576-tb后,底层执行逻辑完整链路:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
./make.sh rk3576-tb    │    ▼process_args()    │ 解析参数 ARG_BOARD=rk3576-tb    │ 检索到configs/rk3576-tb.config(识别为fragment片段,非基础defconfig)    │    ▼make rk3576_defconfig              # 第一步:加载公共基础配置    │    ▼make rk3576-tb.config              # 第二步:叠加产品差异化配置片段    │    ▼make all                            # 第三步:编译U-Boot完整工程    │    ▼pack_images()                       # 第四步:打包输出固件镜像

六、Fragment 叠加机制核心优势对比

对比「全量 defconfig 独立维护」和「基础 + fragment 片段」两种方案:

使用场景

采用 fragment 片段

不使用 fragment(全量配置)

份基础配置 + 7 款衍生产品

个小型配置文件

份完整百行 defconfig

修改全局通用配置(如调试串口)

仅修改基础文件 1 处,全产品同步生效

需要逐个修改 8 份配置

新增一款硬件产品

新建 1 个极简 fragment 片段

复制完整 defconfig 再逐条删减修改

快速区分产品硬件差异

仅查看 fragment 几行差异化开关

需要对比两份百行完整配置文件

七、补充:非 RK3576 平台可不使用 Fragment

Fragment 是瑞芯微 RK 平台专属优化方案,其他 SoC 型号可直接维护独立完整 defconfig,无需继承基础配置:

  •  
  •  
configs/rk3588_defconfig   # 独立完整配置,无继承configs/rk3568_defconfig   # 独立完整配置,无继承

补充说明:主线开源 U-Boot 并未采用该 fragment 叠加方案,主线通用方案为基于 defconfig 通过 menuconfig 交互式修改后保存配置。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分