在核心裝置驅動層,alsa提供了alsa-driver,同時在應用層,alsa為我們提供了alsa-lib,應用程式只要呼叫alsa-lib提供的api,即可以完成對底層音訊硬體的控制。
圖 1.1 alsa的軟體體系結構
由圖1.1可以看出,使用者空間的alsa-lib對應用程式提供統一的api介面,這樣可以隱藏了驅動層的實現細節,簡化了應用程式的實現難度。核心空間中,alsa-soc其實是對alsa-driver的進一步封裝,他針對嵌入式裝置提供了一些列增強的功能。本系列博文僅對嵌入式系統中的alsa-driver和alsa-soc進行討論。
二. alsa裝置檔案結構
我們從alsa在linux中的裝置檔案結構開始我們的alsa之旅. 看看我的電腦中的alsa驅動的裝置檔案結構:
$ cd /dev/snd
$ ls -l
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
$我們可以看到以下裝置檔案:
#define sndrv_dev_toplevel ((__force snd_device_type_t) 0)
#define sndrv_dev_control ((__force snd_device_type_t) 1)
#define sndrv_dev_lowlevel_pre ((__force snd_device_type_t) 2)
#define sndrv_dev_lowlevel_normal ((__force snd_device_type_t) 0x1000)
#define sndrv_dev_pcm ((__force snd_device_type_t) 0x1001)
#define sndrv_dev_rawmidi ((__force snd_device_type_t) 0x1002)
#define sndrv_dev_timer ((__force snd_device_type_t) 0x1003)
#define sndrv_dev_sequencer ((__force snd_device_type_t) 0x1004)
#define sndrv_dev_hwdep ((__force snd_device_type_t) 0x1005)
#define sndrv_dev_info ((__force snd_device_type_t) 0x1006)
#define sndrv_dev_bus ((__force snd_device_type_t) 0x1007)
#define sndrv_dev_codec ((__force snd_device_type_t) 0x1008)
#define sndrv_dev_jack ((__force snd_device_type_t) 0x1009)
#define sndrv_dev_lowlevel ((__force snd_device_type_t) 0x2000)
通常,我們更關心的是pcm和control這兩種裝置。
三. 驅動的**檔案結構
在linux2.6**樹中,alsa的**檔案結構如下:
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的**,與平台無關
Linux ALSA音效卡驅動之一
標籤 linux audio codec timer playback 嵌入式 2011 03 23 15 19 61136人閱讀收藏 舉報 linux音訊子系統 14 目錄 在核心裝置驅動層,alsa提供了alsa driver,同時在應用層,alsa為我們提供了alsa lib,應用程式只要呼叫...
Linux ALSA音效卡驅動之一 ALSA架構簡介
宣告 本博內容均由 在核心裝置驅動層,alsa提供了alsa driver,同時在應用層,alsa為我們提供了alsa lib,應用程式只要呼叫alsa lib提供的api,即可以完成對底層音訊硬體的控制。圖 1.1 alsa的軟體體系結構 由圖1.1可以看出,使用者空間的alsa lib對應用程式...
Linux ALSA音效卡驅動之一 ALSA架構簡介
宣告 本博內容均由 在核心裝置驅動層,alsa提供了alsa driver,同時在應用層,alsa為我們提供了alsa lib,應用程式只要呼叫alsa lib提供的api,即可以完成對底層音訊硬體的控制。圖 1.1 alsa的軟體體系結構 由圖1.1可以看出,使用者空間的alsa lib對應用程式...