SOF项目简介

音频开放固件 (Sound Open Firmware,SOF) 是一个开源音频数字信号处理 (DSP) 固件基础架构和 SDK。SOF 作为社区项目,提供基础架构、实时控制件和音频驱动程序。该项目由声音开放固件技术指导委员会 (TSC) 管理,该委员会包括来自社区的杰出和活跃的开发者。SOF 是公开开发的,并托管在 github 平台上。

该固件和 SDK 面向对现代 DSP 上的音频或信号处理感兴趣的开发者。SOF 提供了一个框架,音频开发者可以在其中创建、测试和优化以下内容:

  • 音频处理流水线和拓扑。
  • 音频处理组件。
  • DSP 基础架构和驱动程序。
  • 主机操作系统基础架构和驱动程序。
图 1:均衡器流水线示例,其中主机操作系统控制均衡器系数和流水线音量

Sound Open Firmware 具有模块化和通用的代码库,可以移植到不同的 DSP 架构或主机平台。请参阅当前支持的 DSP 架构和支持的平台列表。

SDK 介绍与概述

Sound Open Firmware SDK 由许多成分组成,可以定制这些成分以用于固件/软件开发生命周期。定制允许 “最适合” 的开发方法,其中 SDK 可以针对特定流程或环境进行优化。有些 SDK 成分是可选的,而其他成分可以有多次选择,如下图所示。

sdk-overview.png

图 2:SDK 示例配置显示了运行 Linux 操作系统的 Intel Apollo Lake 平台上的 SOF 开发流程。请注意编译器工具链的选择和可选的 DSP 仿真器的选择。

SOF 源码、工具和拓扑

所有固件、工具和拓扑都存放在主 SOF git 存储库中。从较高的层面来看,该存储库包含:

  • 固件 - 用 C 语言和一些特定于体系结构的汇编语言编写;它不链接外部依赖项。
  • Test Bench - 允许固件组件和流水线在开发者的主机 PC 上运行。
  • 镜像工具 - 将 ELF 文件转为可以在硬件上运行的二进制固件镜像的 C 工具。
  • 调试工具 - 可用于调试固件的脚本和工具。
  • 追踪工具 - 基于文本的工具,可以显示来自固件的跟踪数据。
  • 调优工具 - 可用于创建音频组件调优系数的 MATLAB/Octave 脚本。
  • 运行时工具 - 可用于与运行中的固件交换数据的命令行应用程序。
  • 拓扑 - 真实和示例拓扑,展示了简单和复杂的音频处理流水线的构建。

主机操作系统驱动程序

SOF 可以由主机操作系统驱动程序配置和控制,也可以选择作为独立固件运行。SOF 主机驱动程序当前支持 Linux 操作系统。

SOF 驱动程序具有模块化的基于堆栈的架构,该架构是 BSD 和 GPL 双重许可的代码,允许其移植到其它操作系统和 RTOS。

主机驱动程序负责:

  • 将固件从主机文件系统加载到 DSP 存储器中并启动。
  • 将拓扑从主机文件系统加载到 DSP 中。
  • 将音频控制设备暴露给应用程序。
  • 向应用程序公开音频数据端点。
  • 管理主机和 DSP 之间的 IPC 通信。
  • 在主机端将 DSP 硬件抽象为通用 API 操作。

