1. 程式人生 > >android下除錯音效卡驅動之概述

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的程式碼,與平臺無關。