Zephyr 在 AMD ACP 7.X HiFi5 音频 DSP 上的移植:板级特性、构建与 SOF 固件烧录指南
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
本文面向音频固件与嵌入式开发者,系统讲解 Zephyr RTOS 在 AMD ACP 7.X 音频协处理器上的移植现状:包括该平台的硬件资源(HP SRAM / IRAM / DRAM、SDW / I2S / DMIC 音频接口)、系统时钟范围、基于 Zephyr SDK 与 Cadence Xtensa 工具链的两种构建路径、hello_world 的编译方法,以及经由 ACP Linux 驱动完成签名镜像烧录与固件启动验证的完整流程。读完本文,你将掌握在 ACP 7.X 平台上构建、烧录并验证 Zephyr 音频 DSP 固件的完整实战方案。
ACP 7.X 平台概览
ACP(Audio Co-Processor)7.X 是集成在 AMD SoC 中的音频协处理器,其 DSP 内核基于HiFi5 Xtensa 架构。Zephyr OS 被移植到该平台,用于在SOF(Sound Open Firmware)框架之上承载各类音频与语音处理用例。
从 SOC 定义文件 可以看到,该 SoC 的 Zephyr 代号为acp_7_x,对应的工具链 SoC 名为amd_acp_7_3_adsp,这是 Zephyr SDK 中用于该平台的 GCC 交叉编译目标。一个关键事实是:SOF 既可以使用 Zephyr 构建,也可以使用 Cadence 专有的 Xtensa OS(XTOS)构建,两者都能运行在 ACP 7.X 平台上——这意味着你在 Zephyr 中开发的固件与 XTOS 固件遵循同一套平台内存与启动约定。
板级信息在 board.yml 中登记为acp_7_x_adsp(全称 "ACP 7.X Xtensa Audio DSP"),acp_7_x_adsp.yml 则进一步声明该板为xtensa架构的 mpu 类型设备,工具链同时支持zephyr(SDK 内置 GCC)与xcc(Cadence 专有编译器)两种变体。
硬件特性
| 特性 | 规格 |
|---|---|
| 运行内存(RAM) | 4MB HP SRAM,另有 512KB 可在 IRAM/DRAM 间配置 |
| 音频接口 | 3 × SDW(SoundWire)、3 × I2S(PCM)、2 × DMIC |
这些特性在设备树中得到了充分映射。查看 dts/xtensa/amd/acp_7_x.dtsi 可以发现:
- 主核
cpu@9eac0000的 compatible 为cdns,tensilica-xtensa-lx7,即 HiFi5 DSP 所基于的Xtensa LX7 核心; - 中断控制器
acp-intc(compatible 为amd,acp-intc)、主机 DMAacp-host-dma均为status = "okay"的默认启用节点; - 88 个 SDW DAI 节点(
acp-sdw-dai0至acp-sdw-dai87)覆盖了 SoundWire 侧音频数据接口,配套的acp-sdw-dma提供64 个 DMA 通道,用于承载 SDW 数据流; - 另有 3 个
tdm-dai节点与 6 通道的acp-tdm-dma,对应文档中所说的 I2S(PCM)接口路径。
板级设备树 acp_7_x_adsp.dts 非常简洁,仅包含amd/acp_7_x.dtsi并声明 model 为 "AMD ACP_7_X Audio DSP"、compatible 为acp_7_x,说明绝大多数外设能力都沉淀在 SoC 级设备树中。
系统时钟
ACP 7.X SoC 工作在200 MHz 至 1000 MHz 的音频时钟频率范围内。
在设备树中,dts/xtensa/amd/acp_7_x.dtsi 为cpu@9eac0000设置了clock-frequency = <600000000>,即该移植默认将 CPU 配置在 600 MHz。这一设备树属性会被 Kconfig.defconfig 读取:
config SYS_CLOCK_HW_CYCLES_PER_SEC default $(dt_node_int_prop_int,/cpus/cpu@0,clock-frequency)即 Zephyr 的系统时钟节拍频率直接取自设备树 CPU 节点的clock-frequency,最终得到CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC = 600000000。同时该 SoC 默认启用XTENSA_TIMER,选用的是 Xtensa 内核的定时器中断源。
支持的板级特性
板级默认配置位于 acp_7_x_adsp_defconfig,它反映了该音频 DSP 移植在中断与缓存方面的关键取舍:
CONFIG_GEN_ISR_TABLES=y CONFIG_GEN_IRQ_VECTOR_TABLE=n CONFIG_GEN_SW_ISR_TABLE=y CONFIG_DYNAMIC_INTERRUPTS=y CONFIG_SHARED_INTERRUPTS=n CONFIG_MULTI_LEVEL_INTERRUPTS=n CONFIG_XTENSA_TIMER=y CONFIG_XTENSA_TIMER_ID=0 CONFIG_TICKLESS_KERNEL=y CONFIG_CACHE_MANAGEMENT=y CONFIG_DCACHE=y CONFIG_SYS_HEAP_HARDENING_NONE=y几点值得注意:
- 中断方面采用生成 ISR 表 + 软件中断向量表(
GEN_ISR_TABLES与GEN_SW_ISR_TABLE),并开启动态中断注册(DYNAMIC_INTERRUPTS),这在 SOF 这类需要按需注册 DMA/邮箱中断的音频框架中非常必要;多级中断与共享中断则被关闭。 - 定时器选用Xtensa 内核定时器 0(
XTENSA_TIMER=y、XTENSA_TIMER_ID=0),并开启 tickless 内核(CONFIG_TICKLESS_KERNEL=y),适合音频这类对低功耗与低抖动有要求的负载。 - 缓存管理(
CACHE_MANAGEMENT、DCACHE)默认打开。SoC 层面(Kconfig.defconfig)还进一步把缓存类型默认设为ARCH_CACHE,DCACHE 行大小为 128 字节,内核入口固定为__start。
系统要求与构建环境
使用 Zephyr SDK(默认路径)
Zephyr SDK 提供基于 GCC 的工具链,足以完成 AMD ACP 板卡的 Zephyr 固件构建,这也是开箱即用的默认方式。SDK 中对应的目标 SoC 名称为amd_acp_7_3_adsp(见 Kconfig.soc)。
使用 Cadence Xtensa 专有工具链(可选)
对于追求更高优化级别的场景,可以改用 Cadence 的专有 Xtensa 工具链(XCC)。以下步骤假定你已经按照 Xtensa 官方文档完成工具链与内核(core)的购买和安装。
首先,确保已从 Cadence 获取必要许可证,并按 Cadence 的指引设置许可证相关的环境变量。接着,设置以下环境变量——其中底部的三个变量是 acp_7_x 平台特有的:
export XTENSA_TOOLCHAIN_PATH="tools installed path" export XTENSA_BUILDS_DIR="user build directory path" export ZEPHYR_TOOLCHAIN_VARIANT=xcc export TOOLCHAIN_VER=RI-2022.9-linux export XTENSA_CORE=ACP73x_HiFi5_NNE_PROD各变量含义:
| 环境变量 | 说明 |
|---|---|
XTENSA_TOOLCHAIN_PATH | Xtensa 工具链的安装路径(tools installed path需替换为实际目录) |
XTENSA_BUILDS_DIR | 用户构建目录路径,用于存放 Xtensa 内核构建产物 |
ZEPHYR_TOOLCHAIN_VARIANT | 固定为xcc,告诉 Zephyr 构建系统选用 Cadence 编译器 |
TOOLCHAIN_VER | 工具链版本号,示例为RI-2022.9-linux,需与安装版本匹配 |
XTENSA_CORE | Xtensa 内核配置名,acp_7_x 平台为ACP73x_HiFi5_NNE_PROD(注意其中含 NN 加速器配置) |
其中XTENSA_CORE=ACP73x_HiFi5_NNE_PROD与 Kconfig.soc 中声明的工具链目标amd_acp_7_3_adsp对应,两者都指向同一颗带 NN 扩展的 HiFi5 内核。
构建 hello_world
构建方式与 Zephyr 其他平台完全一致,使用 west 即可:
west build -b acp_7_x_adsp/acp_7_x samples/hello_world-b参数中的板目标acp_7_x_adsp/acp_7_x与 acp_7_x_adsp.yml 中登记的identifier: acp_7_x_adsp/acp_7_x完全一致;- 若使用 XCC 构建,请先完成上一节的环境变量设置,构建系统会根据
ZEPHYR_TOOLCHAIN_VARIANT=xcc自动切换到 Xtensa 编译器。
构建产物会经过链接脚本 soc/amd/acp_7_x/linker.ld 的布局。该脚本为平台划定了完整的物理内存图,例如:
IRAM_BASE 0x7F000000(大小 0x20000)承载复位向量与各级中断/异常向量表(Level2~Level7、内核、用户、Double 异常、NMI);DRAM0/DRAM1 0xE0000000区域,其中 DRAM1 顶部预留了SOF_STACK_SIZE (0x1000)的固件栈空间;SRAM1 0x6000C000(大小 0x350000 ≈ 3.3MB)作为主要 RAMABLE/ROMABLE 区域,存放.text、.rodata、.data、.bss、.heap_mem等段;- 在
CONFIG_GEN_ISR_TABLES开启时,还会在 IRAM 之后放置IDT(中断描述符表),大小为 0x2000; - 此外专门划分了 UUID 条目、静态日志条目与扩展固件元数据(
fw_metadata)三个PT_NOTE段,用于承载 SOF 固件所需的元数据与日志信息。
烧录与启动验证
烧录方式
AMD 仅支持通过ACP Linux 驱动在 ACP 7.X 平台上烧录签名镜像。签名与镜像打包工作由板级 board.cmake 中的board_set_rimage_target(acp_7_x)衔接——rimage是 SOF 生态中的镜像工具,负责把 ELF 固件转换为带元数据、可被驱动校验和加载的签名格式。
固件启动序列
通过 ACP Linux 驱动加载固件后,可以在dmesg中观察到如下启动序列消息:
booting DSP firmware ACP_DSP0_RUNSTALL : 0x0 ipc rx: 0x70000000 Firmware info: version 2:11:99-03a9d Firmware: ABI 3:29:1 Kernel ABI 3:23:0 mailbox upstream 0x0 - size 0x400 mailbox downstream 0x400 - size 0x400 stream region 0x1000 - size 0x400 debug region 0x800 - size 0x400 fw_state change: 3 -> 6 ipc rx done: 0x70000000 firmware boot complete对这条序列的解读(可作为固件是否成功上电自检的依据):
booting DSP firmware:驱动开始向 DSP 下发固件;ACP_DSP0_RUNSTALL : 0x0:DSP 退出 RUNSTALL 复位状态,CPU 开始执行;ipc rx: 0x70000000与ipc rx done: 0x70000000:宿主与 DSP 之间的 IPC 消息握手完成;Firmware info: version 2:11:99-03a9d/Firmware: ABI 3:29:1 Kernel ABI 3:23:0:固件版本与 ABI 兼容性信息(固件 ABI 与内核 ABI 需匹配,否则后续消息流可能异常);mailbox upstream/downstream、stream region、debug region:驱动与固件之间共享的邮箱、音频流与调试内存区域已按给定偏移和大小(各 0x400)建立;fw_state change: 3 -> 6:固件状态机推进,最终firmware boot complete表示启动完成,DSP 固件已就绪,可接受后续音频管线配置。
小结
AMD ACP 7.X 平台为 Zephyr 提供了一个完整的音频 DSP 落地场景:HiFi5(LX7)内核配 4MB SRAM 与丰富的 SDW/I2S/DMIC 音频通路,配合 SOF 框架即可承载音频与语音处理管线。开发者既可以用 Zephyr SDK 快速构建,也可以通过xcc+XTENSA_CORE=ACP73x_HiFi5_NNE_PROD获得更高优化度;烧录时需走 ACP Linux 驱动完成签名镜像加载,并通过本文给出的 dmesg 序列验证固件启动状态。
进一步阅读:板级配置见 boards/amd/acp_7_x_adsp,SoC 层实现见 soc/amd/acp_7_x,设备树定义见 dts/xtensa/amd/acp_7_x.dtsi。
【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考