有關(guān)Opencv移植和Zedboard測試的詳細介紹
繼上次生成了ARM架構的鏈接庫之后,我們要把他們拷貝到裝載有文件系統的SD卡中即可,在拷貝時(shí),最好是/usr/lib下
本文引用地址:http://dyxdggzs.com/article/201808/385309.htm實(shí)踐一:將那些lib拷貝到U盤(pán)里面,因為之前跑過(guò)demo,里面就是一個(gè)簡(jiǎn)易的linux系統,就暫且用他試試了,正常啟動(dòng)后,掛載U盤(pán),這些在之前都有做過(guò),mount /dev/sda1 /mnt拷貝文件夾 cp -R /mnt/lib /usr/ 結果出現

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

發(fā)現拷貝了一些lib文件進(jìn)來(lái)。這時(shí)就想到了實(shí)踐二的方法、。
疑問(wèn):然后還有一個(gè)就是書(shū)上的一句話(huà),如果你使用的是ramdisk文件系統,則需要在拷貝完Opencv鏈接庫之后需要重新壓縮出一個(gè)鏡像文件。(有待解決這個(gè)問(wèn)題)
問(wèn)題解釋?zhuān)簛?lái)自于rainysky,用的系統是SD自帶的那個(gè)精簡(jiǎn)版的系統,容量比較小,沒(méi)法直接將編譯的文件復制到里面,只能做一個(gè)鏡像啦。
實(shí)踐二:想利用單板機(光盤(pán)中第九章有)中的文件來(lái)實(shí)驗一下,單板機的系統時(shí)linaro的系統,之前有一個(gè)sd卡已經(jīng)做好了分區,在windows下只能讀出第一個(gè)分區,第二個(gè)分區在windows下是讀不出來(lái)的。將BOOT.BIN,zImage,devicetree.dtb,zynq-zed-adv7511.dtb拷貝到第一個(gè)分區,也就是FAT分區。將ubuntu-image.tar.gz在linux下拷貝到EXT4分區,但是結果發(fā)現這個(gè)系統時(shí)不能正常啟動(dòng)的,是否是因為需要PC的外設才能正常啟動(dòng)??(有待驗證),現在只能是制作鏡像了。原來(lái)是光盤(pán)提供的BOOT.BIN文件有問(wèn)題,有待實(shí)驗。
實(shí)踐三:
制作鏡像的方法:OpenCV庫:
dd if=/dev/zero of=qt_lib.img bs=1M count=80//這里的count與bs組合起來(lái)表示制作80M的鏡像,具體可以根據實(shí)際鏈接庫總的大小來(lái)設置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
測試注意交叉編輯器編譯代碼時(shí)要用-I 和-L來(lái)指定鏈接庫的位置。等下帖過(guò)來(lái)
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
這里使用的是書(shū)上的edge_detecTIon.cpp。
直接將庫文件拷貝到sd卡就可以了,然后sd卡啟動(dòng)linux之后,進(jìn)行如下操作:
mount /dev/mmcblk0p1 /mnt/ //掛載sd卡其他部分的東西,
ls可以看到鏡像文件
mount /mnt/cv_lib.img /choose/a/directory/to/mount//接著(zhù)下來(lái)設置動(dòng)態(tài)鏈接庫的路徑,即LD_LIBRARY_PATH環(huán)境變量export LD_LIBRARY_PATH=/usr/lib 如果是這個(gè)路徑(/usr/lib)就不用了,會(huì )自己搜索。
前面都設置好了,運行的時(shí)候結果出現error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory,經(jīng)查證,如果用這個(gè)鏡像運行的話(huà),會(huì )出現一個(gè)問(wèn)題,就是在運行的時(shí)候找不到stdc++.so這個(gè)庫,因此需要先將這個(gè)庫copy到/home/xzy/opencv-2.3.1/install/lib,源文件在交叉編譯器里面,總的命令為:cp /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* /home/xzy/opencv-2.3.1/install/lib)
然后重新制作鏡像文件。至此名字叫opencv_lib.img,或者將這個(gè)庫掛載到/usr/lib目錄下也是可以的。我這里重新制作鏡像文件,搞定之后,掛載,運行./edge_detecTIon_arm lena.jpg lena_edge.jpg結果出現的是Segmentation fault,懷疑是圖片格式的問(wèn)題,果然,換成了bmp圖像以后,./edge_detection.o ./lena.bmp ./lena_edge.bmp,出現的是sucessful,我就知道成功了,將生成的圖片copy到U盤(pán),到pc機上一看 至此,opencv移植到zedboard上是成功了。

評論