【轉】ALSA(lib和util)交叉編譯與測試


情況簡介

ALSA 是目前 Linux 系統上大量采用的音頻設備庫,通過 Alsa 架構能分離驅動和應用的開發。 Alsa 為上層提供API 的同時,也為下層提供了接口,在內核配置的時候指定“支持 Alsa” 就能得到內核支持,具體位置為:

Menuconfig -> Device Drivers -> Sound card support -> Advanced Linux Sound Architecture ,驅動層所添加的音頻設備應該也會在這里出現。

由於我們的內核已經包含了對應音頻設備的驅動,故不做深入。

 

有了 Alsa 內核驅動,我們還需要 Alsa Lib 和 Alsa Util 的支持,這 3 者的關系如下圖所示:

Alsa Util

-------------

Alsa lib

-------------

Alsa Driver

 

Alsa Util 是純應用層的軟件,相當於 Alsa 設備的測試程序, Alsa Lib 則是支持應用 API 的中間層程序。移植Alsa 程序的順序就是先后移植 Driver,Lib,Util 。

Alsa Lib 移植

Lib 移植不需要修改一丁點兒的源碼,只需要重新編譯 lib 以支持自己的平台。其源碼可以從官網下載。編譯過程如下:

1.Configure

sudo ./configure --host=arm-none-linux-gnueabi --prefix=/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build --with-alsa-devdir=/dev --enable-static --enable-shared  --disable-python  --with-configdir=/usr/local/share/alsa --with-plugindir=/usr/local/lib/alsa_lib

配置會先對此命令中的配置項進行檢查,然后實現配置。需要注意的是:配置如果出錯,未必一定報錯,而是會采用默認的配置選項。幾個重要的配置項:

1 ) --host 指定編譯器,這里指定為交叉編譯器。注意運行本配置命令前務必保證編譯器已經可以在 Shell下直接執行了 

2 ) --prefix 指定編譯后文件的安裝路徑,后續的安裝命令會在該目錄中創建 lib 和 include 兩個目錄

3 ) --with-configdir 指定 conf 文件的安裝目錄,該目錄中對我們最有用的 alsa.conf ,此文件會被直接移植到你的目標系統中。

4) (本人增加) --with-alsa-devdir 指定音頻設備的目錄。(pcmC0D0c/pcmC0D0p/pcmC0D1p等)alsa_lib 默認到/dev/snd找這些音頻設備,但有時候創建音頻設備並不在/dev/snd里,而是在/dev/里或者其它目錄里,這就需要指定目錄,不然會提示找不到pcmCxDx 。

2.make

直接運行:

make 或者 sudo make

3.make install

運行 install 有 2 點需要注意

1)  install 可能會在一些非用戶目錄安裝一些文件,因此需要 root 權限

2)  install 也會執行一些編譯命令,因此記得保證 root 權限下的交叉編譯器同樣可用。

 

Alsa Util 移植

Util 會生成用於播放,錄制,配置音頻的應用文件,對測試很有用處。編譯過程如下:

1.Configure

./configure --host=arm-none-linux-gnueabi --prefix=/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build --enable-static --enable-shared CFLAGS="-I/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build/include" LDFLAGS="-L/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build/lib -lasound" --disable-alsamixer --disable-xmlto --with-alsa-inc-prefix=/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build/include

其中幾個重要的配置項:

1 ) --host 指定編譯器,與 lib 的配置選項相同

2 ) --prefix 指定編譯后文件的安裝路徑,與 lib 的配置選項相同

3 ) CFLAGS 用於編譯時指定的編譯選項,在這里將利用 lib 編譯后生成的頭文件,因此指定為該頭文件所在目錄

4 ) LDFLAGS 用於編譯時指定連接庫文件,與 CFLAGS 同樣狀況,將 lib 編譯生成的庫文件指定出來,

5 ) --with-alsa-inc-prefix 指定頭文件目錄,這個與 3) 類似,但必須指定,因為 Configure 程序會去該目錄檢查版本情況。如果不指定的話,則會直接去默認目錄 即宿主機對應的 alsalib 目錄中尋找,因此可能會有錯誤 )

2.  make

必須編譯成功。

網上有種方法教大家 1 ) make clean 2)configure 3)make install 這種方法確實不會報錯,但其實是安裝了預編譯的可執行程序,該程序是基於 x86 體系的,無法用於嵌入式平台。

3.make install


lib 和 util 安裝到嵌入式平台

在目標板上,以下文件必須被拷貝至對應位置:

1)  lib 庫文件,放在 /lib/ 中

2)  conf 文件,應放在 /usr/local/share 中,與編譯時指定的目錄相同

3)  應用文件, util 能產生 aplay,amixer,arecord 可執行程序,這些文件可放在 /usr/sbin 中

4)  必須保證有 /dev/snd/ 目錄中,此目錄下應包含以下幾個設備文件 ( 驅動 ) ,

controlC0, pcmC0D0c, pcmC0D0p, timer

如果這些文件已經在 /dev/ 下,可拷貝到 snd 目錄中。

 

運行測試程序

在我們當前的板子上存在着 4 個音頻鏈路,分別是 :MIC, Line in, Line out, Headphone Out 。這 4 個鏈路都需要進行測試。

對於播放鏈路 (Line out, Headphone Out) ,相應的播放命令為:

aplay mysound.wav

對於錄制鏈路 (Mic, Line in) ,相應的錄制命令為:

arecord myvoice.wav –fdat –d 5

其中 -fdat 指定以 CD 音質錄制, -d 代表錄制 5 秒后退出。


命令 amixer 可以用來控制鏈路的通斷以及相應配置。對於每一個系統,會有不一樣的鏈路名稱,通過amixer可以了解當前系統上所有鏈路的名稱及狀態。

命令amixer scontrols可以查看系統中的simple控制鏈路,相對應的還有完全版的控制鏈路(amixer controls),根據筆者的經驗,這個simple控制鏈路足矣。

命令amixer scontent可以查看系統的所有simple鏈路極其當前狀態。

 

以我目前的系統為例,為了讓不同的鏈路工作,我們必須通過該命令進行設定。

Headphone Out

Amixer –c 0 sset ‘PCM’,0 100%,100% unmute playback

Line out

amixer –c 0 sset ‘Line’,0 100%,100% unmute playback

Line in

Amixer –c 0 sset ‘Right PGA Mixer Line1L’,0 100%,100% unmute cap

MIC

Amixer –c 0 sset ‘Right PGA Mixer Mic3L’,0 100%,100% unmute cap

 

轉自:http://blog.csdn.net/iamgooday/article/details/6323863

PS:我在編譯util 1.0.24.2時出現make錯誤,后來發現是version.h有問題,修改就好了,不知道為什么,version.h里面的內容會變亂了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM