在AMD自适应SoC嵌入式开发领域,PetaLinux长期是开发者的主流选择,凭借高集成度、简易操作的优势,大幅降低了入门门槛。但随着工业边缘、AI算力、高端嵌入式设备的迭代升级,PetaLinux定制能力有限、生态封闭、底层改造空间小的短板逐渐凸显,难以适配复杂项目的深度开发需求。
为解决这一行业痛点,AMD正式推出EDF(Embedded Development Framework,嵌入式开发框架),基于原生Yocto Project打造,主打极致灵活、开源兼容、全栈可控,成为替代传统PetaLinux的新一代嵌入式开发标准。
从PetaLinux到EDF:不止升级,是开发模式革新
PetaLinux是“开箱即用的集成工具”:上手快、操作简单,适合标准化、轻量化项目;但底层封装度高、生态封闭,难以深度裁剪系统与适配定制硬件。
AMD EDF是“开源标准化的开发框架”:基于Yocto LTS构建,保留原生Yocto全部能力,深度适配Versal系列硬件,实现易用性与专业性的双向平衡。

PetaLinux vs AMD EDF核心差异对比图
极致定制能力:支持完整Layer层管控,可自由裁剪、扩展系统功能,适配高端定制化嵌入式项目
拥抱开源生态:无缝兼容社区开源层与各类开源软件包,打破封闭工具的生态壁垒
企业级稳定性:与Yocto LTS版本严格对齐,提供长期安全更新与技术支撑,适配产品量产落地
标准化可移植:构建流程透明规范,项目迁移、维护成本大幅降低,适配多平台硬件迭代
EDF核心架构:分层设计,全栈支撑嵌入式开发
AMD EDF专为AMD Versal AI Edge Gen2等高端自适应SoC打造,搭建「硬件支撑-系统层-应用层」三级分层架构,软硬件深度协同,覆盖从底层固件到上层应用的全流程开发。

EDF分层软件栈架构总图
底层硬件支撑层
深度集成AMD官方BSP、驱动固件与可编程逻辑,兼容JTAG、OSPI、SD卡、eMMC全量启动模式,支持多阶段启动、延迟PL加载等高级特性,保障硬件资源高效调用。
系统基础设施层
以Yocto Project为核心基座,依托BitBake引擎与OpenEmbedded框架,实现源码拉取、补丁适配、交叉编译、镜像打包全自动化。通过local.conf、bblayers.conf等配置文件,可精准管控编译参数、线程与网络策略。
上层应用开发层
支持OpenAMP异构编程、Vitis AI推理、Python/SSH调试等场景,配套完整SDK工具链,适配工业控制、AI边缘计算、高清多媒体等多元应用。
核心技术亮点:SHEL闭环,实现软硬件无缝协同
EDF最核心的突破是搭建SHEL(Software Hardware Exchange Loop,软硬件交互循环)自动化流程,彻底解决传统开发中软硬件适配脱节、设备树手动修改繁琐、配置兼容性差的难题。
整套流程依托三大核心工具,实现硬件设计→软件配置→系统编译全自动化流转:

SHEL软硬件交换闭环流程图
SHEL实现Vivado硬件设计(XSA)→自动设备树生成→机器配置解析→Yocto编译→系统镜像输出全自动流转,彻底告别手动改设备树、手动配板级参数的繁琐操作。
1. SDTGen:硬件信息自动解析
直接读取Vivado输出的XSA硬件描述文件,自动解析外设、内存、时钟、可编程逻辑等信息,批量生成设备树源文件,大幅降低硬件适配出错率。
2. gen-machine-conf:机器配置一键生成
基于SDTGen输出的设备树,结合官方模板自动生成Yocto机器配置文件,同步更新本地编译配置,适配VEK385等多款评估板。
3. Lopper:设备树精细化调试
支持设备树节点裁剪、修改、叠加,灵活适配PL动态加载、硬件功能定制等场景,满足深度软硬件协同开发需求。
VEK385实操Demo:EDF完整操作使用全流程
本节基于VEK385评估板+Ubuntu 22.04 LTS环境,整理一套1:1可复刻的EDF标准开发流程,涵盖环境部署、源码同步、工程配置、设备树生成、镜像编译、文件拷贝、板卡烧录、系统启动全流程,包含实操关键命令,可直接用于调试与量产项目。

EDF VEK385完整开发实操流水线
基础环境部署:依赖库与工具安装
EDF对系统版本有严格适配要求,仅支持Ubuntu 22.04.2/22.04.3/22.04.4/22.04.5 LTS版本,首先安装全套基础依赖库,终端执行以下批量指令:
sudo apt-get install build-essential vim tofrodos
sudo apt-get install iproute2 gawk gcc git make net-tools zlib1g-dev
sudo apt-get install libssl-dev flex bison libselinux1 libncurses5-dev
sudo apt-get install tftpd lib32z1 libbz2-1.0:i386
sudo apt-get install lib32stdc++6 xvfb chrpath socat autoconf libtool
sudo apt-get install texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev zlib1g:i386 xterm diffstat
sudo apt-get install python curl bmap-tools lz4 mtools
依赖安装完成后,配置Git全局信息并安装Repo工具,用于统一管理多源码仓库:
# 配置Git用户信息
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
# 下载并配置repo工具
curl https://storage.googleapis.com/git-repo-downloads/repo > repo
chmod a+x repo
mkdir ~/bin && mv repo ~/bin/
PATH=~/bin:$PATH
源码同步与编译环境初始化
1)创建专属工程目录,进入工作路径:
cd /home/train
mkdir -p edf/vek385 && cd edf/vek385
2)通过repo初始化Yocto源码清单,同步全套源码(16线程加速同步):
repo init -u https://github.com/Xilinx/yocto-manifests.git -b rel-v2025.2 -m default-edf.xml
repo sync –j16

