Linux ALSA音效卡驅動之一 ALSA架構簡介

2021-08-10 17:37:17 字數 2489 閱讀 9168

在核心裝置驅動層,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在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$

我們可以看到以下裝置檔案:

其中,c0d0代表的是音效卡0中的裝置0,pcmc0d0c最後乙個c代表capture,pcmc0d0p最後乙個p代表playback,這些都是alsa-driver中的命名規則。從上面的列表可以看出,我的音效卡下掛了6個裝置,根據音效卡的實際能力,驅動實際上可以掛上更多種類的裝置,在include/sound/core.h中,定義了以下裝置型別:

[c-sharp]view plain

copy

#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

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對應用程式...