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)
验证方法与通过标准
- 配置生成:执行
make myboard_defconfig后,终端输出Configuration written to .config,且.config文件中包含CONFIG_TARGET_MYBOARD=y。 - 编译成功:执行
make后,最终生成u-boot.bin文件,且编译过程无error。若使用qemu-arm目标,还会生成u-boot.elf。 - 最小启动验证(可选):执行
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三文件结构完全一致。