一、概述
1、硬體

由上可見,播放音頻時,通常CPU通過總線傳送給CODEC音頻PCM資料,然后CODEC進行DA轉換、放大、增益等一系列處理,最后傳送給speaker,錄音流程反之。
2、軟體架構

用戶空間的alsa庫對應用程式提供統一的API介面,這樣可以隱藏了驅動層的實作細節,簡化了應用程式的實作難度。內核空間中,alsa soc其實是對alsa驅動的封裝統一,為了兼容不同平臺的驅動,同時風格更統一,下面會進一步討論。
3、音頻驅動架構

二、結構
1、alsa設備檔案結構
crw-rw----+ 1 root audio 116, 8 2011-02-23 21:38 controlC0
crw-rw----+ 1 root audio 116, 4 2011-02-23 21:38 midiC0D0
crw-rw----+ 1 root audio 116, 7 2011-02-23 21:39 pcmC0D0c
crw-rw----+ 1 root audio 116, 6 2011-02-23 21:56 pcmC0D0p
crw-rw----+ 1 root audio 116, 5 2011-02-23 21:38 pcmC0D1p
crw-rw----+ 1 root audio 116, 3 2011-02-23 21:38 seq
crw-rw----+ 1 root audio 116, 2 2011-02-23 21:38 timer
我們可以看到以下設備檔案:
controlC0 --> 用于聲卡的控制,例如通道選擇,混音,麥克風的控制等
midiC0D0 --> 用于播放midi音頻
pcmC0D0c --〉 用于錄音的pcm設備
pcmC0D0p --〉 用于播放的pcm設備
seq --〉 音序器
timer --〉 定時器
其中,C0D0代表的是聲卡0中的設備0,pcmC0D0c最后一個c代表capture,pcmC0D0p最后一個p代表playback,這些都是alsa-driver中的命名規則。從上面的串列可以看出,我的聲卡下掛了6個設備,根據聲卡的實際能力,驅動實際上可以掛上更多種類的設備,在include/sound/core.h中,定義了以下設備型別:
通常,我們更關心的是pcm和control這兩種設備。
2、目錄結構
sound
/core
/oss
/seq
/ioctl32
/include
/drivers
/i2c
/synth
/emux
/pci
/(cards)
/isa
/(cards)
/arm
/ppc
/sparc
/usb
/pcmcia /(cards)
/oss
/soc
/codecs
core 該目錄包含了ALSA驅動的中間層,它是整個ALSA驅動的核心部分
core/oss 包含模擬舊的OSS架構的PCM和Mixer模塊
core/seq 有關音序器相關的代碼
include ALSA驅動的公共頭檔案目錄,該目錄的頭檔案需要匯出給用戶空間的應用程式使用,通常,驅動模塊私有的頭檔案不應放置在這里
drivers 放置一些與CPU、BUS架構無關的公用代碼
i2c ALSA自己的I2C控制代碼
pci pci聲卡的頂層目錄,子目錄包含各種pci聲卡的代碼
isa isa聲卡的頂層目錄,子目錄包含各種isa聲卡的代碼
soc 針對system-on-chip體系的中間層代碼
soc/codecs 針對soc體系的各種codec的代碼,與平臺無關
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/152237.html
標籤:驅動程序開發區
上一篇:沒有vmnet1和vmnet8
