- 論壇徽章:
- 0
|
開發(fā)板上的arm是AT91RM9200,攝像頭選用的是網(wǎng)眼的pc350,主控芯片是ov511+。系統(tǒng)內(nèi)核是2.4,宿主機是fedora core 6,交叉編譯器是2.95.3。就是這些家底了,:-)。
一 驅(qū)動加載 ov511的驅(qū)動,2.4的內(nèi)核中就有,所以我們只需重新編譯內(nèi)核,將下邊的選項都選上,然后重新燒寫內(nèi)核就可以了。:-),也就是直接靜態(tài)加載,我喜歡一勞永逸,:-),試驗階段還是動態(tài)的好。 (1)在arm linux的kernel目錄下make menuconfig。 (2)首先(*)選擇Multimedia device->下的Video for linux。加載video4linux模塊,為視頻采集設備提供編程接口; (3)然后在usb support->目錄下(*)選擇support for usb和usb camera ov511 support。這使得在內(nèi)核中加入了對采用OV511接口芯片的USB數(shù)字攝像頭的驅(qū)動支持。 (4)保存配置退出。 (5)make dep;make zImage就生成了帶有ov511 驅(qū)動的內(nèi)核。 接下來就通過uboot將內(nèi)核燒到flash里去。這時你將攝像頭插上,系統(tǒng)就會提示發(fā)現(xiàn)攝像頭-ov511+,這說明驅(qū)動正常。:-),驅(qū)動加載就成功了,下一步就是圖像采集了。
二 圖像獲取
關(guān)于圖像采集,我用的是一個開源軟件,就是德國人做的抓圖程序:vgrabbj。
http://vgrabbj.gecius.de/ 第一步當然就是down下來,然后交叉編譯了,可是不幸的是我們的編譯器就是那個偉大的2.95.3里東東不夠多,缺少一些庫文件了(zlib,jpge,png)。所以我們首先要充實一下自己的家底,交叉編譯這三個庫文件了。 1.首先安裝 zlib 庫,這個是后面的庫的編譯基礎(chǔ)。這個是下載地址: http://www.zlib.net/zlib-1.2.3.tar.gz 400多K,去下載吧。 解壓 # tar -zxvf zlib-1.2.3.tar.gz 進入zlib-1.2.3目錄下 #cd zlib-1.2.3 配置,由于 zlib 庫的configure 腳本不支持交叉編譯選項,所以我們首先設置CC # export CC=arm-linux-gcc # ./configure --prefix=/usr/local/arm/2.95.3/arm-linux/ --shared 注意:prefix就是安裝目錄,這里配置指向 /usr/local/arm/2.95.3/arm-linux/ 目錄,就會自動安裝在 /usr/local/arm/2.95.3/arm-linux/ [include,lib] 目錄下,千萬不要裝錯目錄了,不然后面會找不到這個庫的 # make # make install 安裝完后檢查一下目錄 /usr/local/arm/2.95.3/arm-linux/ [include,lib] ,假如 include 中沒有 zlib.h 之類的頭文件,lib 中沒有 libz.so.1.2.3 ,那就自己手動拷到這些目錄下去,記著拷的時候把所有的 *.h 都需要拷過去,在拷庫的時候用 cp –a libz.* /…./lib 就行,要用上 –a 選項。這樣zlib就搞定了。 2.安裝 png 庫,這個是用來顯示 png 圖形的,下載地址: http://superb-east.dl.sourceforge.net/sourceforge/libpng/libpng-1.0.10rc1.tar.gz
# tar zxf libpng-1.0.10rc1.tar.gz # cd libpng-1.0.10rc1 Libpng 不提供有效的 configure 腳本,所以只好自己動手改 Makefile 文件了 # cp scripts/makefile.linux Makefile //把 Scripts下的一個 makefile 拷出來自己動手改 # vi Makefile // 自己動手改 CC=arm-linux-gcc //修改這里 # where "make install" puts libpng.a, libpng.so*, png.h and pngconf.h prefix=/usr/local/arm/2.95.3/arm-linux //修改這里 # Where the zlib library and include files are located #ZLIBLIB=/usr/local/lib #ZLIBINC=/usr/local/include ZLIBLIB=/usr/local/arm/2.95.3/arm-linux/lib //修改這里 ZLIBINC=/usr/local/arm/2.95.3/arm-linux/include //修改這里 好了,保存,然后去編譯吧 # make # make install 如果有錯誤,檢查你前面的步驟哪個沒做對 ,:-) 尤其是 zlib 的安裝 還是前面說的,檢查 /usr/local/arm/2.95.3/arm-linux/ [include,lib] 目錄中有成功安裝否,如果沒有安裝成功,那就自己把編譯出來的東西拷過去。記著,*.h 和 .so 的文件都要拷。
3.安裝 jpeg 庫 ,下載地址: ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz # tar -zxvf jpegsrc.v6b.tar.gz # cd jpeg-6b # ./configure --help //可以查看它的配置選項 # export CC=arm-linux-gcc # ./configure --prefix=/usr/local/arm/2.95.3/arm-linux/ --enable-shared --enable-static 然后我們需要修改一下makefile文件,因為我的系統(tǒng)的libtool好像和這個版本配合的不是很好。下邊這些地方是需要注意的,:-),尤其是libtool,如果你的也工作不好的話。 # Where to install the programs and man pages. prefix = /usr/local/arm/2.95.3/arm-linux # The name of your C compiler: CC= arm-linux-gcc # If using GNU libtool, LIBTOOL references it; if not, LIBTOOL is empty. LIBTOOL = # $(O) expands to "lo" if using libtool, plain "o" if not. # Similarly, $(A) expands to "la" or "a". O = o A = a # library (.a) file creation command AR= arm-linux-ar rc # second step in .a creation (use "touch" if not needed) AR2= arm-linux-ranlib # make 安裝前需要在 arm-linux 下建個目錄,不然安裝會出錯 # mkdir –p /usr/local/arm/2.95.3/arm-linux/man/man1 # make install // OK 了 一樣,自己去檢查一下安裝是否成功,:-),庫文件終于告一段落了。下邊到我們的主角了,vgrabbj。
4.交叉編譯vgrabbj # tar -zxvf vgrabbj-0.9.6.tar.gz # cd vgrabbj-0.9.6 # ./configure --help #export CC=arm-linux-gcc #mkdir myvgr #./configure --host=arm-linux --prefix=./myvgr --disable-ftp --disable-timestamp 去掉不需要的選項吧,多了不一定可以的,:-)。 修改makefile #vim Makefile CFLAGS = -g -O2 -Wall -I/home/linux-2.4/include 添加斜體部分,:-)。 [root@localhost vgrabbj-0.9.6]# make [root@localhost vgrabbj-0.9.6]# make install 好了,這樣你就在myvgr中有了一個vgrabbj可執(zhí)行文件,把它下到開發(fā)板上就可以采集圖像了。
5.vgrabbj的使用 vgrabbj需要兩個動態(tài)庫文件,所以首先拷貝到開發(fā)板上,:-)。如下: [root@(none) lib]$cp -a libpng.so.2 /lib [root@(none) lib]$cp -a libpng.so.2.1.0.10rc1 /lib [root@(none) lib]$cd myvgr [root@(none) myvgr]$ls bin etc lib man [root@(none) myvgr]$cd bin [root@(none) bin]$ls vgrabbj [root@(none) bin]$./vgrabbj --help Usage: vgrabbj [options] -h This screen -c parse as config file -l Daemonize & sleep (min. 1!) between images -L Daemonize & sleep between images -a Switch vgrabbj's auto brightness adjustment (default: off) You might need to set -F 4, too, if it doesn't work -q Quality setting (0-100, default: 75), JPEG only -i Sets the imagesize of input device to sqcif=128x96,qsif=160x120,qcif=176x144, sif=320x240, cif=352x288, vga=640x480, svga=800x600, xga=1024x768, sxga=1280x1024, or uxga=1600x1200 (default:352x288) -o Output format (default:jpg) -f Write to (default: /dev/stdout) -d Read from as input (default: /dev/video) Example: vgrabbj -l 5 -f /usr/local/image.jpg Would write a single jpeg-image to image.jpg approx. every five seconds [root@(none) bin]$./vgrabbj -f ./1.jpg -d /dev/v4l/video0 Could not open configfile ./myvgr/etc/vgrabbj.conf, ignoring Reading image from /dev/v4l/video0 [root@(none) bin]$./vgrabbj -f ./2.jpg -d /dev/v4l/video0 Could not open configfile ./myvgr/etc/vgrabbj.conf, ignoring Reading image from /dev/v4l/video0 你把1.jpg,2.jpg拷到宿主機上,就可以看到自己的勞動成果了,:-)。
感謝大漠孤狼,關(guān)于庫的編譯,我主要參考了他的文章。當然還有其他大俠的,:-),就不寫了。 MiniGUI 1.3.3 移植詳解 作者:大漠孤狼 E-Mail: yuqiang0107@126.com <IMG onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}" onmousewheel="return imgzoom(this);" onclick="if(!this.resized) {return true;} else {window.open('http://control.cublog.cn/fileicon/rar.gif');}" border=0 alt="" src="http://control.cublog.cn/fileicon/rar.gif" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new window\nCTRL+Mouse wheel to zoom in/out';}"> 文件: vgrabbj.rar 大小: 162KB 下載: 下載
本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u/22630/showart_324397.html
|
|