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

描述

本文作者:AMD 工程师 Longley Zhang

背景说明

本文基于 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 环境的构建,请参考这个中文博客:

https://adaptivesupport.amd.com/s/article/000039734?language=zh_CN

在构建环境中执行命令:

MACHINE=versal-2ve-2vm-vek385-revb-sdt-seg bitbake edf-ospi

MACHINE=versal-2ve-2vm-vek385-revb-sdt-seg bitbake xilinx-bootbin

构建完成后,从 /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. 构建完成后,从 /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。

EDF 文档:

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/3467935747/PetaLinux+to+EDF+Migration+Guide#Boot-Image-on-Hardware-with-JTAG

通过 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 官方发布的镜像,从 AMD 的 Wiki 下载获得。

UFS 配置相关说明

在对 UFS 进行刷写之前,需要按照官方文档完成 UFS 设备的配置与初始化。

您可参考以下文档中 “Device Configuration” 一节:

UFS Linux driver | Device Configuration:

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/3103293588/UFS+Linux+driver#Device-Configuration

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分