本课程将指导您如何为不同的硬件平台编译U-Boot,包括QEMU模拟器和真实硬件(如树莓派、i.MX6UL等)。
在开始编译U-Boot之前,您需要安装交叉编译工具链。对于ARM架构,可以使用以下命令安装:
sudo apt-get update
sudo apt-get install gcc-arm-linux-gnueabihf gcc-aarch64-linux-gnu
您可以从官方Git仓库克隆最新的U-Boot源代码:
git clone git://git.denx.de/u-boot.git
cd u-boot
或者下载特定版本的源代码:
wget https://ftp.denx.de/pub/u-boot/u-boot-2023.10.tar.bz2
tar xvf u-boot-2023.10.tar.bz2
cd u-boot-2023.10
QEMU是一个通用的开源机器模拟器和虚拟器,非常适合学习和测试U-Boot。
make qemu_arm_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-
qemu-system-arm -M virt -nographic -bios u-boot.bin
注意: 您需要先安装QEMU模拟器:sudo apt-get install qemu-system-arm
树莓派是流行的单板计算机,支持多种U-Boot配置。
rpi_defconfigrpi_2_defconfigrpi_3_defconfigrpi_4_defconfigmake rpi_4_defconfig
make CROSS_COMPILE=aarch64-linux-gnu-
u-boot.bin - 主二进制文件u-boot.img - 可直接用于SD卡的镜像重要: 树莓派通常从GPU固件启动,U-Boot作为第二阶段的bootloader。您可能需要修改config.txt文件来使用U-Boot。
i.MX6UL是NXP的ARM Cortex-A7处理器,广泛应用于嵌入式系统。
make mx6ul_14x14_evk_defconfig
make CROSS_COMPILE=arm-linux-gnueabihf-
u-boot.imx - 包含IVT头的i.MX专用格式SPL - 二级程序加载器(如果配置了)对于i.MX处理器,您可能需要使用mkimage工具进一步处理生成的二进制文件。
您可以使用menuconfig界面自定义U-Boot配置:
make menuconfig
使用-j选项加速编译过程(N为CPU核心数):
make -j$(nproc) CROSS_COMPILE=arm-linux-gnueabihf-
如果需要重新编译,可以先清理之前的编译结果:
make distclean # 完全清理
make clean # 部分清理
症状: 编译时出现"command not found"或"cannot find -lgcc"等错误。
解决方案:
CROSS_COMPILE前缀是否正确PATH环境变量中症状: 编译时出现"undefined reference"或其他链接错误。
解决方案:
make distclean后重新配置和编译如果编译过程没有错误,您将在U-Boot目录下找到生成的二进制文件。根据平台不同,可能需要使用不同的文件:
u-boot.bin - 原始二进制文件u-boot.img - 包含U-Boot头部的镜像u-boot.elf - ELF格式文件(可用于调试)SPL - 二级程序加载器(如果启用)成功编译U-Boot后,您可以: