原創博文,轉載請標明出處--周學偉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,表示移植有問題,請思考是不是把所有的動態庫都復制完全了!