这是用于 HiSilicon Ascend310B hboot2 启动链的 U-Boot 工程,目标镜像为 Image.hboot2,由 hboot2 加载执行。
准备 AArch64 交叉编译工具链,例如 aarch64-linux-gnu-gcc。
首次配置:
make CROSS_COMPILE=aarch64-linux-gnu- ascend310b_hboot2_defconfig编译 hboot2 镜像:
make CROSS_COMPILE=aarch64-linux-gnu- Image.hboot2 -j$(nproc)编译完成后,输出文件位于工程根目录:
Image.hboot2
可以用下面的命令确认镜像:
ls -l Image.hboot2
sha256sum Image.hboot2默认启动顺序由 include/configs/ascend310b_hboot2.h 中的 BOOT_TARGET_DEVICES 控制。
当前顺序为:
#define BOOT_TARGET_DEVICES(func) \
func(MMC, mmc, 1) \
func(USB, usb, 0) \
func(NVME, nvme, 0) \
func(MMC, mmc, 0) \
func(DHCP, dhcp, na)对应启动顺序:
mmc1 -> usb0 -> nvme0 -> mmc0 -> dhcp
设备含义:
mmc1: SD 卡,mmc@82010000mmc0: eMMC,mmc@82000000usb0: USB 存储设备nvme0: PCIe NVMe SSDdhcp: 网络 DHCP/TFTP 启动
修改顺序后重新编译:
make CROSS_COMPILE=aarch64-linux-gnu- Image.hboot2 -j$(nproc)可以在编译产物中确认默认环境:
strings u-boot.bin | grep '^boot_targets='也可以在 U-Boot 命令行确认:
printenv boot_targets需要修改默认顺序时,应修改源码并重新编译。
hboot2meta 用于向 hboot2 元数据分区写入启动镜像。其源码位于 HwHiAiUser/scripts。
生成空镜像 Image.empty32M:
truncate -s 32M Image.empty32M也可以使用 dd 生成:
dd if=/dev/zero of=Image.empty32M bs=1M count=32刷写前请先确认目标磁盘设备,例如:
lsblk下面命令中的 /dev/sda 是目标磁盘设备,请根据实际情况替换。命令会直接写设备,请确认设备无误后再执行。
从工程根目录执行:
sudo ./hboot2meta flash /dev/sda "boot.main.image[0]" Image.empty32M
sudo ./hboot2meta flash /dev/sda "boot.back.image[0]" Image.empty32M
sudo ./hboot2meta flash /dev/sda "boot.main.image[0]" Image.hboot2
sudo ./hboot2meta flash /dev/sda "boot.back.image[0]" Image.hboot2其中:
boot.main.image[0]: 主启动镜像槽boot.back.image[0]: 备份启动镜像槽Image.empty32M: 空镜像,用于先清理旧内容Image.hboot2: 本工程编译生成的 U-Boot hboot2 镜像
刷写后重新上电或重启设备,即可由 hboot2 加载新的 U-Boot。