android下除錯音效卡驅動之概述
在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的程式碼,與平臺無關。