4. 添加自定义板级支持
任务说明
在U-Boot源码中为一块自定义开发板(以 myboard 为例)添加板级支持,包含两个核心部分:创建板级目录(存放板级初始化代码)和添加板级配置文件(myboard_defconfig)。完成后,U-Boot能够识别该板卡并完成编译。
环境与依赖
- U-Boot源码(本文以 v2023.04 为例,其他版本结构类似)
- 交叉编译工具链(如
arm-linux-gnueabihf-),并已加入PATH - Linux主机环境
实现步骤
1. 创建板级目录结构
在 board/ 下创建厂商目录和板卡目录,并添加必要的 Kconfig 和 MAINTAINERS 文件:
cd <u-boot源码根目录>
mkdir -p board/myboard/myboard
touch board/myboard/myboard/Kconfig
touch board/myboard/myboard/MAINTAINERS
touch board/myboard/myboard/Makefile
2. 添加板级初始化代码
创建 myboard.c,实现最基本的板级初始化(仅包含必要的空实现,保证链接通过):
// board/myboard/myboard/myboard.c
#include <common.h>
#include <init.h>
int board_init(void)
{
/* 板级初始化:此处可添加GPIO、时钟等硬件初始化 */
return 0;
}
int board_late_init(void)
{
/* 板级后期初始化(可选) */
return 0;
}
int dram_init(void)
{
/* 若未使用固定DDR配置,需在此处设置gd->ram_size */
gd->ram_size = PHYS_SDRAM_SIZE;
return 0;
}
3. 编写板级目录的Kconfig与Makefile
# board/myboard/myboard/Kconfig
if TARGET_MYBOARD
config SYS_BOARD
default "myboard"
config SYS_VENDOR
default "myboard"
config SYS_CONFIG_NAME
default "myboard"
endif
# board/myboard/myboard/Makefile
obj-y += myboard.o
4. 在顶层Kconfig中关联新板卡
编辑 arch/arm/mach-*/Kconfig(以 arch/arm/mach-sunxi 为例,实际根据你的CPU架构选择对应目录),添加:
source "board/myboard/myboard/Kconfig"
5. 添加板级配置文件
创建 configs/myboard_defconfig:
CONFIG_ARM=y
CONFIG_ARCH_MYBOARD=y # 若架构未定义需在arch/arm/mach-*/Kconfig中补充
CONFIG_TARGET_MYBOARD=y
CONFIG_SYS_TEXT_BASE=0x80000000
# 根据实际硬件配置DDR大小(单位:字节)
CONFIG_SYS_SDRAM_SIZE=0x20000000
# 其他必要配置(串口、网络等按需添加)
6. 编译验证
make myboard_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc)
验证方法与通过标准
- 编译通过:执行上述命令后无报错,生成
u-boot.bin即表示板级支持添加成功。 - 配置生效:运行
make myboard_defconfig后,执行grep CONFIG_TARGET_MYBOARD .config应输出CONFIG_TARGET_MYBOARD=y。 - 目录结构完整:确认
board/myboard/myboard/下存在Kconfig、Makefile、myboard.c三个文件,且configs/myboard_defconfig存在。
若编译时提示找不到 CONFIG_ARCH_MYBOARD,需在 arch/arm/mach-*/Kconfig 中补充对应的架构选择项(参考同目录下其他板卡的写法)。