之前寫了乙個自己當時的操作流程,
偶然看到乙個當時自己移植opencv的總結,
當時用了乙個月才弄明白怎麼回事,
這裡放到這裡,
一是保留,也希望其他人能在這裡節省時間。
嵌入式arm系統中安裝
這裡使用的是opencv1.0.0版。
首先說明這裡之所以取1.0版本,
是因為當時我的編譯器是3.4.1,
我試過編譯2.0的但是不行。
後來分析了一下它的部分**,
發現裡邊有巨集定義要求4.0以上的才行。
所以以後也就都用1.0了。
下邊是操作步驟:
首先解壓檔案:tar -jxvf opencv-1.0.0
之後:opencv庫編譯
--host=arm-linux :指出交叉編譯arm平台
--without-gtk:忽略gtk+2.0 windows
--without-carbon: 不使用mac os上的x庫
--without-quicktime
--without-1394libs
--without-ffmpeg
--without-python
--without-swig
--enable-static :生成靜態庫
--disable-shared:不生成動態庫
--prefix=/usr/local/opencv :指定檔案安裝路徑
--exec-perfix=/usr/local/opencv :當前未知
cxxflags=-o2 :對編譯進行優化//在編譯時,盡量用-o2進行優化,否則容易出問題,
如果沒有用,則自己對makefile檔案,進行修改,將其優化選項改為-o2。
切記生成makefile後,修改裡邊的otherlibs,將含有他的子目錄將其刪掉。
(這裡使用o2優化我也說不好,因為檔案中預設的優化等級是o3,
開始沒有編譯成功,
後來我換成o2就成功了,
應該是裡邊有什麼地方,
沒有注意到。
)make
make install
export pkg_config_path=$pkg_config_path:/usr/local/lib/pkgconfig
之後:根據需要在/usr/local/lib/pkgconfig/opencv.pc的libs項中加入引數-lpthread、-ldl之類,
例如 libs: -l$ -lcv -lcxcore -lcvaux -lml -lpthread -ldl
(-lcv -cvaux -lml -lpthread -dl -highgui -lm)//如果遇到問題,可以先新增這幾個鏈結庫試試,
看是否好用。
如果在編譯時仍出問題,則將-lpthread -ldl直接寫在makefile檔案裡,進行連線。
同時在這裡可能沒有包含math庫,所以要自己,-lm進行連線math庫
這裡應該編譯成功,
執行時可能還會出錯,如果提示出現缺少libstdc++庫的情況,可以在arm編譯器目錄下的lib目錄中查詢,拷貝到開發板中的/lib中,保程式可以找到即可。
這樣以後,應該可以執行,如果有錯,再到網上查詢原因吧。
總結一點:
這裡有這麼多錯誤,
不過有很多是自己,
沒有好好看出錯原因而導致的無從下手更改。
還有就是,不知道錯誤原因是什麼,
雖然看到了,報錯,
卻總是不知道,錯在**,應該如何糾正。
說明自己在程式方面,還有很大的缺陷。
在出錯時,第乙個想到的不是去網上查詢,如何解決,
而是自己逐行分析,錯誤的提示,
查詢錯誤存在的位置,並分析。
這時,如果仍沒有頭緒,再上網將自己的錯誤報告貼出來,
讓大家一起分析。
這樣才知道,自己錯在**,為什麼錯,該怎樣分析這個錯誤,
錯誤的原因是什麼,怎樣改正這個錯誤。
這是在這次移植opencv1.0.0時,收穫最大的。
///run "gcc -dm -e - < /dev/null" to see a list of gcc defined symbols
檢視gcc的所有預設巨集定義
在移植完成後有些方還是要修改。
主要是canny演算法中有乙個地方在1.0中是不適合,arm中用的。
主要現象是,
在呼叫設計canny的演算法時,
影象處理後是全黑的情況。
原因是在使用cvround函式時,
返回的數值,
在pc和arm上是正好相反的。
解決方法如下:
找到vccanny中的cvround函式
typedef union cv64suf
cv64suf;
int cvround( double value )
將紅色字型部分改為return int(value + 0.5);
這樣就可以解決影象全黑的情況,
下來就可以使用opencv做自己的專案了。
所以如果是要移植2.0,或2.1以上建議使用4.0以上的編譯器。
還有在2.0.0和2.1中已經解決了上邊影象處理後全黑的**,
所以在2.0和2.1中即使移植到arm中也是不會出現,
處理影象後,影象全黑。
這個不足的是用的arm中如果沒有浮點運算單元,
程式執行起來,
會顯得有些慢,
我當時一幅影象分析完,基本得要30s,
如果有浮點運算單元,
估計速度會好好多
如果用arm做的話,建議使用單浮點運算的。
在opencv的官方**裡有好多問題的解決,
上邊的很多問題,就是在那裡解決的,
可以多去看看。
tslib移植總結
一編譯 用的是ts1.0的版本 export cc arm linux gcc export path usr local arm 2.95.3 bin path autogen.sh 為防止出現undefined reference to rpl malloc 錯誤,採取以下措施 echo ac ...
Linux Charger IC 驅動移植總結
2 電源管理 電池充電過程 總結參考文獻 通過這次移植ti的charger ic晶元到平台上,總結了以下一些內容,需要用到並且掌握的內容。在此之前我還沒有嘗試寫過核心4.0以上的驅動,對於裝置樹的配置只不過是看過語法,也並未太深入的了解。在這裡對所需要涉及到的知識點簡單做一下梳理和總結。linux中...
u boot2020 04移植(總結)
我所理解的u boot移植可以分為以下幾個部分 1 核心級的配置與初始化 這個主要就是在start.s檔案裡面那些彙編 這部分呢我覺得基本上沒有改的必要,除非你很熟悉核心相關的東西。2 soc級別的配置與初始化 這部分的內容是比較多的,而且可以說貫穿整個u boot,但基本上必要的都集中在lowle...