AMD全新EDF框架,重塑Versal嵌入式Linux开发体验

在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嵌入式开发的最优方案。

文章来源:安富利

👍 点赞 · 0