郭 琦,王志剛,牛寶超,公衍雨,王憲臻
(河北工業(yè)大學 信息工程學院,天津 300400)
隨著網(wǎng)絡技術與多媒體技術的迅猛發(fā)展和普及,人們對信息產(chǎn)品的使用越來越廣泛。WiFi技術的出現(xiàn),憑借著其靈活易用、擴展能力強等優(yōu)點,已經(jīng)在金融、商業(yè)、制造業(yè)等領域有了廣泛的應用。
文中以ARM9處理器為核心,利用其體積小、功耗低、成本低、性能高的特點,與WiFi技術相結合,實現(xiàn)無線數(shù)據(jù)傳輸,本系統(tǒng)采用的是FriendlyARMmini2440開發(fā)平臺,為了滿足實時性與采集速率的的需求,視頻采集模塊使用USB攝像頭,利用Arm-Linux系統(tǒng)實現(xiàn)視頻采集。在嵌入式Linux中構建Web服務器實現(xiàn)終端顯示。
系統(tǒng)硬件部分主要包括S3C2440A核心處理器、WiFi無線模塊、LCD顯示、存儲器、USB攝像頭等部分,其硬件結構設計如圖1所示。
核心處理器才用的是三星公司推出的16/32位RISC處理器S3C2440A,S3C2440A采用了ARM920T的內核,0.13 μm的COMS標準宏單元和存儲器單元。其低功耗,簡單且全靜態(tài)設計特別適合于對成本和功率敏感型設計的應用。ARM920T實現(xiàn)了MMU,AMBA BUS和 Harvard高速緩沖體系結構,這一結構具有獨立的16 KB指令Cache和16 KB數(shù)據(jù)Cache。通過提供一套完整的通用系統(tǒng)外設,S3C2440A減少整體系統(tǒng)成本和無需配置額外的組件。
圖1 整體結構圖Fig.1 Overall structure chart
S3C2440A的片上功能主要有:外部存儲控制器(SDRAM和片選邏輯);一個LCD控制器 (最大支持4K色STN和256K色 TFT),并且提供一通道 LCD專用 DMA;4通道DMA,有外部請求引腳;3通道 UART;2通道 SPA;1通道IIC-BUS接口 (多主支持);1通道IIS-BUS音頻編解碼器接口;2端口USB主機與1端口USB設備;4通道PWM定時器和1通道內部定時器;8通道10比特ADC和觸摸屏接口;130個通用I/O口和24通道外部中斷源,還兼容SD主接口協(xié)議1.0版和MMC卡協(xié)議2.11兼容版等,并且具有普通,慢速,空閑和掉電多種模式。加強的ARM體系結構MMU用于支持WinCE,EPOC32和Linux。可以說S3C2440A的資源已經(jīng)極其豐富,以其強大的指令處理能力,使S3C2440能夠滿足多種場合的復雜需求。
本系統(tǒng)采用的視頻攝像裝置是目前應用較為廣泛的USB輸出的數(shù)字攝像頭,以OV511芯片為核心的網(wǎng)眼V2000攝像頭。網(wǎng)眼V2000使用CMOS感光元件,35萬象素,最大分辨率為640(水平)x 480(垂直)像素。內置專用的DSP芯片,可對原始視頻信號做前期壓縮編碼處理,從而減少系統(tǒng)中內存控制單元時間占用與程序編寫的工作量。
WiFi(Wireless Fidelity),俗稱無線局域網(wǎng),是由電氣電子工程協(xié)會(IEEE)802標準化委員會制定的IEEE 802.11系列標準,系統(tǒng)采用無線網(wǎng)卡是TP-Link的TL-MN321G無線網(wǎng)卡,支持標準有IEEE 802.11b和IEEE 802.11g,IEEE 802.11b最高傳輸速率為 11 Mbps,IEEE 802.11 g最高速率可達54 Mbps,在信號較弱或者有干擾的情況下,可實現(xiàn)自動調整帶寬,有效地保障了網(wǎng)絡的可靠性和穩(wěn)定性。接口類型為USB 2.0接口,覆蓋范圍在室內最遠可達100 m,室外最遠300 米,工作頻段為 2.4~2.483 5 GHz。
Linux操作系統(tǒng)具有開放性,設備獨立性,豐富的網(wǎng)絡功能,可靠的安全性以及良好的移植性等良好的特性使得Linux使用者越來越多,并且Linux源代碼開放的特點也使其本身逐漸發(fā)展壯大起來。這也是本系統(tǒng)采用Linux的主要元因。
一個完整的可執(zhí)行的Linux操作系統(tǒng)包括系統(tǒng)引導加載程序Bootloader,Linux內核,根文件系統(tǒng)。
Bootloader是系統(tǒng)加電之后運行的第一段軟件代碼。它是整個系統(tǒng)執(zhí)行的第一步,類似于PC及系統(tǒng)中的BIOS。Bootloader的主要任務就是將內核映像從硬盤上讀到RAM中,然后引導啟動操作系統(tǒng)內核,并且完成硬件檢測和資源分配工作,從而將系統(tǒng)的軟硬件設定在一個合適的狀態(tài),為最終調用操作系統(tǒng)內核,運行用戶程序準備好正確的環(huán)境。Bootloader依賴于具體的嵌入式板級設備的配置。本系統(tǒng)采用的supervivi是由友善之臂公司基于vivi改進的一個簡單易用的bootloader,具有很多實用功能:USB下載,以太網(wǎng)和豐富的設備驅動代碼等。
通過建立好的arm-linux-gcc交叉編譯環(huán)境結合S3C2440硬件電路對Linux內核代碼裁剪和編譯,得到符合本系統(tǒng)的壓縮內核映像文件zImage。本系統(tǒng)的Linux移植主要涉及到USB攝像頭驅動移植,USB無線網(wǎng)卡驅動移植等。在linux2.6.32內核源碼目錄下使用make menuconfig配置內核,需要注意的是:1)加載USB驅動,依次選擇Device Drivers->USB support-->Suport for Host-side USB S3C2440 2USB HOST;2)加載V4L驅動和攝像頭驅動,進入Multimedia device 依 次 選 擇 Video for Linux,<*>USB OV511 Camera suport;配置完成后執(zhí)行make clean命令刪除生成的模塊和目標文件;再使用make zImage命令編譯內核生成壓縮的映像文件;最后使用make moduls將模塊編譯出來。最終生成的壓縮內核映像路徑為arch/arm/boot/zImage。
根文件系統(tǒng)使用YAFFS文件系統(tǒng),通過Busybox完成文件系統(tǒng)的制作,主要完成工作有,建立文件結構框架,添加庫文件,創(chuàng)建配置文件等,最后通過mkyaffs命令生成文件系統(tǒng)的影像。
Video For Linux是Linux中關于視頻設備的內核驅動程序,是一種應用程序與視頻設備之間的一個接口函數(shù)集[2]。Linux中,視頻設備和其他許多設備一樣都是以設備文件的形式被訪問和讀寫的。V4L下的視頻軟件的實現(xiàn)流程如圖2所示。
圖2 視頻采集流程圖Fig.2 Video acquisition flow chart
V4L的驅動程序為videodev.c,其包含于內核存在的目錄drivers/media/video文件中。依賴的頭文件videodev.h在include/linux目錄下。主要用到的詩句結構有:包含攝像頭基本信息的結構體struct video_capability;包含設備采集窗口信息的struct video_windows;視頻信息通道的結構體struct video_channel;包含設備圖像采集屬性的struct video_picture;用于內存映像的struct video_mmap以及利用mmap進行映射的幀信息結構體video_mbuf等。
1)打開視頻設備使用 open()函數(shù):gqfd=open(“/dev/video”,O_RDWR);以讀寫的方式打開文件。
2)ioctl(gqfd,VIDIOCGCAP,&(vd->picture))函 數(shù) 讀 取設備的一些基本信息,包括設備名稱、支持的最大最小分辨率等。
3)video_picture中包含所采集圖像的各種分量信息,包含調色板、對比度、色度、亮度、白度、色深、顏色等信息。使用函數(shù) ioctl(gqfd,VIDIOCGPICT,&(VD->picture))得到圖像分量值信息,再使用VIDIOCSPICT為分量賦新值。
4)視頻圖像的獲取采用內存映射(mmap)的方式實現(xiàn),mmap通過把設備文件映射到系統(tǒng)內存中,用戶可以直接對設備文件訪問從而繞過內核緩沖區(qū),提高了信息讀取速度。內存映射方式的具體操作為:①先使用ioctl(gqfd,VIDIOCGMBUF,&gq_buf)函數(shù)得到攝像頭緩沖區(qū)的幀信息。
②然后修改video_mmap中的設置,即
gqvd.width=320;
gqvd.high=240;
gqvd.format=VIDEO_PALETTE_YUV420P;
③將設備文件的內容映射到內存區(qū),通過unsignedchar*gq_data=mmap (0,gq_buf.size,PROT_READ|PORT_WRITE,MAP_SHARED,gqfd,0)來操作實現(xiàn)。
④通過調用 ioctl(gqfd,VIDIECMCAPTURE,&gq_data)實現(xiàn)對內存映射區(qū)圖像數(shù)據(jù)的單幀采集。
⑤調用 ioctl(gqfd, VIDIOCSYNC, &gq_data)實現(xiàn)連續(xù)幀的采集,若調用該函數(shù)成功,側說明前一幀采集完畢,否則結束程序。
本設計采用的無線網(wǎng)卡為TP-Link的TL-MN321G,并且已經(jīng)有了在linux下針對此網(wǎng)卡的驅動代碼。下載驅動程序代碼 usb-kits-mini2440-linux-2.6.32.2.tar.gz,使用 #tar xvzf解壓。
代碼包中還包括了3個工具命令行程序:用scan-wifi可掃描附近無線網(wǎng)絡,用star-wifi可連接無線網(wǎng)絡,用stop-wifi可停止當前網(wǎng)絡連接。
當接收到USB攝像頭傳來的數(shù)據(jù)后,為了能夠使其成功的傳輸并且顯示在終端上,還需要建立一個WEB視頻服務器完成這一步工作。
WEB服務器與終端之間使用TCP/IP協(xié)議完成通信,linux中使用套接字socket進行網(wǎng)絡通信,socket是網(wǎng)絡通信應用程序之間的接口。實現(xiàn)網(wǎng)絡傳輸?shù)倪^程中,要完成套接字的創(chuàng)建、綁定、初始化服務器IP、監(jiān)聽套接字等工作。
Web服務器啟動后,客戶端便可使用了。用戶只需要通過局域網(wǎng)內的計算機使用瀏覽器即可訪問視頻服務器,觀看視頻圖像。
本設計控制系統(tǒng)以S3C2440處理器為核心,操作系統(tǒng)選用嵌入式linux系統(tǒng),系統(tǒng)通過連接攝像頭模塊,獲取圖像信息,實現(xiàn)圖像數(shù)據(jù)的采集;然后通過CPU對圖像的處理,經(jīng)過無線網(wǎng)卡上傳至局域網(wǎng),局域網(wǎng)內的計算機機可通過瀏覽器的訪問服務器。本系統(tǒng)具有成本低、便于安裝、可移動性強等優(yōu)點,方便遠端進行實時監(jiān)控,有良好的發(fā)展前景。
圖3 通信流程圖Fig.3 Communication flow chart
[1]馬資道,張正炳.基于ARM-Linux的網(wǎng)絡視頻監(jiān)控終端的軟件設計[J].軟件工程技術,2011,19(2):456-458.
MA Zi-dao,ZHANG Zheng-bing,Software design of network video monitoring terminal based on the ARM-Linux[J].Software engineering technology,2011,19(2):456-458.
[2]王娜.基于WiFi的無線遠程視頻監(jiān)控系統(tǒng)[J].安防科技,2010(1):16-18.
WANG Na.Wireless remote video monitoring system based on WiFi[J].Security Science and Technology,2010(1):16-18.
[3]Schimek M H,Verkuil H,Rubli M.Video for Linux Two API Specification Revision[E B/OL].[2010-1-15].http://v4l2spec.bytesex.org/spec/book1.htm.
[4]鄒意然,王永威,趙龍.嵌入式系統(tǒng)中USB攝像頭的圖像采集[J].微計算機信息,2010(12):24-28.
ZOU Yi-ran,WANG Yong-wei,ZHAO Long.USB camera image acquisition in embedded systems[J].Micro computer information,2010(12):24-28.
[5]淦克亮.基于ARM嵌入式的圖像采集與顯示系統(tǒng)設計[J].工業(yè)控制計算機,2011(12):10-12.
GAN Ke-liang.Image acquisition and display system design based on the ARM embedded system[J].Industrial control computer,2011(12):10-12.
[6]高美娟,李凱,田景文.基于ARM的網(wǎng)絡遠程家居視頻監(jiān)控系統(tǒng)[J].微計算機信息,2008:86-88.
GAO Mei-juan,LI Kai,TIAN Jing-wen.Network remote video monitoring system of household based on the ARM[J].Micro computer information,2008:86-88.