作者: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定义可以参考下面这个页面里的章节内容,
我们以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的定义在下面链接里,
Recipe xilinx-bootbin的定义在下面链接里,
生成的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的定义在下面链接里,
Recipe edf-linux-disk-image的定义在下面链接里,
生成的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 卡里加载板卡了。