怎樣將Xilinx的xfOpenCV庫移植到ZedBoard平臺

HumanPlus發表於2017-07-31

xfOpenCV 是Xilinx針對Opencv做的一個加速庫,目前只在支援reVISION的ZCU102平臺上做過評估,哪假如其他平臺想要使用這個庫,我們應該怎麼做呢?下面以ZedBoard為例來細說這個過程,由於我的系統是Linux,所以這裡主要以命令列的方式來操作。

1、 正確安裝Xilinx2017.1,詳細過程這裡不再贅述

2、下載zcu102_es2_reVISION包,並解壓到相應工作目錄下,開啟命令列輸入命令:

export  SYSROOT= ${zcu102_es2_reVISION_path}/sw/aarch64-linux-gnu/sysroot  

3、下載xfOpencv庫,輸入命令: 

 git clone https://github.com/Xilinx/xfopencv.git   

4、進入xfopencv/examples目錄:cd  xfopencv/examples ,該目錄的每一個資料夾都是一個加速示例,部分如下所示:


5、進入其中一個示例,如: cd  accumulate,該目錄檔案結構如下所示:


6、修改Makefile檔案,把變數PLATFORM修改成  PLATFORM = zed  ,儲存修改

7、輸入命令:make 

如果出現“/bin/sh: 1: sds++: not found” 這個錯誤,說明沒有把sds++這個命令加入到環境變數中,手動加一下即可,如:source  ${your_xilinx2017.1_path}/sdsoc/SDx/2017.1/settings64.sh 。

如果出現“zcu102_es2_reVISION/sw/aarch64-linux-gnu/sysroot/usr/lib/crt1.o: file not recognized: 不可識別的檔案格式” 錯誤,說明平臺是不相容的,因為zcu102的arm處理器Cortex-A53,64位架構,而ZedBoard的arm處理器是Cortex-A9,32位架構,所以需要把${zcu102_es2_reVISION_path}/sw/aarch64-linux-gnu/sysroot/usr/lib/  和 ${zcu102_es2_reVISION_path}/sw/aarch64-linux-gnu/sysroot/usr/lib下所需要用到的庫換成32版本的即可。簡單做法如下:

1)cd ${zcu102_es2_reVISION_path}/sw/aarch64-linux-gnu/sysroot/

2)cp -r lib lib64 ;  cd lib

3)cp -r  {yout_xilinx2017.1_path}/sdsoc/SDx/2017.1/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/lib*  .

4)cd ../usr

5)cp -r lib lib64 ; cd lib

6)cp -r {yout_xilinx2017.1_path}/sdsoc/SDx/2017.1/SDK/gnu/aarch32/lin/gcc-arm-linux-gnueabi/arm-linux-gnueabihf/libc/usr/lib*  .

7)opencv相應的動態連結庫也是64位,因此需要手動生成32位版本的,具體做法參考 http://blog.csdn.net/luotuo44/article/details/8958990

8)將opencv重新生成32位的動態連結庫copy過來即可

做完上述修改之後重新編譯即可,有個問題需要注意的是,在Makefile檔案中,LLIBS變數指定很多連結庫(所有示例中這個變數的值都一樣,估計是為了偷懶),如“LLIBS = -lopencv_imgcodecs -lopencv_core -llzma -ltiff -lpng16 -lz -ljpeg -lopencv_imgproc -ldl -lrt -lwebp -lopencv_features2d -lopencv_flann ” ,但在本示例中“LLIBS= -lopencv_core -lopencv_imgproc -lopencv_imgcodecs -ldl ” 即可 ,這樣可以不用將其他一些不需要的庫都轉成32位的才能通過編譯。

8、將生成的sd_card的所有檔案和相關的動態連結庫拷貝到sdcard,然後進行測試。    

相關文章