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閱讀 227,533評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,055評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,365評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,346評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,889評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,118評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,637評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,558評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,739評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,980評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,347評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,702評論 2 370

推薦閱讀更多精彩內容

  • AudioReach 是高通 SoC DSP 的信號處理框架,它本身運行于 DSP。AudioReach 是高通下...
    hanpfei閱讀 1,628評論 0 1
  • linux kernel目錄介紹 參考文檔:https://blog.csdn.net/weixin_387155...
    Swinner閱讀 1,381評論 0 1
  • 關于Mongodb的全面總結 MongoDB的內部構造《MongoDB The Definitive Guide》...
    中v中閱讀 31,985評論 2 89
  • 簡介 ? Alsa是Advanced Linux Sound Architecture的縮寫,即高級Linux...
    Letcos閱讀 1,604評論 0 0
  • ALSA 拓撲給音頻驅動程序提供了一種在運行時,從用戶空間加載它們的混音器,路由,PCM 和能力,而無需修改任何驅...
    hanpfei閱讀 190評論 0 0