2. 添加自定义开发板配置

任务目标

在U-Boot源码中为一块自定义开发板(以myboard为例)建立最小可编译的板级支持。核心工作是创建开发板目录,并编写Kconfig、defconfig和MAINTAINERS三个文件,使make myboard_defconfig能够生成.config,且make能够完成编译。

环境与前置条件

  • 已获取U-Boot源码(版本≥2020.01,本文以v2024.01为例),并已安装交叉编译工具链(如aarch64-linux-gnu-*)。
  • 本案例使用qemu-arm作为演示目标,避免依赖具体硬件。实际开发板只需替换ARCH与CPU配置。

实现步骤

1. 创建板级目录

在U-Boot根目录下执行:

mkdir -p board/myboard
mkdir -p include/configs
touch board/myboard/Kconfig
touch board/myboard/MAINTAINERS
touch configs/myboard_defconfig
touch include/configs/myboard.h

2. 编写关键文件

以下三个文件是U-Boot Kconfig构建系统的核心接入点。所有代码需完整写入对应文件:

board/myboard/Kconfig —— 定义板级配置选项并接入顶层Kconfig:

if TARGET_MYBOARD

config SYS_BOARD
    default "myboard"

config SYS_VENDOR
    default "myboard"

config SYS_CONFIG_NAME
    default "myboard"

config TEXT_BASE
    default 0x00000000 if POSITION_INDEPENDENT
    default 0x00000000

endif

configs/myboard_defconfig —— 最小defconfig,启用目标板并指定架构:

CONFIG_TARGET_MYBOARD=y
CONFIG_ARCH_QEMU=y
CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_DEFAULT_DEVICE_TREE="myboard"

board/myboard/MAINTAINERS —— 维护者信息(U-Boot构建系统要求此文件存在):

MYBOARD
M:    Your Name <your.email@example.com>
S:    Maintained
F:    board/myboard/
F:    include/configs/myboard.h
F:    configs/myboard_defconfig

3. 接入架构Kconfig

在arch/arm/Kconfig中,找到source "board/qemu/Kconfig"行,在其后添加:

source "board/myboard/Kconfig"

同时,在arch/arm/mach-qemu/Kconfig的config TARGET_QEMU_ARM_64BIT定义之后,添加目标板选择入口:

config TARGET_MYBOARD
    bool "My custom board"
    select ARM64
    select DM
    select DM_SERIAL

4. 最小头文件

include/configs/myboard.h内容(U-Boot SPL阶段需要):

#ifndef __MYBOARD_H
#define __MYBOARD_H

#include <configs/qemu-arm.h>

#endif

编译与验证

编译命令

export ARCH=arm
export CROSS_COMPILE=aarch64-linux-gnu-
make myboard_defconfig
make -j$(nproc)

验证方法与通过标准

  1. 配置生成:执行make myboard_defconfig后,终端输出Configuration written to .config,且.config文件中包含CONFIG_TARGET_MYBOARD=y。
  2. 编译成功:执行make后,最终生成u-boot.bin文件,且编译过程无error。若使用qemu-arm目标,还会生成u-boot.elf。
  3. 最小启动验证(可选):执行qemu-system-aarch64 -machine virt -cpu cortex-a53 -nographic -bios u-boot.bin,观察U-Boot命令行提示符出现即通过。

常见问题

  • Kconfig语法错误:检查board/myboard/Kconfig中if TARGET_MYBOARD与endif是否配对,且TARGET_MYBOARD必须在架构Kconfig中已定义。
  • 编译报错找不到头文件:确认include/configs/myboard.h存在,且CONFIG_SYS_CONFIG_NAME与文件名一致。
  • defconfig未生效:删除根目录下旧的.config文件后重新执行make myboard_defconfig。

本案例以最小文件集合实现了U-Boot自定义板卡的配置接入与编译验证。实际硬件移植时,需在board/myboard/下补充Makefile、myboard.c(板级初始化)及设备树源文件,但Kconfig/defconfig/MAINTAINERS三文件结构完全一致。