ALSA驅動之 ALSA架構簡介

2021-06-10 19:56:49 字數 2521 閱讀 3838

宣告:本博內容均由

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

print?

#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

ALSA驅動之 ALSA架構簡介

宣告 本博內容均由 在核心裝置驅動層,alsa提供了alsa driver,同時在應用層,alsa為我們提供了alsa lib,應用程式只要呼叫alsa lib提供的api,即可以完成對底層音訊硬體的控制。圖 1.1 alsa的軟體體系結構 由圖1.1可以看出,使用者空間的alsa lib對應用程式...

ALSA架構簡介

一.概述 alsa的軟體體系結構 user空間 kernel空間和硬體。在核心裝置驅動層,alsa提供了alsa driver,同時在應用層,alsa為我們提供了alsa lib,應用程式只要呼叫alsa lib提供的api,即可以完成對底層音訊硬體的控制。二.alsa裝置檔案結構 controlc...

Alsa驅動移植

華清遠見嵌入式學院講師。二 預設情況下核心已經支援alsa驅動,保險情況下先去確認一下,如下圖 device drivers sound card support advanced linux sound architecture alsa for soc audio support soc aud...