標籤:android linux 音效卡 alsa 驅動
在Android中音頻系統使用的是ALSA系統架構。ASoC--ALSA System on Chip ,是建立在標準ALSA驅動層上,為了更好地支援
嵌入式處理器和行動裝置中的音頻Codec的一套軟體體系,在音訊裝置驅動中ASoC被分為Machine、Platform和Codec三大部分。
Codec部分:負責音頻解碼,這部分代碼完全無平台無關(裝置原廠提供),它包含了一些音訊控制項(Controls),音頻接
口,DAMP(動態音頻電源管理)的定義和Codec IO功能。為了保證硬體無關性,任何特定於平台的代碼都要移
到Platform和Machine驅動中。
Platform部分:包含了平台的音頻DMA和音頻介面的配置和控制(I2S,PCM,AC97等);與處理器晶片相關的代碼。
Machine部分:是耦合Platform和Codec驅動,同時與上層互動的代碼。由於上層是標準的alsa架構,所以下層介面肯定要做了
統一,這部分由Machine本身的Platform驅動和Platform裝置群組成(請跟上面的Platform驅動區別開),Platform驅動
核心已經完成了,所以無須過多的關心怎麼跟上層ALSA怎麼衍接的問題,我們只需要註冊一個Machine的Platform
裝置以及完成Platform和Codec耦合。
1、ALSA裝置檔案結構
controlC0 用於音效卡的控制,例如通道選擇,混音,麥克風的控制等;
pcmC0D0c 用於錄音的pcm裝置;
pcmC0D0p 用於播放的pcm裝置;
timer 定時器。
其中,C0D0代表的是音效卡0中的裝置0,pcmC0D0c最後一個c代表capture,pcmC0D0p最後一個p代表playback,這些都是
alsa-driver中的命名規則。
2、ALSA檔案目錄結構概述
sound/core:該目錄包含了中介層,ALSA的核心驅動。那些本地ALSA模組保持在這個目錄裡。一些子目錄包含那些與核心配置
相關的不同的模組。
sound/core/oss :關於PCM和mixer的OSS類比的模組儲存在這個目錄裡面。
sound/core/seq :有關音序器相關的代碼。
kernel /include/sound :ALSA驅動的公用標頭檔目錄,該目錄的標頭檔需要匯出給使用者空間的應用程式使用,通常驅動模組私
有的標頭檔不應放置在這裡。
sound/drivers :該目錄包含了在不同架構的系統中的不同驅動共用的檔案部分。與CPU、BUS架構無關的公用代碼。
sound/i2c :該目錄包含了ALSA自己的I2C控制碼。雖然Linux有個i2c的標準協議層,ALSA還是擁有它關於一些card的專用
i2c代碼,因為一些音效卡僅僅需要一些簡單的操作,而標準的i2c的API函數對此顯得太過複雜了。
sound/pci :該目錄檔案負責PCI音效卡和一些PCI BUS的上層card模組。在pci目錄下面儲存著一些簡單的驅動檔案,而一些比較
複雜的,同時包含多個程式檔案的驅動會被放置在pci目錄下面一個單獨的子目錄裡面(如:emu10k1,ice1712)。
sound/isa 該目錄檔案是處理ISA音效卡的上層card模組。
sound/arm,sound/ppc,和sound/sparc 這裡目錄放置一些和晶片架構相關的一些上層的card模組。
sound/usb 該目錄包含一些USB-AUDIO驅動。
sound/pcmcia PCCard驅動會放到這裡。CardBus驅動將會放到pci目錄裡面,因為API函數和標準PCI卡上統一的。
sound/soc 針對system-on-chip體系的中介層代碼。
sound/soc/codecs 針對soc體系的各種codec的代碼,與平台無關。
android下調試音效卡驅動之概述