移植alsa的接口庫和工具包---11


原創博文,轉載請標明出處--周學偉http://www.cnblogs.com/zxouxuewei/
 

6.移植alsa的接口庫和工具包  由於OK6410的Linux內核雖然有了聲卡的驅動,但是並沒有ALSA架構需要的應用程序接口庫。在用戶空間訪問聲卡的時候需要先經過ALSA庫才到內核訪問驅動程序,所以我們需要移植ALSA庫。而且由於6410使用的是wm9713或者wm9713的聲卡,該聲卡需要經過特殊的配置才可以使用,否則不能播放聲音。  

(1)移植alsa-lib

a.可以到http://www.alsa-project.org/main/index.php/Download下載最新版本的alsa庫(alsa-lib-1.0.29.tar.bz2)和工具包(alsa-utils-1.0.29.tar.bz2)。

b.解壓

tar -jxvf alsa-lib-1.0.29.tar.bz2 

c.配置alsa-lib

./configure --host=arm-linux  --prefix=/usr/local/arm-alsa  --enable-shared --disable-python 
--with-configdir=/usr/local/alsa --with-plugindir=/usr/local/alsa_lib CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld

  --host :為使用的交叉編譯工具名,直接使用 arm-linux 也可以,根據 PC上安裝的交叉編譯工具來決定;

  --prefix:即 make install 時程序安裝的目錄,可以根據自己的情況進行修改,不用拘泥

  --enable:開啟功能  --disable :關閉功能,使用動態庫不需要Python。

  --with-configdir: alsa 配置文件所在目錄,本目錄要定好位置,交叉編譯過后,移植到板子上時要和 PC 上路徑一致。也即是說    如果配置的時候指定的是/usr/local/alsa目錄,那么你的配置文件在開發板上的絕對路徑也要是/usr/local/alsa    。默認 alsa配置文件會在安裝目錄里。這個很重要,不能PC和開發板兩邊不匹配。  --with-plugindir: alsa_lib 所在目錄,目前意義不明,可以自由定位,也可以默認安裝,先不用管。但是這里指定的目錄會產生必要的庫文件,放到開發板的時候也要路徑和PC一樣。

d.編譯安裝

make make  install

(2)移植alsa-utils

a.解壓以后進入解壓得到的目錄

b.配置 :編譯工具需要要的頭文件目錄,也就是前面編譯庫文件得到的頭文件  LDFLAGS:編譯工具需要要的庫文件目錄,也就是前面編譯庫文件得到的庫文件  --with-alsa-inc-prefix:和CFLAGS一樣  --with-alsa-prefix:和LDFLAGS一樣。  

./configure --host=arm-linux --prefix=/usr/local/arm-alsa CFLAGS="-I/usr/local/arm-alsa/include" 
LDFLAGS="-L/usr/local/arm-alsab -lasound" --disable-alsamixer --disable-xmlto
--with-alsa-inc-prefix=/usr/local/arm-alsa/include --with-alsa-prefix=/usr/local/arm-alsab
CC=arm-linux-gcc CXX=arm-linux-g++ LD=arm-linux-ld CFLAGS

c.編譯和配置

make 
make install

(3)部署文件到開發板 進入到PC的/usr/local目錄(之前配置時候指定的,根據你的配置選項決定),因為我們所有的安裝目錄都在這個目錄下。

a.將/usr/local目錄下的alsa,arm-alsa拷貝到開發板的/usr/local目錄下

 cp ./alsa  /home6410/rootfs/usr/local  -rfa cp ./arm-alsa  /home6410/rootfs/usr/local -rfa

b.將/usr/localb目錄下的alsa_lib拷貝到開發板上/usr/localb(自己先創建)目錄下 

cp ./alsa_lib /home6410/rootfs/usr/localb/ -rfa 

c.將arm-alsab目錄下的文件拷貝到開發板根文件系統的b目錄下

 cp ./arm-alsab/* /home6410/rootfsb –rfa

 d.將arm-alsa/bin目錄下的文件拷貝到/sbin目錄下

cp ./arm-alsa/bin/* /home6410/rootfs/bin -rfa 

e.將arm-alsa/sbin目錄下的文件拷貝到/sbin目錄下 

cp ./arm-alsa/sbin/* /home6410/rootfs/bin -rfa 

f.添加環境變量,編輯開發板的文件系統里的/etc/profile,切記是開發板的文件系統不是PC的文件系統啊!!!在結尾添加

 export ALSA_CONFIG_PATH=/usr/local/alsa/alsa.conf 

g.復制聲卡需要的配置文件 由於wm9713/9714需要特殊配置,所以我們在移植了alsa-util以后便可以利用這個工具集中的alsactl對wm9714/9713進行配置,配置所需要的配置文件在SDK的wm9713目錄下。將他復制到開發板的/etc目錄即可。

h. 修改系統初始化腳本 由於alsa架構的庫和程序要去訪問/dev/snd目錄下的這些文件 controlC0  pcmC0D0c   pcmC0D0p   seq        timer 但是實際上我們使用的內核和文件系統並沒有/dev/snd這個目錄,而是直接把這些設備結點創建在/dev目錄,所以需要我們手動創建,並將設備結點進行硬鏈接。因此我們在初始化腳本里面完成這個任務,在開發板文件系統里的/etc/init.d/rcS加上如下內容。

 mkdir /dev/snd ln /dev/controlC0 /dev/snd/controlC0 ln /dev/pcmC0D0c /dev/snd/pcmC0D0c ln /dev/pcmC0D0p /dev/snd/pcmC0D0p ln /dev/timer /dev/snd/timer ln /devq /dev/sndq

  amixer cset numid=86 2 amixer cset numid=87 2

  alsactl  restore -f /etc/wm9714.conf

最后一步對聲卡進行配置,這是關鍵的關鍵,沒有成功執行這一步,雖然你的播放工具在播放音樂但是不會有聲音!!!!! 通過samba從windows復制一首MP3后綴的歌曲到PC的Linux中nfs文件系統根目錄,重命名為1.MP3,(因為中文在開發板不好操作。)在開發板的文件系統里進行測試madplay。在串口里面輸入 madplay 1.mp3 就可以聽到悅耳的歌曲了,(請插上耳機。)雖然有可能會輸出亂碼但是哦我們現在不關心,那是輸出歌曲的信息,如果有中文的話由於開發板對中文的支持我們沒有完善所以會亂碼,你要是嫌麻煩,可以這樣做。 madplay 1.mp3 >> mp3_log.txt 2>&1或者madplay –Q 1.MP3 然后就不會出現那些煩心的亂碼信息了。如果沒有播放成功,提示找不到madplay,表示移植有問題,請思考是不是把所有的動態庫都復制完全了!


免責聲明!

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



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