对于上面的几点,一般情况下,其主要实现者如下:

  • 将固件从主机文件系统加载到 DSP 存储器中并启动,完全由主机端的 SOF Linux 驱动程序完成,但 SOF 的 Linux 内核驱动程序框架已经提供了这个功能的实现,SOF Linux 驱动程序可以直接用,如果该实现不能完全满足需要,则该实现也可以作为驱动程序提供这个功能实现的参考。
  • 将拓扑从主机文件系统加载到 DSP 中,几乎不需要具体的 SOF Linux 驱动程序实现参与,具体的 SOF Linux 驱动程序实现配置拓扑文件的路径,在驱动程序 probe 期间,调用 SOF 的 Linux 内核驱动程序框架提供的接口完成。
  • 将音频控制设备暴露给应用程序,在拓扑配置文件中定义控制项,二进制的拓扑配置通过 ASoC 的拓扑模块被加载时,SOF 的 Linux 内核驱动程序框架的拓扑模块实现这些功能,几乎不需要具体的 SOF Linux 驱动程序实现参与。
  • 向应用程序公开音频数据端点,在拓扑配置文件中定义 PCM 项,二进制的拓扑配置通过 ASoC 的拓扑模块被加载时,SOF 的 Linux 内核驱动程序框架的拓扑模块及 PCM 和 compress 等模块实现这些功能,几乎不需要具体的 SOF Linux 驱动程序实现参与。
  • 管理主机和 DSP 之间的 IPC 通信,在 SOF 中,IPC 分为两层,一是底层的 IPC 通道,它负责无差别地在主机操作系统和 DSP 之间传递消息,二是 IPC 消息协议,包括 IPC 通信所用的消息具体格式的定义和处理。IPC 通道完全由具体的 SOF Linux 驱动程序实现,IPC 消息协议由 SOF 的 Linux 内核驱动程序框架,IPC 消息协议需要与拓扑二进制文件的格式匹配。IPC 通道是具体的 SOF Linux 驱动程序实现的重点。
  • 在主机端将 DSP 硬件抽象为通用 API 操作,拓扑配置文件、SOF 固件和 SOF 的 Linux 内核驱动程序框架配合实现,一般不需要具体的 SOF Linux 驱动程序实现参与。

Linux SOF ALSA/ASoC 驱动程序在 Linux v5.2 版进的内核,但早期版本还不是很完善。

固件工具链

GNU GCC 可以与专有的 DSP 供应商编译器一起用作免费的 SOF 编译器。编译器的选择取决于用户,具体取决于功能和预算。GCC 编译器是开源的。

DSP 仿真器

Qemu 可用于提供功能仿真器来同时跟踪和调试驱动程序和 DSP 固件代码。还可以使用专有的仿真器。

SOF CI 中还使用仿真来在合并新代码之前进行功能验证。

一般 FAQ

固件使用什么许可证?

固件使用标准 BSD 3 条款许可证发布,其中一些文件在 MIT 下发布。

我需要开源我的固件代码修改吗?

不需要。固件的 BSD 和 MIT 许可代码意味着你可以将代码修改保持私有。如果你决定开源你的工作,补丁总是欢迎的。

主机驱动程序使用什么许可证?

大多数主机驱动程序代码是双重许可的 BSD 或 GLPLv2(用户选择)。驱动程序中仅属于 GPLv2 的部分是位于驱动程序堆栈顶部的 Linux 集成层。

我是否需要开源我的驱动程序代码的改动?

不需要,对于驱动程序栈最底部的两层。比如,如果你把驱动程序移植到了另一个操作系统,这些改动可以保持私有的。注意,所有的驱动程序 GPL 源文件是 Linux 特有的,且不应该被移植到另一个操作系统。

我如何参与进来?

参与进来最好的方式是通过 github。你也可以加入我们的 邮件列表

开发模型是什么样的?

SoF (Sound Open Firmware) 完全在 github 上开发。补丁通过 Pull Request 来 review,讨论,并在合并前由 CI 做测试。预期的发布节奏是每 6 - 8 周。稳定版经过 QA 测试之后会打标签;下一个版本的开发仍在继续。

谁在为 SoF (Sound Open Firmware) 工作?

来自大量不同公司的专业开发者 (如果想了解更多相关信息的话可以参考 git 日志) 以及一些开发爱好者。

我如何添加对主机架构 X 的支持?

请参考 SOF 架构页面。

我如何添加对主机平台 X 的支持?

