作者:Longley Zhang,AMD工程师;来源:AMD开发者社区
一、背景说明
本文基于 EDF 2025.11 版本进行测试,记录了在 VEK385 开发板上,如何:
1.通过 JTAG 模式 启动 EDF 镜像;
2. 使用 TFTP 引导 Linux 内核与 rootfs;
3. 在 Linux 环境中使用官方发布的 wic 镜像 刷写 UFS 设备;
在2025.11的EDF文档里,烧写UFS主要是依赖Image Recovery Application。而本文提供的流程不依赖 Image Recovery Application,方便在非开发板的环境下使用。
二、生成 boot.bin 和 system.dtb
首先从 edf-ospi 或 xilinx-bootbin 工程中生成 EDF 启动所需的 boot.bin 和 system.dtb。
具体的Yocto环境的构建,请参考这个中文博客。
在构建环境中执行命令:
MACHINE=versal-2ve-2vm-vek385-revb-sdt-seg bitbake edf-ospi
或
MACHINE=versal-2ve-2vm-vek385-revb-sdt-seg bitbake xilinx-bootbin
构建完成后,从<temp_path>/deploy/images路径中拷贝生成的镜像文件:
boot.bin
system.dtb
三、生成 Linux 内核镜像与 rootfs
接下来生成 Linux kernel image 和 rootfs。
1.在 rootfs 中加入刷写 UFS 需要的工具,例如:
bmaptool
bmap-writer
ufs-utils
可以在 local.conf 中追加配置:
IMAGE_INSTALL:append = " bmaptool bmap-writer ufs-utils "
2. 在构建环境执行:
MACHINE=amd-cortexa78-mali-common bitbake core-image-full-cmdline
3. 构建完成后,从<temp_path>/deploy/images路径中拷贝下面文件:
Image
*.cpio.gz.u-boot
说明:
官方的 EDF 文档(PetaLinux to EDF Migration Guide | Boot Image on Hardware with JTAG)在 “Boot-Image-on-Hardware-with-JTAG” 一节中推荐 core-image-minimal,但该镜像非常精简,缺少很多必要的工具包(比如缺少SCP命令)。本文改用 core-image-full-cmdline,便于直接在系统内刷写 UFS。
四、通过 XSDB + JTAG 启动 boot.bin
1.将 XSDB 连接到 VEK385 板卡。
2. 在 xsdb 中通过 JTAG 加载并启动 boot.bin:
ta 1
device program boot.bin
执行成功后,在 UART 终端中进入 u-boot。
五、在 u-boot 中通过 TFTP 启动 Linux
进入 u-boot 命令行后:
1.配置网络参数(根据你的实际网络环境修改):
setenv serverip 10.10.70.101
setenv ipaddr 10.10.70.1
其中:
serverip:TFTP 服务器 IP 地址;
ipaddr:VEK385 板端 IP 地址。
2. 通过 TFTP 下载内核、设备树和 rootfs(cpio):
tftpboot 0x20000000 Image
tftpboot 0x22000000 system.dtb
tftpboot 0x23000000 core-image-full-cmdline-amd-cortexa78-mali-common.rootfs-20260205023743.cpio.gz.u-boot
注意:
core-image-full-cmdline-amd-cortexa78-mali-common.rootfs-20260205023743.cpio.gz.u-boot 的文件名中包含时间戳,你实际构建得到的文件名可能不同,请以你本地输出为准。
3. 启动 Linux:
booti 0x20000000 0x23000000 0x22000000
六、在 Linux 系统中刷写 UFS
成功进入 Linux 后,可以对 UFS 设备进行刷写。
1.切换到 root 用户,并确认 UFS 设备和分区:
sudo -s
# 查找 UFS 设备及其分区信息
fdisk -l
根据 fdisk -l 的输出,确认 UFS 设备节点(例如 /dev/sda,实际以系统识别为准)。
2. 将 wic 镜像及 bmap 文件拷贝到板端本地内存:
可以使用 scp 从主机拷贝到开发板,例如:
# 从服务器拷贝 bmap 文件
scp longley@10.10.70.101:/home/longley/2025.2/edf-linux-disk-image-amd-cortexa78-mali-common.rootfs-20251116015456.wic.ufs.bmap ./
# 从服务器拷贝压缩的 wic 镜像
scp longley@10.10.70.101:/home/longley/2025.2/edf-linux-disk-image-amd-cortexa78-mali-common.rootfs-20251116015456.wic.ufs.xz ./
如板上有SD卡接口,也可以通过 SD 卡将这两个文件复制到板端内存。
3. 使用 bmap-writer 或 bmaptool 刷写 UFS:
方式一:使用 bmap-writer:
xzcat edf-linux-disk-image-amd-cortexa78-mali-common.rootfs-20251116015456.wic.ufs.xz \
| bmap-writer - \
edf-linux-disk-image-amd-cortexa78-mali-common.rootfs-20251116015456.wic.ufs.bmap \
/dev/sda
方式二:使用 bmaptool:
bmaptool copy \
--bmap edf-linux-disk-image-amd-cortexa78-mali-common.rootfs-20251116015456.wic.ufs.bmap \
edf-linux-disk-image-amd-cortexa78-mali-common.rootfs-20251116015456.wic.ufs.xz \
/dev/sda
注意事项:
/dev/sda 仅为示例设备节点,请根据 fdisk -l 的结果确认实际设备;
上述操作会覆盖整个 UFS 设备,刷写前请确认设备上无需要保留的数据。
文中使用的 wic 与 bmap 文件为 VEK385 官方发布的镜像,从 Xilinx/AMD 的 wiki 下载获得。
七、UFS 配置相关说明
在对 UFS 进行刷写之前,需要按照官方文档完成 UFS 设备的配置与初始化。
可参考以下文档中 “Device Configuration” 一节:UFS Linux driver | Device Configuration