本文使用的系統平臺硬件功能框圖如圖1所示,該平臺采用Samsung公司的處理器S3C2410。該處理器內部集成了ARM公司ARM920T處理器核 的32b微控制器,資源豐富,帶獨立的16kB的指令Cache和16kB數據Cache,LCD控制器、RAM控制器,NAND閃存控制器,3路 UART、4路DMA、4路帶PWM的Timer、并行I/O口、8路10位ADC、Touch Screen接口,I2C接口,I2S接口、2個USB接口控制器、2路SPI,主頻最高可達203MHz。在處理器豐富資源的基礎上,還進行了相關的配 置和擴展,平臺配置了16MB 16b的FLASH和64MB 32位的SDRAM,通過以太網控制器芯片AX88796擴展了一個網口,另外引出了一個HOST USB接口。在USB接口上外接一個帶USB口的攝像頭。另外,還配有分辨率為320×240,256色的LCD。
2 嵌入式Linux簡介
Linux操作系統具有相當多的優點,他的內核穩定、功能強大、支持多種硬件平臺、源代碼完全開放,可裁減和低成本的特性非常適合于嵌入式應用,并且 Linux本身直接提供完整的TCP/IP協議,可非常方便地進行網絡應用。但Linux內核本身不具備強實時性,且內核體積較大,而且嵌入式系統的硬件 資源有限,因此把Linux用于嵌入式系統,必須對Linux進行實時化和嵌入式化,即通過配置內核,裁減shell和嵌入式C庫對系統定制,使整個系統 能夠存放到容量較小的FLASH中,Linux的動態模塊加載,使Linux的裁減極為方便,高度模塊化的部件使添加非常容易。
整個系統軟件是在嵌入式Linux的基礎上構建的。S3C2410平臺使用的Linux內核是在Linux-2.4.18內核打上patch- 2.4.18-S3C2410這個補丁后編譯而成。S3C2410平臺使用的文件系統是yaffs,文件系統包括應用程序、模塊、配置文件和庫等,圖像的采集和顯示是建立在嵌入式Linux內核之上的,整個軟件系統如圖2所示。
通常宿主機和目標板上的處理器不同,宿主機通常為Intel處理器,而目標板如圖1所示為SAMSUNG S3C2410,所以程序需要使用針對處理器特點的編譯器才能生成在相應平臺上可運行的代碼,GNU編譯器提供這樣的功能,在編譯時,可以選擇開發所需的 宿主機和目標機,從而建立開發環境。在進行嵌入式開發前的第一步工作就是把一臺PC機作為宿主機開發機,并在其上安裝指定操作系統。對于嵌入式 Linux,宿主機PC上應安裝Linux系統。之后,在宿主機上建立交叉編譯調試的開發環境,開發環境的具體建立這里不細談。本文采用移植性很強的C語 言在宿主機上編寫視頻采集程序,再利用交叉編譯調試工具編譯鏈接生成可執行代碼,最后向目標平臺移植。
3 基于Video4Linux的圖像采集
Video4Linux是Linux中關于視頻設備的 內核驅動,他為針對視頻設備的應用程序編程提供一系列接口函數,在Linux下,視頻采集設備的正常使用依賴于對Video4 Linux標準的支持。如果使用Video4Linux,在編譯內核時,一定要選中Multimedia Devices下的Video for Linux選項,本文針對的設備文件是 / dev / video,使用的器件是基于OV511的USB攝像頭。在運行程序前,一定要先加載USB及OV511設備驅動模塊,同時加載Video4Linux模 塊,分別使用命令:modprobe usbcore,modprobe usbohci,modprobe videodev和modprobe ov511,以確保生成設備文件/dev/video,若使用的Linux操作系統不支持modprobe命令,也可使用insmod命令。一般來講,基 于Video4Linux的圖像采集的程序流程如圖3所示。
首先,必須聲明包含2個頭文件:
在獲取圖像信息后,還可根據需要改變這些信息,例如對比度、亮度、調色板等,具體做法是先給video_picture中相應變量賦新值,再利用VIDIOCSPICT ioct1函數。
第2部分,使用mmap方式的單幀圖象采集: