asla架構和alsa lib音訊庫的移植

2021-08-20 05:47:25 字數 3322 閱讀 7848

【alsa的體系結構】

官方主頁 

主要跟程式設計相關是:

alsa-lib. alsa 應用庫(最常用) 

alsa-driver 一些常見晶元的alsa驅動**,一般核心會整合. 

alsa-firmware 一些dsp或asic的專用的微碼(運在晶元之上,啟動時由linux裝入到硬體中). 

alsa-oss 用alsa介面模擬舊的oss介面. 

其中alsa-driver,alsa-firwware是核心開發者所接觸的東西,對於已經正常執行硬體,通常意味著這一部分已經整合到核心當中,無需修改.而alsa-utils主要是測試一些小工具.

因此對於乙個應用程式開發者,或者嵌入式應用開發者,接觸到主要是alsa-lib編譯出來的庫libasound.

【linux alsa 驅動測試】

以下是我在rhel 5上測試alsa的結果,在arm或mips開發板上類似

如果安裝alsa,在/proc會看到相應裝置:

用cat /proc/asound/devices

[root@hxy alsa-lib-1.0.22]# cat /proc/asound/devices

2:        : timer

3:        : sequencer

4: [ 0- 0]: raw midi

5: [ 0- 1]: digital audio playback

6: [ 0- 0]: digital audio playback

7: [ 0- 0]: digital audio capture

8: [ 0]   : control

正常情況下,在你的/dev/snd會看到如下裝置結點(有例外, 就是核心驅動調整了結點位置)

用ls -l /dev/snd

[root@hxy alsa-lib-1.0.22]# ls -l /dev/snd

total 0

crw------- 1 root root 116, 8 mar  2 02:41 controlc0

crw------- 1 root root 116, 4 mar  2 02:41 midic0d0

crw------- 1 root root 116, 7 mar  2 02:41 pcmc0d0c

crw------- 1 root root 116, 6 mar  2 02:41 pcmc0d0p

crw------- 1 root root 116, 5 mar  2 02:41 pcmc0d1p

crw------- 1 root root 116, 3 mar  2 02:41 seq

crw------- 1 root root 116, 2 mar  2 02:41 timer

在arm-linux/mips linux下移植alsa庫,首先保證裝置驅動結點正確無誤.

如果沒有這些節點,可用下面命令建立:

[c-sharp] 

view plain

copy

mkdir /dev/snd  

mknod /dev/snd/controlc0 c 116 0  

mknod /dev/snd/hwc0d0 c 116 4  

mknod /dev/snd/pcmc0d0c c 116 24  

mknod /dev/snd/pcmc0d0p c 116 16  

mknod /dev/snd/seq c 116 1  

mknod /dev/snd/timer c 116 33  

然後主要移植 alsa-lib

alsa-lib的移植.

解壓 tar xvjf alsa-lib-1.0.22.tar.bz2

cd alsa-lib-1.0.22

生成makefile

./configure --host=arm-linux --prefix=$pwd/../../output/arm-linux --enable-static --enable-shared  --disable-python  --with-configdir=/usr/local/share --with-plugindir=/usr/local/lib/alsa_lib

在這裡要注意 --with--configdir的選項.它將影響 include/config.h中的 alsa_config_dir 目錄.

它預設是你的--prefix目錄.這樣在嵌入式交叉編譯將是乙個桌面機的路徑,在libasoud.so執行.會提示,如果出來這個提示,一般都是alsa_config_dir路徑錯誤造成的.

alsa lib pcm.c:2145:(snd_pcm_open_noupdate) unknown pcm default

aplay: main:546: audio open error: no such file or directory

--with-plugindir也是同樣道理了.它是設為 alsa_plugin_dir 巨集.

編譯 make

安裝 make install

開發板發布注意:

在開發板上發布alsa庫.除了libasound.so庫以外,必須還要把 alsa.conf發布到板上--with-configdir所指向目錄下的alsa目錄,否則還是會報"audio open error: no such file or directory".

這個檔案可以在make install後在你安裝目錄下的share找到alsa目錄,把這個目錄整個拷貝到開發板即可.

alsa-utils移植

解壓:tar xvjf alsa-utils-1.0.22.tar.bz2

cd alsa-utils-1.0.22

生成makefile

./configure --host=arm-linux --prefix=$pwd/../../output/arm-linux --enable-static --enable-shared    --with-configdir=/usr/local/share --with-libiconv-prefix=$pwd/../../output/arm-linux cflags="-i$pwd/../../output/arm-linux/include" ldflags="-l$pwd/../../output/arm-linux/lib -lasound -liconv"  --disable-alsamixer --disable-xmlto

注意這裡ldflags是必須,否則會找不到libasound.另外 alsamixer 是乙個ncurses程式,基本上在嵌入式終端上很難移植.所以這裡取消掉.--disable-xmlto也是因為找不到庫.

編譯 make

安裝 make install

asla架構和alsa lib音訊庫的移植

官方主頁 主要跟程式設計相關是 alsa lib.alsa 應用庫 最常用 alsa driver 一些常見晶元的alsa驅動 一般核心會整合.alsa firmware 一些dsp或asic的專用的微碼 運在晶元之上,啟動時由linux裝入到硬體中 alsa oss 用alsa介面模擬舊的oss介...

asla架構和alsa lib音訊庫的移植

主要跟程式設計相關是 alsa lib.alsa 應用庫 最常用 alsa driver 一些常見晶元的alsa驅動 一般核心會整合.alsa firmware 一些dsp或asic的專用的微碼 運在晶元之上,啟動時由linux裝入到硬體中 alsa oss 用alsa介面模擬舊的oss介面.其中a...

CS架構和BS架構

cs架構和bs架構 軟體的分類有很多種,按照物理結構可以分為單機版desktop程式和網路版程式,網路程式又分為c s程式和b s程式,比如 機房收費系統就是cs架構,而評教系統就是bs架構。當我們在開發一款軟體的時候,就要考慮它的架構了,拋開系統效能 商實力等方面的因素,最為關注的就是產品的系統架...