添加新的主机平台比添加新的 DSP 架构简单多了。添加新的主机平台由这么几部分组成,添加一个新的 src/platform/ 目录,其中包含内存映射,IRQs,GPIOs 和 DSP 内存地址空间中的外设。可能也需要在 drivers 目录下添加新的驱动程序 (比如 DMA,I2S 的)。

我如何移植到其它操作系统?

请参考 SOF 主机架构页面。

支持哪些音频组件?

SoF (Sound Open Firmware) 现在支持一个小的免费开源的组件库,这些组件与源代码一起分发。SOF 还可以支持专有的音频处理组件,只要它们被包装为使用 SOF 组件API。有关开源组件及其功能的列表,请参阅音频组件页面。

我如何创建我自己的流水线?

流水线目前是使用 M4 宏处理语言定义的。M4 拓扑在被编译为二进制文件之前先被预处理为 alsaconf 格式。用于流水线构建的基于 Eclipse 的 GUI 目前正在开发中。

如今,上游支持静态 (内置) 和动态 (运行时加载) 流水线。

我可以添加我自己的媒体编码器/解码器吗?

当然可以。

我可以添加非音频的功能吗?

可以。DSP 所使用的指令集也擅长非音频的处理任务,比如低功耗传感器信号处理。如果你的 DSP 具有其它非音频设备可以连接的物理 IO 端口,那么数据也可以从这些设备处理。

工具链 FAQ

SOF 目前支持哪些 Xtensa 工具链?

SOF 目前支持两个工具链家族:GCC 和 Cadence XCC。

这些工具链家族被细分为各个 Xtensa ISA 的工具链,因为 Tensilica 架构包含可变的指令集,因此你必须使用与你的平台匹配的工具链。

  1. 定制的,开源 GCC 工具链通过 crosstool-NG 构建,如入门指南中所述。它们必须从源代码构建。有关说明,请参阅以下内容:

  2. Cadence 的部分闭源工具链。Cadence XCC 编译器是专有的,但使用了开源的 GNU binutils。XCC 必须从 Cadence 购买。更多信息,请参考:

Cadence binutils 补丁或覆盖位于 SOF git 存储库中。

请注意,Cadence 并不是 Tensilica 的唯一用户。一些 Xtensa 工具链来自于 其它地方。然而,截至2020年6月,SOF 支持的所有平台均来自 Cadence。

Cadence 和 gcc 工具链之间的主要区别是什么?

gcc 工具链是完全开源的。Cadence 的工具链使用基于 gcc 或基于 clang 的开源前端以及与平台匹配的闭源后端。

XCC 支持完整的 Xtensa HiFi SIMD 内在函数,而 GCC 不支持 HiFi SIMD。这可能会导致巨大的性能差异,尤其是在处理音频处理的代码中。

Cadence xt-xcc 还是 Cadence xt-clang?

这取决于平台。截至 2020 年 6 月,SOF 支持的大多数平台都依赖 xt-xcc。展望未来,所有较新的平台都需要 xt-clang。gcc 前端不支持异常大的寄存器,因此迁移到 xt-clang。

请注意,xt-xcc 并不完全支持 C99。xt-clang 可以。

是否即将支持其它工具链?

展望未来,我们希望支持 LLVM C 编译器。 欢迎补丁。

原文

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • AudioReach 是高通 SoC DSP 的信号处理框架,它本身运行于 DSP。AudioReach 是高通下...
    hanpfei阅读 1,102评论 0 0
  • linux kernel目录介绍 参考文档:https://blog.csdn.net/weixin_387155...
    Swinner阅读 1,301评论 0 1
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,898评论 2 89
  • 简介 ​ Alsa是Advanced Linux Sound Architecture的缩写,即高级Linux...
    Letcos阅读 1,551评论 0 0
  • ALSA 拓扑给音频驱动程序提供了一种在运行时,从用户空间加载它们的混音器,路由,PCM 和能力,而无需修改任何驱...
    hanpfei阅读 150评论 0 0