3)初始化EDF编译环境与Vitis工具环境:
source edf-init-build-env
#使用Vitis脚本初始化环境
source /home/train/2025.2.sh
4)核心配置优化(conf/local.conf),解决存储空间不足、编译卡顿问题,新增以下配置:
DL_DIR = "$YourPATH/downloads"
SSTATE_DIR = "$YourPATH/sstate-cache"
BB_NUMBER_THREADS = "16"
PARALLEL_MAKE = "-j 16"
BB_NO_NETWORK = "1"
SKIP_META_VIRT_SANITY_CHECK = "1"
SKIP_META_SECURITY_SANITY_CHECK = "1"
SKIP_META_TPM_SANITY_CHECK = "1"
自定义Layer创建,实现模块化定制
EDF核心优势为模块化Layer定制,创建板卡专属自定义层,独立维护硬件配置,不改动官方源码:

cd ../sources
# 创建自定义硬件适配层
bitbake-layers create-layer meta-vek385-custom
# 新建机器配置目录
mkdir -p conf/machine
# 添加自定义层到编译工程
bitbake-layers add-layer meta-vek385-custom
通过该操作,所有VEK385板级定制配置、设备树、驱动补丁均可统一存放至自定义层,方便项目迭代与版本迁移。
软硬件协同配置:设备树与机器配置自动生成
将Vivado导出的versal_gen2_platform_wrapper.xsa硬件文件放置工程目录,通过SHEL工具链自动生成设备树与机器配置,全程无需手动改设备树:
1) 进入build目录,执行SDTGen生成系统设备树:

cd ../build
sdtgen -xsa ../../versal_gen2_platform_wrapper.xsa -zocl enable -dir sdt_outdir -board_dts versal2-vek385-revb
2) 调用gen-machine-conf生成专属机器配置文件,适配VEK385硬件:

gen-machineconf parse-sdt --hw-description sdt_outdir -c ../sources/meta-vek385-custom/conf/ -l conf/local.conf --machine-name versal2-vek385-sdt-seg-custom --template ../sources/meta-amd-adaptive-socs/meta-amd-adaptive-socs-bsp/conf/machineyaml/versal-2ve-2vm-vek385-revb-sdt-seg.yaml -g full -O versal-2ve-2vm-vek385-revb-sdt-seg
双镜像编译(BOOT/OSPI/WIC)
EDF可编译量产启动固件与文件系统镜像。
1)编译BOOT.BIN与OSPI量产固件(用于板卡固化启动):
# 编译BOOT.BIN
MACHINE=versal2-vek385-sdt-seg-custom bitbake xilinx-bootbin
# 编译OSPI启动镜像
MACHINE=versal2-vek385-sdt-seg-custom bitbake edf-ospi
2)编译WIC文件系统镜像(用于SD卡系统部署):
打开local.conf文件,注释屏蔽自定义MACHINE配置:
#MACHINE="versal2-vek385-sdt-seg-custom"
新建终端,重新初始化编译环境,执行镜像编译:
cd ../
source edf-init-build-env
MACHINE=amd-cortexa78-mali-common bitbake edf-linux-disk-image
编译产物路径:
- BOOT/OSPI固件:tmp/deploy/images/versal2-vek385-sdt-seg-custom
- WIC系统镜像:tmp/deploy/images/amd-cortexa78-mali-common
3)镜像批量拷贝:挂载共享目录,将核心文件拷贝至本地保存:
# 拷贝WIC系统镜像
cp tmp/deploy/images/amd-cortexa78-mali-common/edf-linux-disk-image-amd-cortexa78-mali-common.rootfs-*.wic /mnt/hgfs/D/Workshop/EDF/
# 拷贝OSPI固件与BOOT文件
cp tmp/deploy/images/versal2-vek385-sdt-seg-custom/edf-ospi-versal2-vek385-sdt-seg-custom-*.bin /mnt/hgfs/D/Workshop/EDF/edf-ospi.bin
cp tmp/deploy/images/versal2-vek385-sdt-seg-custom/boot.bin /mnt/hgfs/D/Workshop/EDF/
板卡烧录与系统启动验证
1)固件烧录(BOOT/OSPI):
- 将boot.bin、edf-ospi.bin拷贝至SD卡,插入VEK385板卡
- 板卡SW1拨码切换为JTAG启动模式
- 打开Vivado 2025.2 TCL Shell,执行xsdb连接硬件:
xsdb
connect
targets
device program {D:\Workshop\EDF\boot.bin}

2)OSPI镜像固化:
串口Uboot倒计时阶段回车打断启动,执行以下指令固化镜像:

fatls usb 0:1
fatload usb 0:1 0x20000000 edf-ospi.bin
sf erase 0 0x10000000
sf write 0x20000000 0 0x10000000
3)系统镜像烧录:
使用BalenaEtcher工具,将WIC镜像写入SD卡,完成系统部署。

4)系统登录验证:
板卡启动后,默认登录账号:amd-edf,默认密码:root,首次登录需修改密码,登录后可通过ifconfig等指令验证系统正常运行。

EDF核心价值:赋能高端嵌入式量产开发

EDF核心价值总览
软硬件协同自动化可减少90%以上手动配置工作,编译、打包、烧录全流程标准化,大幅降低出错概率,缩短项目落地周期。
1. 深度定制,适配高端场景
2. 生态开放,适配长期迭代
结语
AMD EDF的推出,标志着Versal系列高端嵌入式开发正式迈入标准化、开源化、深度定制化的全新阶段。它既保留了PetaLinux的易用性,又补齐了传统工具的定制短板,成为下一代AMD自适应SoC嵌入式开发的最优方案。
文章来源:安富利