4. 配置并编译U-Boot
任务目标
在已获取U-Boot源码的基础上,通过make menuconfig图形化配置界面调整目标板相关配置,然后使用交叉编译工具链完成编译,最终生成u-boot.bin镜像文件,并验证编译产物与配置生效。
环境准备
本案例默认环境为Linux主机(Ubuntu 20.04+),已安装交叉编译工具链(如aarch64-linux-gnu-或arm-linux-gnueabihf-),并已获取U-Boot源码(版本≥2020.01)。若尚未安装工具链,执行:
sudo apt-get install gcc-aarch64-linux-gnu make bison flex libssl-dev bc
配置U-Boot
进入U-Boot源码根目录,首先加载默认配置(以qemu-arm64为例),再通过menuconfig进行交互式调整:
cd u-boot
make qemu_arm64_defconfig
make menuconfig
在menuconfig界面中,可验证或修改以下关键项(本案例仅演示配置流程,不强制修改具体值):
- Device Tree Control → 确认
Provide device tree file已选中,确保设备树被编译进镜像; - Command line interface → 确认
Support commands中基础命令(如md、mw)已启用; - Boot options → 可调整
bootdelay数值(默认2秒)。
完成调整后选择Save保存配置并退出。配置结果写入.config文件,可通过grep CONFIG_CMD_MD .config验证配置项是否生效。
交叉编译
执行编译命令,指定交叉编译前缀(根据实际工具链调整):
make CROSS_COMPILE=aarch64-linux-gnu- -j$(nproc)
编译过程需数分钟,最终在源码根目录生成u-boot.bin。若编译过程中出现dtc(设备树编译器)缺失错误,安装device-tree-compiler包后重新编译。
验证方法
编译完成后,按以下步骤验证产物与配置:
- 检查镜像文件:执行
ls -lh u-boot.bin,确认文件存在且大小非零(通常为数百KB); - 验证配置生效:执行
grep CONFIG_BOOTDELAY .config,确认输出值与menuconfig中设置一致; - 检查设备树嵌入:执行
grep CONFIG_DEFAULT_DEVICE_TREE .config,确认设备树名称已指定(如qemu-arm64); - 确认编译工具链痕迹:执行
file u-boot.bin,输出应包含ARM aarch64字样,证明交叉编译成功。
通过条件:上述4项检查全部通过,且编译过程无致命错误(warning可忽略),即判定本案例完成。
常见问题
- menuconfig界面无法显示:需安装
libncurses5-dev,执行sudo apt-get install libncurses5-dev后重新运行; - 编译报错
missing libssl-dev:安装libssl-dev后清理重编(make clean); - 交叉编译前缀不匹配:若使用32位ARM工具链,将
CROSS_COMPILE改为arm-linux-gnueabihf-,并确认defconfig对应架构。