作者: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替代。如何像在petalinux工程里那样导入XSA的硬件配置?本文基于v25.11版本介绍如何在EDF开发环境里为zcu102开发板的vivado工程导出的XSA创建Yocto Machine并编译加载固件和linux镜像。
一. 使用vivado工程导出的XSA生成system device tree
bash-4.4$ sdtgen
sdtgen% set_dt_param -debug enable
sdtgen% set_dt_param -zocl enable
sdtgen% set_dt_param -dir <directory-for-sdt>
sdtgen% set_dt_param -xsa <path-and-name-of-xsa>
sdtgen% set_dt_param -board_dts zcu102-reva
sdtgen% generate_sdt
二. EDF对主机的要求
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"
四. 使用生成的system device tree生成Yocto Machine
1.下面使用gen-machineconf工具将前面生成的system device tree转换为Yocto类型的Machine配置,
$ gen-machineconf parse-sdt --hw-description <directory-for-sdt> -c conf -l conf/local.conf --machine-name <custom-machine-name>
这个命令将在build/conf/machine路径里生成一个新的Yocto Machine定义。
2. 我们可以将build/conf/local.conf里的默认MACHINE修改为我们新生成的Yocto Machine
$ sed -i "/MACHINE ??=/c\MACHINE ??= \"<custom-machine-name>\"" conf/local.conf
3. 前面我们已经将默认Machine修改为新生成的Yocto Machine,我们生成加载固件的时候就不需要指定Machine name了
$ bitbake xilinx-bootbin
4. 生成linux镜像的时候,可以使用默认的新生成的Yocto Machine,或者指定Machine为amd-cortexa53-mali-common
$ bitbake edf-linux-disk-image
or
$ MACHINE=amd-cortexa53-mali-common bitbake edf-linux-disk-image
5. 合并boot.bin和wic镜像
如果生成加载固件和linux镜像的时候都使用了新生成的Yocto Machine,那么boot.bin和“.wic”文件都在${TMPDIR}/deploy/images/<custom-machine-name>里。
如果生成linux镜像使用的Yocto Machine是amd-cortexa53-mali-common,“.wic“文件在${TMPDIR}/deploy/images/amd-cortexa53-mali-common里
前面生成的“.wic“里有四个partition,可以用下面命令来查看,
$ wic ls ${TMPDIR}/deploy/images/<*>/edf-linux-disk-image-<*>.rootfs.wic
其中第一个partition是FAT32格式的,是用来存放加载固件的,它目前是空的,可以用下面命令来查看,
$ wic ls ${TMPDIR}/deploy/images/<*>/edf-linux-disk-image-<*>.rootfs.wic:1
可以用下面命令把boot.bin合并在edf-linux-disk-image-<*>.rootfs.wic第一个partition里。
$ wic cp ${TMPDIR}/deploy/images/<custom-machine-name>/boot.bin \
${TMPDIR}/deploy/images/amd-cortexa53-mali-common/edf-linux-disk-image-<*>.rootfs.wic:1
最后就可以把edf-linux-disk-image-<*>.rootfs.wic烧写到SD卡里加载板卡了。