【原創】基於ZYNQ7000的交叉編譯工具鏈Qt+OpenCV+ffmpeg等庫支持總結(一)


剛接觸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進行交叉編譯並添加相應的庫支持。依賴關系如下:

OpenCV
        |--------zlib                
        |--------jpeg
        |--------libpng
                    |--------zlib 
        |--------tiff
                    |--------zlib 
        |--------ffmpeg
                    |--------x264
                    |--------xvidcore
其實,看起來並不難, 但最難的就是這些源碼包之間的相互支持等錯綜復雜的關系,基本上就是錯一個動全身,筆者經過了幾番的嘗試,終於找到了一個在當前環境下可以成功的源碼包,其版本如下:
xilinx-arm交叉編譯工具:xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
ffmpeg源碼包:ffmpeg-0.10.3.tar.bz2
jpeg源碼包:jpegsrc.v8d.tar.gz
png源碼包:libpng-1.5.14.tar.gz
tiff源碼包:tiff-4.0.3.tar.gz
x264源碼包:x264-snapshot-20120528-2245-stable.tar.bz2
xvid源碼包:xvidcore-1.3.2.tar.gz
zlib源碼包:zlib127.zip
OpenCV源碼包:OpenCV-2.4.3.tar.bz2(筆者選用的2.4.3,但是里面有個bug在Windows下用mingw32-make編譯可能會報錯,對於這個bug官方給的建議是升級2.4.4,選用2.4.4應該也可以,可以嘗試一下,這個沒bug)
Qt第三方庫:qt-everywhere-opensource-src-4.8.5.tar.gz(筆者沒有選用最新的5.1版本,據說這個版本增加了很多功能比如傳感器等等,有興趣可嘗試)
由於其是這些庫中有些很難找,筆者直接傳到百度網盤,供下載http://pan.baidu.com/share/link?shareid=3831914682&uk=1092766566
需要注意的是版本一定要正確並且一定要按照以下的順序安裝,否則會出現各種錯誤。
 
-------------------------------------------------------------------------------------------------------------------
 
1.安裝xilinx-arm交叉編譯工具
xilinx-arm交叉編譯工具即SourceryCodeBench,該工具是專門為32位機器設計的,所以64位機器需要下載32-bit庫
sudo -s進入root權限(一定要小心,不要亂刪除文件,退出exit即可)
apt-get install ia32-libs ia32-libs-gtk
然后需要將dash更改為bash,輸入
dpkg-reconfigure dash
出現如圖所示對話框,選擇No,將dash修改為bash。
下載xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin文件,默認保存在Downloads文件夾下,保存位置任意。
輸入如下命令打開文件
cd Downloads  // 打開Downloads文件夾,根據保存文件不同,此類指令任意改變,以下略去
./xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin  // 打開bin文件,由於此時為root權限,所以可以打開任意文件否則需要使用
                                                                                         // chmod命令為文件分配權限
然后彈出如下安裝界面,一路accept和next,選擇Typical安裝以及Do not modify,安裝在默認路徑(/root/CodeSourcery下)

安裝完成后,需要導入環境變量,也可以修改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文件,並添加如下內容:

set( CMAKE_SYSTEM_NAME Linux )
set( CMAKE_SYSTEM_PROCESSOR arm )
set( CMAKE_C_COMPILER arm-xilinx-linux-gnueabi-gcc )
set( CMAKE_CXX_COMPILER arm-xilinx-linux-gnueabi-g++ )
set( CMAKE_FIND_ROOT_PATH "/opt/opencv/opencv-lib" ) ##注意此路徑與$ZYNQ_CV_BUILD路徑一致且為絕對路徑##
set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER )
set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY )
set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY )
后四行作為交叉編譯時的依賴庫的查找路徑。
然后進行cmake配置。
cmake -D TOOLCHAIN_FILE=tookchain.cmake ../
啟動cmake-gui圖形化管理工具(也可以用ccmake)
cmake-gui 
設置好源路徑($ZYNQ_CV_BUILD,/opt/opencv/opencv-lib)以及編譯路徑(OpenCV-2.4.3\build),將不支持的東西全部去掉,只在with tiff,withjpeg,with ffmpeg,with png。單擊config,出現一系列配置信息。
單擊generate生成makefile文件。

make
make install
OpenCV-2.4.3的交叉編譯全部結束,明天繼續鏡像制作以及Qt的交叉編譯。


免責聲明!

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



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