新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 有關(guān)Opencv移植和Zedboard測試的詳細(xì)介紹

有關(guān)Opencv移植和Zedboard測試的詳細(xì)介紹

作者: 時間:2018-08-03 來源:網(wǎng)絡(luò) 收藏

繼上次生成了架構(gòu)的鏈接庫之后,我們要把他們拷貝到裝載有文件系統(tǒng)的SD卡中即可,在拷貝時,最好是/usr/lib下

本文引用地址:http://2s4d.com/article/201808/385309.htm

實踐一:將那些lib拷貝到U盤里面,因為之前跑過demo,里面就是一個簡易的linux系統(tǒng),就暫且用他試試了,正常啟動后,掛載U盤,這些在之前都有做過,mount /dev/sda1 /mnt拷貝文件夾 cp -R /mnt/lib /usr/ 結(jié)果出現(xiàn)


提示空間不足,仔細(xì)發(fā)現(xiàn)問題,發(fā)現(xiàn)這個ramdisk鏡像最大只能有8M,而整個lib有10.3M,肯定會提示空間不足了,在看看/usr/lib下有哪些文件


發(fā)現(xiàn)拷貝了一些lib文件進來。這時就想到了實踐二的方法、。

疑問:然后還有一個就是書上的一句話,如果你使用的是ramdisk文件系統(tǒng),則需要在拷貝完Opencv鏈接庫之后需要重新壓縮出一個鏡像文件。(有待解決這個問題)

問題解釋:來自于rainysky,用的系統(tǒng)是SD自帶的那個精簡版的系統(tǒng),容量比較小,沒法直接將編譯的文件復(fù)制到里面,只能做一個鏡像啦。

實踐二:想利用單板機(光盤中第九章有)中的文件來實驗一下,單板機的系統(tǒng)時linaro的系統(tǒng),之前有一個sd卡已經(jīng)做好了分區(qū),在windows下只能讀出第一個分區(qū),第二個分區(qū)在windows下是讀不出來的。將BOOT.BIN,zImage,devicetree.dtb,zynq-zed-adv7511.dtb拷貝到第一個分區(qū),也就是FAT分區(qū)。將ubuntu-image.tar.gz在linux下拷貝到EXT4分區(qū),但是結(jié)果發(fā)現(xiàn)這個系統(tǒng)時不能正常啟動的,是否是因為需要PC的外設(shè)才能正常啟動??(有待驗證),現(xiàn)在只能是制作鏡像了。原來是光盤提供的BOOT.BIN文件有問題,有待實驗。

實踐三:

制作鏡像的方法:OpenCV庫:

dd if=/dev/zero of=qt_lib.img bs=1M count=80//這里的count與bs組合起來表示制作80M的鏡像,具體可以根據(jù)實際鏈接庫總的大小來設(shè)置count

mkfs.ext2 -F cv_lib.img

chmod go+w cv_lib.img

mount cv_lib.img -o loop /mnt

//cp -rf $ZYNQ_QT_INSTALL/* /mnt (看你的安裝的路徑,我的是下面的)

cp –rf /home/xzy/Opencv2.3.1/install/* /mnt

chmod go-w cv_lib.imgumount /mntZedboard

測試注意交叉編輯器編譯代碼時要用-I 和-L來指定鏈接庫的位置。等下帖過來

arm-xilinx-linux-gnueabi-g++ -I /home/xzy/OpenCV-2.3.1/install/include -I/home/xzy/OpenCV-2.3.1/install/include/opencv -L /home/xzy/OpenCV-2.3.1/install/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann ./edge_detecTIon.cpp -o ./edge_detecTIon.o

這里使用的是書上的edge_detecTIon.cpp。

直接將庫文件拷貝到sd卡就可以了,然后sd卡啟動linux之后,進行如下操作:

mount /dev/mmcblk0p1 /mnt/ //掛載sd卡其他部分的東西,

ls可以看到鏡像文件

mount /mnt/cv_lib.img /choose/a/directory/to/mount//接著下來設(shè)置動態(tài)鏈接庫的路徑,即LD_LIBRARY_PATH環(huán)境變量export LD_LIBRARY_PATH=/usr/lib 如果是這個路徑(/usr/lib)就不用了,會自己搜索。

前面都設(shè)置好了,運行的時候結(jié)果出現(xiàn)error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory,經(jīng)查證,如果用這個鏡像運行的話,會出現(xiàn)一個問題,就是在運行的時候找不到stdc++.so這個庫,因此需要先將這個庫copy到/home/xzy/opencv-2.3.1/install/lib,源文件在交叉編譯器里面,總的命令為:cp /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* /home/xzy/opencv-2.3.1/install/lib)

然后重新制作鏡像文件。至此名字叫opencv_lib.img,或者將這個庫掛載到/usr/lib目錄下也是可以的。我這里重新制作鏡像文件,搞定之后,掛載,運行./edge_detecTIon_arm lena.jpg lena_edge.jpg結(jié)果出現(xiàn)的是Segmentation fault,懷疑是圖片格式的問題,果然,換成了bmp圖像以后,./edge_detection.o ./lena.bmp ./lena_edge.bmp,出現(xiàn)的是sucessful,我就知道成功了,將生成的圖片copy到U盤,到pc機上一看 至此,opencv移植到zedboard上是成功了。




關(guān)鍵詞: Linux ARM

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