剛接觸XILINX的ZYNQ板,剛接觸沒有十天。XILINX定位它為SOC,我也很認同,起碼比TI定位MPU為SOC強很多。據說今年TI的最新產品也加入了ZYNQ板。
之前的MIPS處理器設計與實現的項目就算做告一段落,搞了將近7個月,成果顯著,收獲頗多,最近打算搞搞ZYNQ。
之前MIPS也有一套交叉編譯工具,不過是老師提供的,自己也嘗試搞了搞,太辛苦了,而且也沒什么成果,因為我們需要LITE版的MIPS指令集。
這次不一樣,ZYNQ集成了兩個ARM cortex-A9處理器,可以支持thumb指令集以及arm指令集,所以這方面的交叉編譯我本以為會很容易,誰知道依舊搞了很久。
主機平台:Ubuntu12.04LTS x86-32bit(我裝的是雙系統,沒有在虛擬機下運行,真心不推薦在虛擬機下運行,太慢了)
目標平台:linaro(Ubuntu11.04貌似) ARM(Xilinx Zedboard)
由於OpenCV默認下只支持AVI標准格式的打開與寫入,因此需要添加很多解碼與編碼庫的交叉編譯庫等文件,包括jpeg、png等等。因此,大體流程是先對需要支持的庫進行交叉編譯,再對OpenCV進行交叉編譯並添加相應的庫支持。依賴關系如下:


安裝完成后,需要導入環境變量,也可以修改bash文件(不需要每次都導入環境變量),指令如下:
export ARCH=arm
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
export PATH=/root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/:$PATH
注意:$PATH 千萬不要輸入錯誤,否則會運行不了很多命令,也可以輸入
gedit /etc/bash.bashrc
如圖所示,添加以下內容
保存並關閉gedit,然后輸入
source /etc/bash.bashrc使當前設置立即生效,
可以通過輸入echo $PATH命令檢查環境變量是否設置正確,如下圖:
可以,編譯C文件進行測試,
使用gedit在任意目錄下編輯hello.c文件如圖所示,保存后進入終端。
以root身份進入到當前目錄下,輸入arm-xilinx-linux-gnueabi-gcc -o hello hello.c命令(該命令root身份有效)
生成hello可執行文件,輸入file hello命令,hello文件信息如下,顯示arm可執行文件。
此時證明arm-xilinx交叉編譯工具安裝正確無誤,進入下一步。
在此之前建議,添加環境變量用於簡單表示交叉編譯庫存放路徑,每次啟動終端都需要輸入此命令
export ZYNQ_CV_BUILD=/opt/opencv/opencv-lib
使用echo $ZYNQ_CV_BUILD命令檢驗是否添加環境變量,再開始對依賴庫的編譯。
2.依賴庫的交叉編譯
對於依賴庫的編譯,都需要進行配置,當發生配置錯誤時可使用./configure --help命令查看幫助,以及閱讀相應log文件查看編譯出錯原因。切記需要按照順序編譯,並且一定注意版本一致。
(1)zlib-1.2.7
由於zlib中沒有--host選項,所以需要預先聲明cc變量
unzip zlib127.zip
cd zlib-1.2.7
export CC=arm-xilinx-linux-gnueabi-gcc
./configure --prefix=$ZYNQ_CV_BUILD --shared
make
make install
然后,可進入$ZYNQ_CV_BUILD/lib目錄下檢查是否已編譯ARM環境的zlib庫
cd $ZYNQ_CV_BUILD/lib
ls
file libz.so.1.2.7
如下圖所示,則表明成功編譯arm所需庫文件,以下依賴庫均可采用此種檢查方式,故略去。
(2)jpeg-8d
tar -xzvf jpegsrc.v8d.tar.gz
cd jpeg-8d
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared
make
make install
(3)libpng-1.5.14
libpng編譯時需要zlib庫的內容,所以需要LDFLAGS以及CFLAGS變量聲明。
tar -xzvf libpng-1.5.14.tar.gz
cd libpng-1.5.14
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi
--with-pkgconfigdir=$ZYNQ_CV_BUILD/lib/pkgconfig LDFLAGS=-L$ZYNQ_CV_BUILD/lib
CFLAGS=-I$ZYNQ_CV_INSTALL/include
make
make install
(4)x264-snapshot-20120528-2245-stable
tar -xjvf x264-snapshot-20120528-2245-stable.tar.bz2
cd x264-snapshot-20120528-2245-stable
./configure --host=arm-linux --cross-prefix=arm-xilinx-linux-gnueabi- --enable-shared --prefix=$ZYNQ_CV_BUILD
make
make install
(5)xvidcore-1.3.2
注意此處一定要禁止匯編。
tar -xzvf xvidcore-1.3.2.tar.gz
cd xvidcore/build/generic // 注意該依賴庫configure在build/generic/目錄下
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --disable-assembly
make
make install
(6)tiff-4.0.3
同理,需要添加zlib支持,因此需要聲明LDFLAGS和CFLAGS變量。
tar -xzvf tiff-4.0.3.tar.gz
cd tiff-4.0.3
./configure --prefix=$ZYNQ_CV_BUILD --host=arm-xilinx-linux-gnueabi --enable-shared
LDFLAGS=-L$ZYNQ_CV_BUILD/lib CFLAGS=-I$ZYNQ_CV_BUILD/include
make
make install
(7)ffmpeg-0.10.3
ffmpeg的配置選項較多,需要添加cflas和ldflags聲明。
tar -xjvf ffmpeg-0.10.3.tar.bz2
cd fmpeg-0.10.3
./configure --prefix=$ZYNQ_CV_BUILD --enable-shared --disable-static --enable-gpl --enable-cross-compile --arch=arm
--disable-stripping --target-os=linux --enable-libx264 --enable-libxvid --cc=arm-xilinx-linux-gnueabi-gcc --enable-swscale
--extra-cflags=-I$ZYNQ_CV_BUILD/include --extra-ldflags=-L$ZYNQ_CV_BUILD/lib --disable-asm
make
make install

3. OpenCV2.4.3交叉編譯過程
OpenCV的安裝相對容易,編譯前需要安裝cmake以及cmake-gui配置工具。其實該配置過程與windows下很相似,只是需要修改一些路徑以及選項,並制定編譯器。
sudo apt-get install cmake cmake-gui
解壓OpenCV源代碼
tar -xzvf opencv-2.4.3.tar.bz2
進入源代碼,建立build文件夾(此步驟一定需要建立一個文件夾)
cd OpenCV-2.4.3
mkdir buid
cd build
gedit toolchain.cmake
利用新建toolchain.cmake文件,並添加如下內容:
