Linux ALSA 系統架構

來源:互聯網
上載者:User

ALSA是Linux音效卡驅動的架構,下面基於linux-2.6.32描述下ALSA系統架構。ALSA系統可以分為alsa-lib、alsa-driver,而alsa-driver又分為core層和底層硬體層。作為開發人員,我們只需移植底層硬體層,根據自己硬體特性,實現底層的移植。而core層基本屬於ALSA標準架構,不需要自己實現。介紹ALSA架構,下面是大體架構圖。


 
 如所示,alsa驅動最終會被上層應用調用,這是通過alsa-lib實現的,alsa-lib為alsa-driver封裝了許多API,通過這些API,上層應用可以調用到驅動層。而alsa-lib中的這些API,我們可暫時把他們當做一個黑盒子,裡面具體實現不需要去關注,下面以linux-2.6.32中ALSA調用函數關係說明其架構。先分析ALSA驅動的註冊過程。

一、ALSA驅動的註冊


註冊流程查看,具體的註冊過程不在此贅述。

二、開啟流程

在ALSA驅動註冊完畢以後,當應用程式開始調用時,會有一個過程:開啟裝置、映射、設定硬體參數、準備工作、觸發資料流。為整個流程。

帶sep0611的是需要自己實現的底層驅動。

三、寫資料流程


 圖中應用程式通過ALSA-lib的API函數寫入資料,ALSA-lib調用等待函數等待底層可寫。ALSA-lib通過poll系統調用進入底層驅動並將poll訊號加入sleep隊列阻塞進程。硬體的中斷訊號觸發底層驅動註冊的中斷處理函數,中斷處理函數進而調用ALSA-driver中的函數判讀是否該寫。ALSA-driver中的函數再調用底層晶片硬體驅動擷取硬體當前資料大小。ALSA-driver再判斷空閑資料區的大小,如果滿足條件就喚醒sleep隊列,poll訊號從而被喚醒,進而返回給ALSA-lib,ALSA-lib收到訊號後再執行往buffer裡寫資料。
ALSA-lib通過mmap機制將硬體申請的記憶體映射到使用者空間,從而應用程式只需調用ALSA-lib往相應位置寫資料,硬體就可以直接讀取了。如果映射記憶體裡已有資料,通過DMA傳輸給codec,codec便開始讀取資料並進行解碼播放聲音了。經過測試,基於sep6200的ALSA音效卡驅動工作正常,既可以播放聲音也可以錄製。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.