在 Versal Gen2上通过 JTAG 启动 EDF镜像并刷写 UFS 的流程

作者: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