1. 程式人生 > >alsa lib和utils交叉編譯與移植

alsa lib和utils交叉編譯與移植

一、PC端使用alsa 1)PC上使用alsa時,正常的安裝alsa-lib和alsa-util即可,alsa-lib提供alsa音訊程式執行所需要的庫,alsa-util主要生成可執行程式,在程式執行時,在link裡新增-lasound即可使用 2)PC端使用alsa程式設計,具體過程可以參考網上的連結,基本都是一樣的  二、將alsa移植到arm時的步驟 1.alsa交叉編譯 >下載alsa-lib和alsa-util >切換到alsa-lib目錄下,執行 ./configure --host=arm-linux-gnueabihf--prefix=/usr/local/share/arm-alsa --enable-shared --disable-python--with-configdir=/usr/local/share/alsa--with-plugindir=/usr/local/lib/alsa_lib CC=arm-linux-gnueabihf-gccCXX=arm-linux-gnueabihf-g++ LD=arm-linux-gnueabihf-ld
解釋:
1)一般在makefile時,部分程式會首先執行配置檔案進行配置,然後再生成makefile檔案,注意不同工程的配置方案並不相同,這些命令不一定在其他配置檔案中也能使用         2)--host:為使用的交叉編譯工具名,直接使用arm-linux也可以,根據PC上安裝的交叉編譯工具來決定;          3)--prefix:即makeinstall時程式安裝的目錄,可以根據自己的情況進行修改,不用拘泥          4)--enable:開啟功能 --disable:關閉功能         5)--with-configdir:alsa配置檔案所在目錄,本目錄要定好位置,交叉編譯過後,移植到板子上時要和PC上路徑一致。預設alsa配置檔案會在安裝目錄裡,不過根據經驗,最好提出來,因為沒有提出來的時候會報錯         6)--with-plugindir:alsa_lib所在目錄,目前意義不明,可以自由定位,也可以預設安裝         7)CC,CXX,LD:我單獨加的,即配置生成的makefile檔案中的編譯工具為這幾項 >
切換到alsa-util目錄下,執行 ./configure --host=arm-linux-gnueabihf--prefix=/usr/local/share/arm-alsaCFLAGS="-I/usr/local/share/arm-alsa/include"LDFLAGS="-L/usr/local/share/arm-alsa/lib -lasound"--disable-alsamixer --disable-xmlto--with-alsa-inc-prefix=/usr/local/share/arm-alsa/include--with-alsa-prefix=/usr/local/share/arm-alsa/libCC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++LD=arm-linux-gnueabihf-ld 解釋:
1)注意其中幾個特殊的命令就行,不過不能少  1)移植,將/usr/local/share目錄下的alsa,arm-alsa拷貝到開發板的/usr/local/share目錄下,將/usr/local/lib目錄下的alsa_lib拷貝到開發板上/usr/local/lib目錄下    2)將arm-alsa/lib目錄下的檔案拷貝到/lib目錄下,sudo cp -rfa/usr/local/share/arm-alsa/lib /lib    3)將arm-alsa/bin目錄下的檔案拷貝到/sbin目錄下,sudo cp -rfa/usr/local/share/arm-alsa/bin /sbin    4)將arm-alsa/sbin目錄下的檔案拷貝到/sbin目錄下,sudo cp -rfa/usr/local/share/arm-alsa/bin /sbin     5)新增環境變數,執行 sudo vi/etc/profile,在結尾新增exportALSA_CONFIG_PATH=/usr/local/share/alsa/alsa.conf,然後執行source/etc/profile 解釋:  1)移植時一定要和PC上目錄對應          2)只需要庫的話,alsa-util理論上不需要安裝,也不用拷貝bin和sbin          3)PC上使用eclipse的遠端登入直接拷貝到板子上可能存在可執行檔案不能執行的問題,所以要對bin,sbin目錄下的可執行檔案賦許可權,執行sudochomd 777          4)cp命令中的-rfa是組合命令,r是可以迴圈層次拷貝資料夾,f是強制覆蓋          5)環境變數的新增方法有多種,這裡使用的是一種,還可以在/etc/bash.bash.rc等目錄中新增,具體的執行機制略有不同,但都可以成功,具體可以網上查閱 >如果開發板上有正常的音效卡配置,有3.5mm聲音輸入,以上步驟完成後就可以了,程式應該能正常執行,可以執行aplay和arecord等命令來測試 2.使用USB麥克風時 >USB麥克接入後      1)執行cat/proc/asound/cards,會輸出接入音效卡的資訊,有預設系統的裝置和自己的USB裝置,對應有裝置號      2)執行ls/dev/snd,會輸出當前的裝置,其中USB裝置對應的為controlC1,pcmC1D0p(與之類似),其中C1b表示card1,D0表示driver 1 >執行sudo~/.asoundrc,在其中新增 pcm.!default {      typehw      card1      device0 } ctl.!default {      typehw      card1      device0 } 解釋: 1).asoundrc這個檔案可能不存在,建立一個即可,因為程式在呼叫alsa時,會進入alsa.conf這個配置檔案,這個配置檔案會預設搜尋到~/.asoundrc          2)card 1和driver0要根據具體的編號來定          3)ls/dev/snd目錄下可能會沒有裝置,這個時候需要參考網上的建議,使用連結命令或者直接將裝置拷貝到這個目錄下 >重啟作業系統,然後即可執行,可能程式在執行時需要使用管理員許可權,不然會報錯 3.待解決問題 到上述步驟為止,已經能夠錄音,不過還是有點問題,聲音比較嘈雜,還有是單聲道錄音,這些可以通過amixer命令來解決,具體的可以網上查詢,非常多參考資料 三、出錯記錄 1)情況1
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:4241:(_snd_config_evaluate) functionsnd_func_card_driver returned error: No such file ordirectory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluatingstrings
ALSA lib conf.c:4241:(_snd_config_evaluate) functionsnd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluatingname
ALSA lib conf.c:4241:(_snd_config_evaluate) function snd_func_referreturned error: No such file or directory
ALSA lib conf.c:4720:(snd_config_expand) Evaluate error: No suchfile or directory
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCMdefault
error opening PCM device: No such file or directory 出錯原因:①交叉編譯後拷貝配置檔案時沒有按照對應目錄              ②沒有新增環境變數,或者新增環境變數後沒有執行更新命令,/etc/profile對應的更新命令為source/etc/profile              ③沒有找到音效卡,如果使用USB音效卡時,預設沒有載入成功 2)情況2 ALSA libconf.c:3501:(snd_config_hook_load) cannot stat file/directory/usr/local/share/alsa/cards/aliases.confALSA libconf.c:3501:(snd_config_hook_load) cannot stat file/directory/usr/local/share/alsa/cards/aliases.conf
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCMcards.pcm.default
error opening PCM device: No such file or directory 出錯原因:①重新交叉編譯,將alsa的配置檔案單獨放到一個位置,不要使用預設位置 3)情況3 ALSA libpcm_hw_c(_snd_pcm_hw_open)invalid value for card erroropening PCM device: No such file or directory 出錯原因:①.asoundrc中音效卡的修改繫結有錯誤,需要重新按照正確的方式配置 4)情況4 erroropening PCM device: No such file or directory 出錯原因:程式可能需要管理員許可權才能執行,將系統改為管理員許可權執行或者執行sudo命令執行 5)情況5 PC下出錯的原因一般只有兩種,一種是沒有安裝好alsa,一種是在編譯的時候沒有新增連結庫-lasound 四、參考連結: 1.alsa交叉編譯 2.alsa程式設計 3.alsa配置相關(細節掌握)