一、 環境
a) 操作系統:Linux5 (內核版本:2.6.18-164.el5)
b) 開發板:mini2440(nand 128M,SDRAM 64M)
c) 編譯器:gcc 4.4.3 àarm-linux-gcc-4.4.3
二、 設備
a) PC機、ARM9mini2440開發板
三、 資源
a) 調用的庫
i. libid3tag-0.15.1b.tar.gz
ii. libmad-0.15.1b.tar.gz
iii. madplay-0.15.2b.tar.gz(第二版本)
iv. zlib-1.2.5.tar.bz2
v. libstdc++.so.6.0.10 (編譯器的替換庫)
注:目前madplay的官方網站是http://www.underbit.com/products/mad/
透過該網站的介紹可以得知, 它還需要libmad 和libid3tag 兩個庫, 從該網站找到下載連接
http://sourceforge.net/project/showfiles.php?group_id=12349
b) 編譯器
i. arm-linux-gcc-4.4.3.tar.gz
c) 傳輸工具
i. tftp軟件(也可以用其他的傳輸)
四、 步驟
a) 首先搭建交叉編譯環境
i. 將arm-linux-gcc-4.4.3.tar.gz解壓到一個空文件夾中
#tar zvxf arm-linux-gcc-4.4.3.tar.gz –C / (C的後面有空格)
ii. 改變環境
#gedit /root/.bashrc
iii. 將路徑改為/opt/FriendlyARM/toolschain/4.4.3/bin
expotr PATH=$PATH:/ opt/FriendlyARM/toolschain/4.4.3/bin
保存退出之後,要重啟一下機子命令如下
#reboot
iv. 重啟之後查看是否編譯成功
# arm-linux-gcc –v
在最後一行如果出現了版本號就是編譯成功了
b) 修改編譯調用的庫鏈接
i. # strings /usr/lib/libstdc++.so.6 | grep GLIBC
結果的最後一句話:
GLIBCXX_3.4 沒有GLIBCXX_3.4.9
ii. # ls -l /usr/lib/libstdc++.so.6
結果鏈接(快捷方式)為
/usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.8
iii. # rm –rf /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.8
iv. #ls -l /usr/lib/libstdc++.so.6
出現:/usr/lib/libstdc++.so.6:沒有那個文件或目錄
v. 把(資源)libstdc++.so.6.0.10放入/usr/lib中
vi. 重新做鏈接
#ln -s /usr/lib/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6
c) 建立工作目錄,拷貝源代碼包
在/opt/FriendlyARM/mini2440 目錄下建立madplay 目錄,並以此為工作目錄,並在該目錄中建立以下子目錄,以存放不同的文件:
#cd /opt/FriendlyARM/mini2440
#mkdir madplay
#cd madplay
#mkdir tarball src-x86 src-arm target-x86 target-arm
目錄說明:
tarball 目錄用來存放所有的源代碼包
src-x86 目錄用來存放X86 版本的所有源代碼文件
src-arm 目錄用來存放ARM 版本的所有源代碼文件
target-x86 目錄是X86 版本的安裝目錄
target-arm 目錄是ARM 版本的安裝目錄
1. 接下來把從網上下載到的源代碼包(四個)放入 tarball 目錄中。
2. 解壓原代碼包
#cd tarball
# for f in $(ls *.tar.gz); do tar xvzf $f –C ../src-x86 ; done
(手打命令)
3. 編譯madplay 所依賴的庫文件
a) libid3tag
#cd ../src-x86/libid3tag-0.15.1b
#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86
#make
#make install
b) libmad
#cd ../ libmad-0.15.1b
#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86
#make
#make install
如果編譯時出現錯誤:cc1: error: unrecognized command line option “-fforce-mem”
解決辦法:
其實這個錯誤是編譯安裝libmad時候引起的,audacity包含libmad
解決方式是:找到libmad configure之後的Makefile,
vi Makefile
找到包含"-fforce-mem"字符串,將其刪除,就ok了
原因是gcc 4.4 或者更高版本,已經將其去除了,所以會出現上面的錯誤!
以上過程完畢,將在 target-x86 目錄出現編譯madplay 所依賴的庫文件和頭文件。如下:
4. 編譯安裝madplay
如果我們還是像剛才那樣配置編譯選項:
#cd madplay-0.15.2b
#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86
將會出現如圖錯誤:
提示我們在配置 madplay 之前要先安裝libmad,因為我們之前已經編譯並安裝了依賴庫,根據提示我們要設置CPPFLAGS 環境變量,采用如下參數重新配置:
#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86 CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-x8
6/include
注意:上面的四行是一條命令
運行結果如圖所示:
提示告訴我們還要設置 LDFLAGS 環境變量,因此再次修改配置參數如下:
#cd ../src-x86/madplay-0.15.2b
#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86 CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-x86/include LDFLAGS=-L/opt/FriendlyARM/mini2440/madplay/target-x86/lib
注意:上面六行是一條命令
執行結果如下:
這說明配置已經成功,生成了編譯所需要的 Makefile 文件,輸入一下命令開始編譯安裝:
#make
#make install
執行完畢, 可執行文件將被安裝在我們指定的目錄
/opt/FriendlyARM/mini2440/madplay/target-x86 目錄中:
#ls target-x86/bin
abxtest madplay
其中abxtest 是附加生成的測試程序,不必理會。
5. 測試PC 版的madplay
拷貝一首mp3 文件到madplay 所在的目錄,執行:
#./madplay test.mp3
如果你的聲卡已經正確安裝,就可以聽到mp3 的聲音了。
6. 構建並修正ARM 版本的編譯腳本build-arm
將腳本放在/opt/FriendlyARM/mini2440/madplay下)我給它命名為mm.sh
#!/bin/sh
MADPLAY_DIR=/opt/FriendlyARM/mini2440/madplay
SRC_DIR=src-arm
TARGET_DIR=$MADPLAY_DIR/target-arm
tar xvzf ./tarball/libid3tag-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/libmad-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/madplay-0.15.2b.tar.gz -C $SRC_DIR
tar xvjf ./tarball/zlib-1.2.5.tar.bz2 -C $SRC_DIR
export CC=arm-linux-gcc
cd $SRC_DIR/zlib-1.2.5
./configure --prefix=$TARGET_DIR
make && make install
cd ../..
cd $SRC_DIR/libid3tag-0.15.1b
./configure --host=arm-linux --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include
LDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../
cd $SRC_DIR/libmad-0.15.1b
./configure --host=arm-linux --prefix=$TARGET_DIR
make;make install
cd ../..
cd $SRC_DIR/madplay-0.15.2b
./configure --host=arm-linux --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include
LDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../
運行後生成madplay和lib文件。
7. 下載madplay 到開發板運行測試
為了區別於板子中已經存在的 madplay,我們把新做的改名為mymadplay,把它以及依賴庫通過 tftp 下載到開發板,並作如下放置:
執行文件:
mymadplay 放在/bin/目錄 庫文件放在/lib 目錄。
步驟如下:
一、 將Linux中的要放到開發板中的東西先弄到PC上面
1.首先要修改開發板的IP
#cd etc
#vi eth0-setting 改IP網關,保存退出
#cd init.d
#vi ifconfig-eth0
在最後的幾行裡找到IP修改,保持退出
#reboot 重啟一下!
二、 打開tftp軟件選擇PC機的IP地址同時選擇文件所在的位置
à可以查看文件
三、 在開發板中輸入命令:
a) cd /bin/
b) tftp –g –r mymadplay PC的IP
c) cd /lib
d) tftp –g –r 庫裡面的文件 PC的IP (一個一個的傳,當遇到pkgconfig文件夾時就在板子上面創一個pkgconfig文件夾,進入文件夾後繼續下載庫文件)
四、 在/bin文件夾中給 mymadplay 777 權限,即可使用播放器了
#./ mymadplay 1.mp3 就會顯示如下圖所示↓↓↓