基于A(yíng)RM的遠程視頻監控系統的設計
1.2 USB 主設備模塊
AT91RM9200 片內集成的USB 主機端口集成一個(gè)跟集線(xiàn)器,并在下游端口集成收發(fā)器,它提供幾個(gè)半雙工高速串行通信端口,速率為12Mbit/s,最多可連接127 個(gè)USB 器件。本系統外擴一個(gè)USB 主機端口來(lái)支持USB 攝像頭的訪(fǎng)問(wèn)。
系統采用的是應用廣泛的選用羅技快看酷訊版攝像頭進(jìn)行數據采集,這種攝像頭可以實(shí)現硬件JPEG 編碼,視頻數據由攝像頭采集,一旦主控制器獲得視頻數據請求,則通過(guò)USB接口讀取其緩存的數據,并對圖像數據進(jìn)行壓縮編碼,然后基于socket 編程來(lái)發(fā)送這些壓縮后的數據到服務(wù)器。
1.3 以太網(wǎng)接口模塊
AT91RM9200 的在片以太網(wǎng)卡端口和網(wǎng)絡(luò )物理層芯片DM9161E 的MII 接口通信。片內以太網(wǎng)卡通過(guò)DMA 通道進(jìn)行數據的發(fā)送,不影響AT91RM9200 的正常運行。首先正確設置傳送控制寄存器和傳送地址寄存器的傳送數據塊字節數、數據塊存儲首地址等參數,隨后依次從指定數據存儲區地址讀取1024b 數據,送入內部發(fā)送緩沖器中,由MAC 對數據進(jìn)行封裝發(fā)送,同時(shí)記錄已傳送字節數,直到數據塊發(fā)送完畢。當發(fā)送完一組數據后,發(fā)出DMA中斷請求,由AT91RM9200 進(jìn)行相應的處理。整個(gè)網(wǎng)絡(luò )子系統電路由AT91RM9200 控制和調度。
2 嵌入式Linux 開(kāi)發(fā)環(huán)境的建立
2.1 交叉編譯鏈的建立
嵌入式開(kāi)發(fā)與普通開(kāi)發(fā)有個(gè)顯著(zhù)的不同是,普通開(kāi)發(fā)是在本機開(kāi)發(fā)、調試,本機運行,而嵌入式由于資源有限,不能直接在嵌入式目標機上運行開(kāi)發(fā)工具,因此嵌入式開(kāi)發(fā)一般采用交叉編譯方式,即在開(kāi)發(fā)主機上編譯目標機上運行的程序。交叉編譯鏈可以自己制作,也可以通過(guò)網(wǎng)絡(luò )下載別人已制作好的交叉編譯鏈直接使用。本系統所用交叉編譯鏈版本是3.4.3。
2.2 配置并編譯內核
系統選用開(kāi)源的 Linux 2.6.14 版內核作為操作系統,以交叉編譯方式編譯,即在普通PC機上運行Fedora 8 環(huán)境下,用交叉編譯鏈編譯在ARM 9 機器上運行的Linux 內核。內核用tftp 方式下載到開(kāi)發(fā)板,然后解壓自引導。具體操作如下:
(1) 給內核補丁,下載Linux2.6.14 內核源碼linux-2.6.14.tar.bz2 和AT91RM9200 補丁2.6.14-at91.patch.gz,然后:
3 視頻采集的實(shí)現
3.1 USB 攝像頭驅動(dòng)
Linux 對于視頻采集設備的支持,是通過(guò)Video4Linux(V4L)實(shí)現的,V4L 為視頻應用程序提供了一套統一的API 函數,視頻應用程序通過(guò)標準的API 接口實(shí)現與內核和驅動(dòng)的通信,實(shí)現視頻設備的各種功能。對于USB 接口攝像頭,驅動(dòng)程序實(shí)現了基本的I/O 接口函數open、close、read、write,實(shí)現了內存映射功能函數mmap 和控制函數ioctl,并對于中斷進(jìn)行了處理。
Linux 中視頻采集的實(shí)現,可以用read()函數直接讀取數據,也可以用mmap()函數通過(guò)內存映射工作。內存映射方式直接將設備地址映射到內存地址空間,使用方便,效率更高,因此本系統采用內存方式獲取視頻數據。
本系統的設備控制函數ioctl 實(shí)現的主要設備控制命令有獲得攝像頭信息VEDIOCGCAP,判斷獲取圖片是否成功VEDIOSYNC,讀取圖片相關(guān)信息VEDIOCGPIC,以及獲取圖片VEDIOGETPIC。
3.2 視頻數據采集
本系統數據采集程序也是基于 V4l 編寫(xiě)應用程序,其基本流程首先通過(guò)open 系統調用打開(kāi)攝像頭設備,如果成功則繼續通過(guò)ioctl 函數命令(參數VEDIOCGCAP)獲取攝像頭相關(guān)信息,ioctl 函數命令(VEDIOGETPIC)獲取圖像數據。
評論