alsa-lib及alsa-utils成功移植


轉載於:http://blog.sina.com.cn/s/blog_7d7e9d0f0101lqlp.html

 自己測試沒有使用編譯:像wds  編譯 ncurse 見下一篇wds的,本文相對操作等較簡單清晰一點. 

准備工作(自己用的版本是: alsa-lib-1.0.27.2.tar.bz2 , alsa-utils-1.0.27.2.tar.bz2  ,內核3.4.2,arm-linux-gcc:4.3.2方法和本文一樣. )

alsa-lib版本:alsa-lib-1.0.23.tar.bz2

alsa-util版本:alsa-utils-1.0.23.tar.bz2

其他版本的alsa-lib和alsa-util不能保證正常工作

arm板子:s3c2416

板子上linux內核:2.6.xx

pc虛擬機:arm-linux-gcc:4.4.6

 

首先在Ubuntu上交叉、編譯alsa-lib和alsa-util

1.解壓alsa-lib-1.0.23.tar.bz2,進入解壓所得目錄

2.使用命令

./configure --host=arm-linux  --prefix=/usr/share/arm-alsa      //原文的

./configure --host=arm-linux  --prefix=/usr/share/arm-alsa   --disable-python  //自己的  

(自己的版本會報錯:關於python方面的,所以加上 --diaable-python,不讓其編譯其文件播放wav文件測試中不需要python的支持,python應該是專門的一個程序的生成)

Tips:--host參數指定了交叉編譯器為“arm-linux(根據自己板子上的工具鏈穩准)",因此必須確保交叉編譯器已成功配置(也就是已經導出為全局環境變量,切記!切記!我就在這浪費了很多時間,我的習慣是添加據對路徑),且可以在shell里直接調用;--prefix參數指定了alsa-lib的目標安裝目錄,之后的alsa-util配置也一樣

 

提示:其實./configure --host=arm-linux --prefix=xxx 這是linux配置和編譯應用程序的萬能命令.別的linux應用程序的配置和編譯基本都是這個思路;

  需要的話還要繼續添加別的配置項如上面的: --disable-python 等等.

3.使用命令

make

sudo make install

Tips:make install必須加上sudo,因為在install過程中會創建某些目錄

4.解壓alsa-utils-1.0.23.tar.bz2,進入解壓所得目錄

5.使用命令

./configure --host=arm-linux --prefix=/usr/share/arm-alsa --with-alsa-inc-prefix=/usr/share/arm-alsa/include --with-alsa-prefix=/usr/share/arm-alsa/lib --disable-alsamixer --disable-xmlto

Tips:--with-alsa-inc-prefix和--with-alsa-prefix分別指定了交叉編譯util應用所需要的alsa-lib的頭文件和庫文件--disable-alsamixer表示不編譯生成alsamixer這個應用程序因為該程序依賴於ncurses這個圖形界面庫,目前我們對於該庫還不能交叉編譯,故放棄

6.使用命令

touch alsaconf/po/t-ja.gmo

注意:根據自己的錯誤提示來輸入命令

如果提示是t-ru.gmo的話,就用命令:touch alsaconf/po/t-ru.gmo

如果提示是t-ja.gmo的話,就用命令:touch alsaconf/po/t-ja.gmo

值得注意的地方是:如果還是報錯,那就make clean一下

避免之后make報錯

7.使用命令

make

sudo make install

至此Ubuntu上的工作全部結束

 8.到此還不能保證自己移植的是否成功能用,先看一下我們生成的utils是否是交叉環境上的,也就是能在arm上運行的,如何測試呢?很簡單,跳到我們生成工具目錄下(cd /usr/share/arm-alsa/sbin/)

# cd /usr/share/arm-alsa/bin/

# file aplay

顯示 aplay: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.21, not stripped

注意這就是我們能在arm上運行的小工具格式,最重要的是看arm那里,那里顯示arm說明我們的運行環境是在arm上,這正是我們移植的目的,但是如果顯示是 Intel 80386,說明我們沒有移植成功,問題就是出在我們交叉工具鏈設置上。

接着要在2416上部署已交叉編譯好的alsa-lib和alsa-util

為便於理解,設2416的根目錄為$rootfs

1.將Ubuntu中/usr/share/arm-alsa/下的lib、bin、sbin下的文件cp至2416根文件系統的目錄下,使用命令

sudo cp -rfa /usr/share/arm-alsa/lib/*  $rootfs/lib/

sudo cp -rfa /usr/share/arm-alsa/bin/*  $rootfs/sbin/

sudo cp -rfa /usr/share/arm-alsa/sbin/*  $rootfs/sbin/

2.把生成的配置文件copy到文件系統中,要保證絕對路徑一致(自己動手建文件夾):

sudo cp -rfa /usr/share/arm-alsa/share/alsa/*  $rootfs/usr/share/arm-alsa/share/alsa/

 

4.編輯$rootfs/etc/init.d/rcS,添加如下幾行

[plain]view plaincopyprint?
  1. #alsa_init  
  2. mkdir /dev/snd  
  3. ln /dev/controlC0 /dev/snd/controlC0  
  4. ln /dev/pcmC0D0c /dev/snd/pcmC0D0c  
  5. ln /dev/pcmC0D0p /dev/snd/pcmC0D0p  
  6. ln /dev/timer /dev/snd/timer  
  7.   
  8. amixer cset numid=86 2  
  9. amixer cset numid=87 2  
Tips:amixer的兩句命令,是將amixer的默認設置'Left Capture Source'和'Right Capture Source'的值改為'Line‘,否則會出現alsa錄音沒有聲音的問題

[自己下面不是按照原文5.編輯...做的(原文那樣做應該也是沒有問題的)]自己的做法是:

拷貝:Windows.wav到 /home/nfs_dir下(網絡文件系統的根目錄下)

然后直接在控制終端輸入:

aplay Windows.wav

調音量:
amixer controls
amixer cget numid=1
amixer cset numid=1 30

 

5.編輯$rootfs/etc/profile,添加如下兩行

[plain]view plaincopyprint?
  1. #alsa_init  
  2. export ALSA_CONFIG_PATH=/usr/share/arm-alsa/share/alsa/alsa.conf  

 

6、如果開機運行后,你輸入

# amixer 
ALSA lib conf.c:3601:(snd_config_update_r) Cannot access file /usr/local/alsa/share/alsa/alsa.conf
ALSA lib control.c:902:(snd_ctl_open_noupdate) Invalid CTL default
amixer: Mixer attach default error: No such file or directory

或者和上面的信息類似,那說明我們copy的配置信息據對路徑不對,根據提示信息建相應的文件夾,把我們生成相應配置信息cp進去,逐步嘗試,(會有好幾次錯誤提示,和上面的作法一樣)

知道最后可以成功運行,打工造成,移植成功!~

 

 下篇文章我會根據我的情況總結一下這些小工具的具體使用方法!!

  amixer小工具具體使用方法:http://blog.sina.com.cn/s/blog_7d7e9d0f0101ltg5.html


免責聲明!

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



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