準備工作
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-jyxtec-linux-gnueabi --prefix=/usr/share/arm-alsa
tips:--host引數指定了交叉編譯器為「arm-jyxtec-linux-gnueabi(根據自己板子上的工具鏈穩準)",因此必須確保交叉編譯器已成功配置(也就是已經匯出為全域性環境變數,切記!切記!我就在這浪費了很多時間,我的習慣是新增據對路徑),且可以在shell裡直接呼叫;--prefix引數指定了alsa-lib的目標安裝目錄,之後的alsa-util配置也一樣
3.使用命令
make
sudo make install
tips:make install必須加上sudo,因為在install過程中會建立某些目錄
4.解壓alsa-utils-1.0.23.tar.bz2,進入解壓所得目錄
5.使用命令
./configure --host=arm-jyxtec-linux-gnueabi --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 -*** /usr/share/arm-alsa/lib/* $rootfs/lib/
sudo cp -*** /usr/share/arm-alsa/bin/* $rootfs/sbin/
sudo cp -*** /usr/share/arm-alsa/sbin/* $rootfs/sbin/
2.把生成的配置檔案copy到檔案系統中,要保證絕對路徑一致(自己動手建資料夾):
sudo cp -*** /usr/share/arm-alsa/share/alsa/* $rootfs/lusr/share/arm-alsa/share/alsa/
4.編輯$rootfs/etc/init.d/rcs,新增如下幾行
[plain]
view plain
copy
print?
#alsa_init
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
amixer cset numid=86 2
amixer cset numid=87 2
tips:amixer的兩句命令,是將amixer的預設設定'left capture source'和'right capture source'的值改為'line『,否則會出現alsa錄音沒有聲音的問題
5.編輯$rootfs/etc/profile,新增如下兩行
[plain]
view plain
copy
print?
#alsa_init
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小工具具體使用方法:
交叉編譯alsa lib
2 tar jxvf alsa lib 1.0.19.tar.bz2 3 cd alsa lib 1.0.19 4 cc cross compile configure target arm linux host i686 linux prefix alsalib arm 5 make 6 make...
alsa lib原始碼分析
我們感興趣的是,alsa lib是如何解析這些配置的。首先我們可以從使用alsa lib時,最先的入口函式snd pcm open處開始說起 int snd pcm open snd pcm t pcmp,const char name,snd pcm stream t stream,int mod...
asla架構和alsa lib音訊庫的移植
官方主頁 主要跟程式設計相關是 alsa lib.alsa 應用庫 最常用 alsa driver 一些常見晶元的alsa驅動 一般核心會整合.alsa firmware 一些dsp或asic的專用的微碼 運在晶元之上,啟動時由linux裝入到硬體中 alsa oss 用alsa介面模擬舊的oss介...