使用EDF预置Yocto Machine定义来编译加载固件和linux镜像

作者:Davis Zhang,AMD工程师;来源:AMD开发者社区

EDF(Embedded Development Framework)是AMD发布的基于Yocto project的开源开发架构,它支持定制linux开发、嵌入式软件开发、以及基于CED(Configurable Example Design)和vitis的hardware开发。目前已经发布了几个版本,v25.05、v25.05.1、v25.11,目前petalinux还在更新,但是未来将由EDF替代。本文基于v25.11版本简单介绍EDF开发环境的设置流程以及基于预置Yocto Machine定义来编译加载固件和linux镜像。

一. 主机要求

EDF v25.11版本支持的主机操作系统有以下几种版本,

  • Ubuntu Desktop/Server 22.04.2 LTS,22.04.3 LTS, 22.04.4 LTS and 22.04.5 LTS

  • OpenSuse Leap 15.4

  • AlmaLinux 8.10,9.4 and 9.5

二. Yocto project编译环境设置

1.AMD选择“repo”作为管理git repositories的工具,在安装repo之前,先配置git,

$ git config --global user.email "you@example.com"

$ git config --global user.name "Your Name"

2. 主机的shell需要是bash,不能是 csh或者dash

3. 下载repo工具并把它设置为可执行

$ curl https://storage.googleapis.com/git-repo-downloads/repo > repo

$ chmod a+x repo

4. 如果主机用户路径里没有“bin”文件夹,生成bin文件夹,并将repo工具安装到bin文件夹里,然后将bin文件夹路径加入“PATH”环境变量

$ mkdir ~/bin

$ mv repo ~/bin/

$ PATH=~/bin:$PATH

5. 在主机里有读写权限的路径里建立edf project目录

$ mkdir -p yocto/edf

$ cd yocto/edf

6. 使用yocto manifest克隆Yocto meta layer的源文件

$ repo init -u https://github.com/Xilinx/yocto-manifests.git -b rel-v2025.2 -m default-edf.xml

7. 获取所有repositories

$ repo sync

8. 基于manifest所指定的版本开创一个branch,这步可选。

$ repo start <branch-name> --all

9. 使用edf-init-build-env脚本初始化编译环境

$ source edf-init-build-env

10. 如果主机编译环境用到了NFS,可以在build/conf/local.conf里增加下面的TMPDIR路径,这样编译产生的文件将保存在NFS上,需要注意的是Yocto编译环境不允许路径名称里有下划线“_”。如果不存在NFS,TMPDIR环境变量将指向build/tmp

TMPDIR = "/tmp/<user-name>/yocto/<release-version>/build"

11. 编译过程中,TMPDIR所指向的路径可能会需要几十GB的存储空间消耗,所以需要确保主机有足够的存储空间。为了节省空间,可以将下面这行代码加入build/conf/local.conf,这样一些编译中间文件会不再保留。

INHERIT += "rm_work"

三. EDF预置Yocto Machine定义及加载固件和linux镜像编译

EDF预置的Yocto Machine定义可以参考下面这个页面里的章节内容,

https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/3250586143/Common+Specifications#EDF-prebuilt-Yocto-machine-definitions

我们以zcu102板卡为例,介绍如何使用预置Machine来编译加载固件和linux镜像。

1.使用Machine “zynqmp-zcu102-sdt-full”和Recipe “xilinx-bootbin”生成”boot.bin”

$ MACHINE=zynqmp-zcu102-sdt-full bitbake xilinx-bootbin

Machine zynqmp-zcu102-sdt-full的定义在下面链接里,

https://github.com/Xilinx/meta-amd-adaptive-socs/blob/amd-edf-rel-v25.11/meta-amd-adaptive-socs-bsp/conf/machine/zynqmp-zcu102-sdt-full.conf

Recipe xilinx-bootbin的定义在下面链接里,

https://github.com/Xilinx/meta-xilinx/blob/amd-edf-rel-v25.11/meta-xilinx-core/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb

生成的boot.bin在${TMPDIR}/deploy/images/zynqmp-zcu102-sdt-full里。

2. 使用Machine “amd-cortexa53-mali-common”和Recipe “edf-linux-disk-image”生成linux镜像

$ MACHINE=amd-cortexa53-mali-common bitbake edf-linux-disk-image

Machine amd-cortexa53-mali-common的定义在下面链接里,

https://github.com/Xilinx/meta-amd-edf/blob/amd-edf-rel-v25.11/meta-amd-edf-bsp/conf/machine/amd-cortexa53-mali-common.conf

Recipe edf-linux-disk-image的定义在下面链接里,

https://github.com/Xilinx/meta-amd-edf/blob/amd-edf-rel-v25.11/recipes-extended/images/edf-linux-disk-image.bb

生成的edf-linux-disk-image-amd-cortexa53-mali-common.rootfs.wic在${TMPDIR}/deploy/images/amd-cortexa53-mali-common里

3. 合并boot.bin和edf-linux-disk-image-amd-cortexa53-mali-common.rootfs.wic为一个wic镜像

前面生成的“edf-linux-disk-image-amd-cortexa53-mali-common.rootfs.wic“里有四个partition,可以用下面命令来查看,

$ wic ls ${TMPDIR}/deploy/images/amd-cortexa53-mali-common/edf-linux-disk-image-amd-cortexa53-mali-common.rootfs.wic

其中第一个partition是FAT32格式的,是用来存放加载固件的,它目前是空的,可以用下面命令来查看,

$ wic ls ${TMPDIR}/deploy/images/amd-cortexa53-mali-common/edf-linux-disk-image-amd-cortexa53-mali-common.rootfs.wic:1

可以用下面命令把boot.bin合并在edf-linux-disk-image-amd-cortexa53-mali-common.rootfs.wic第一个partition里。

$ wic cp ${TMPDIR}/deploy/images/zynqmp-zcu104-sdt-full/boot.bin \

${TMPDIR}/deploy/images/amd-cortexa53-mali-common/edf-linux-disk-image-amd-cortexa53-mali-common.rootfs.wic:1

最后就可以把edf-linux-disk-image-amd-cortexa53-mali-common.rootfs.wic烧写到SD    卡里加载板卡了。