在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的代碼,與平台無關。
