黃曉乾 湖南交通工程職業(yè)技術(shù)學(xué)院 421001
基于嵌入式Linux的USB視頻信號(hào)采集的研究
黃曉乾 湖南交通工程職業(yè)技術(shù)學(xué)院 421001
基于A(yíng)RM體系的RISC設(shè)計(jì)思想,給出了基于A(yíng)RM處理器的USB攝像頭視頻播放器的設(shè)計(jì)方案。通過(guò)基于三星公司的S3C2410A作為圖像處理和中央控制芯片硬件平臺(tái)上配置嵌入式Linux操作系統(tǒng),并將Linux上編譯好的視頻采集程序鏡像移植到硬件平臺(tái)上,來(lái)采集連接在USB接口上的USB攝像頭,并顯示在與S3C2410A相連接的液晶顯示器上。
embedded Linux operating system;USB camera head
隨著圖像壓縮技術(shù)的進(jìn)步,特別是MPEG-I、MPEG-II圖像壓縮芯片的大量推廣應(yīng)用,2000年至今,數(shù)字圖像采集產(chǎn)品進(jìn)入了一個(gè)快速發(fā)展時(shí)期,產(chǎn)品也由原來(lái)的數(shù)字監(jiān)控錄像主機(jī)發(fā)展到網(wǎng)絡(luò)攝像機(jī)、網(wǎng)絡(luò)傳輸設(shè)備、電話(huà)傳輸設(shè)備、專(zhuān)業(yè)數(shù)字硬盤(pán)錄像機(jī)等多種產(chǎn)品。無(wú)論是從國(guó)家戰(zhàn)略的高度還是從國(guó)民生產(chǎn)的具體需要,都需要研制新一代的視頻采集系統(tǒng),而超大規(guī)模集成電路和嵌入式軟硬件技術(shù)的迅猛發(fā)展,為我們找到了一種解決問(wèn)題的新思路,即研制嵌入式結(jié)構(gòu)的視頻采集系統(tǒng)。
視頻采集系統(tǒng)的應(yīng)用主要包括前端采集用的通用產(chǎn)品(有鏡頭、CCD攝像機(jī)、云臺(tái)、報(bào)警開(kāi)關(guān)等)和后端的控制系統(tǒng)(主要包括主機(jī)控制設(shè)備、視頻采集卡、視頻壓縮卡、解碼器、總控設(shè)備和圖像采集軟件系統(tǒng))。
嵌入式系統(tǒng)一般由嵌入式微處理器、外圍硬件設(shè)備、嵌入式操作系統(tǒng)以及用戶(hù)的應(yīng)用程序等四個(gè)部分組成[1],如圖1所示,用于實(shí)現(xiàn)對(duì)其他設(shè)備的控制、監(jiān)視或管理等功能。嵌入式系統(tǒng)的組成軟硬兼施,互利互惠,融為一體,成為產(chǎn)品。芯片加軟件成為產(chǎn)品,但要開(kāi)發(fā)工具輔助進(jìn)行開(kāi)發(fā)。
圖1 嵌入式系統(tǒng)體系結(jié)構(gòu)
由于嵌入式系統(tǒng)的高速處理特性以及在圖像信號(hào)處理中的優(yōu)勢(shì)和其它方面如技術(shù)支持和設(shè)備條件等原因,選用了三星公司的S3C2410A作為圖像處理和中央控制芯片。整個(gè)硬件電路功能框圖如圖2所示。
本設(shè)計(jì)的視頻信號(hào)采集系統(tǒng)硬件電路,主要是要在滿(mǎn)足視頻信號(hào)數(shù)據(jù)時(shí)序要求嚴(yán)格、數(shù)據(jù)量大、采集速度快等特點(diǎn)的情況下,保證數(shù)據(jù)能夠穩(wěn)定可靠的采集并實(shí)現(xiàn)壓縮,最后傳輸給計(jì)算機(jī)作進(jìn)一步處理。
圖2 系統(tǒng)硬件框圖
3.1 S3C2410處理器模塊
主控制器模塊是整個(gè)系統(tǒng)的核心,采用的S3C2410處理器是Samsung公司基于A(yíng)RM920T處理器核的16 /32位微控制器[3],該處理器最高運(yùn)行頻率可達(dá)到203 MHz,它的低功耗、精簡(jiǎn)和全靜態(tài)設(shè)計(jì)特別適合于對(duì)成本和功耗敏感的應(yīng)用。S3C2410提高了豐富的片內(nèi)資源,支持Linux操作系統(tǒng),是本系統(tǒng)的合適選擇。它能完成整個(gè)系統(tǒng)的調(diào)度工作,在系統(tǒng)上電時(shí)配置所需要工作的芯片的功能寄存器,完成視頻流的編碼。
3.2 系統(tǒng)存儲(chǔ)電路模塊
主控制器還需一些外圍存儲(chǔ)單元,如Nand Flash和SDRAM。Nand Flash中包括Linux的Boodloader、系統(tǒng)內(nèi)核、文件系統(tǒng)、應(yīng)用程序以及環(huán)境變量和系統(tǒng)配置文件等。SDRAM是運(yùn)行操作系統(tǒng)及各類(lèi)數(shù)據(jù)的緩存。設(shè)計(jì)采用了 64M的Nand Flash和64M的SDRAM。
3. 3 外圍電路模塊
設(shè)計(jì)中還需要用到的外部設(shè)備包括USB接口、RS232接口和JTAG接口。通用串行總線(xiàn)(USB)設(shè)備控制器設(shè)計(jì)用DMA接口提供一個(gè)高性能完備的速率功能控制解決方案[3],視頻監(jiān)控終端的USB主控制器模塊通過(guò)專(zhuān)用的USB集線(xiàn)器與USB攝像頭相連。在實(shí)時(shí)監(jiān)控狀態(tài)下,各個(gè)攝像頭上捕獲的圖像數(shù)據(jù)通過(guò)USB集線(xiàn)器傳輸?shù)揭曨l監(jiān)控終端的USB主控制器模塊上,然后再由USB主控制器模塊交由S3C2410處理器集中處理。S3C2410對(duì)采集到的圖像進(jìn)行實(shí)時(shí)編碼壓縮,編碼之后的碼流直接傳輸?shù)桨l(fā)送緩沖區(qū)中,等候發(fā)送。
S3C2410A可以很方便地用UART實(shí)現(xiàn)RS232串口功能,但S3C2410A的供電電壓為1.8V/3.3V,所以I/O口的最大邏輯電平也是3.3V,要實(shí)現(xiàn)RS232串口功能還要加電平轉(zhuǎn)換電路,故用MAX3232來(lái)實(shí)現(xiàn)這一功能。
JTAG接口[4]是一個(gè)業(yè)界標(biāo)準(zhǔn),主要用于芯片測(cè)試和配置等功能,使用IEEE Std 1149. 1 聯(lián)合邊界掃描接口引腳[5]。現(xiàn)在JTAG接口還常用于芯片的在線(xiàn)配置,對(duì)PLD、Flash 等器件進(jìn)行配置。為了完成系統(tǒng)的調(diào)試, 任何原型系統(tǒng)都支持J TAG配置方式,因而J TAG配置也就成為最廣泛支持的配置方式。
嵌入式系統(tǒng)的軟件和硬件往往只需針對(duì)某種特別的應(yīng)用定制,因此嵌入式操作系統(tǒng)需要量體裁衣,除去冗余,同時(shí)盡可能發(fā)揮系統(tǒng)的潛力。Linux具有許多優(yōu)點(diǎn),如開(kāi)放源碼;功能強(qiáng)大的內(nèi)核,支持多用戶(hù)、多線(xiàn)程、多進(jìn)程、實(shí)時(shí)性好、功能強(qiáng)大穩(wěn)定,大小功能可定制,支持多種體系結(jié)構(gòu)。
嵌入式Linux的軟件設(shè)計(jì)流程如圖3所示,其中的主要內(nèi)容包括:
(1)在硬件上搭建一個(gè)軟件平臺(tái),搭建嵌入式Linux軟件開(kāi)發(fā)平臺(tái)需要完成啟動(dòng)程序Bootloader移植、嵌入式Linux操作系統(tǒng)內(nèi)核移植以及嵌入式Linux操作系統(tǒng)的設(shè)備驅(qū)動(dòng)程序的開(kāi)發(fā)等工作。
(2)在軟件平臺(tái)的基礎(chǔ)上,開(kāi)發(fā)系統(tǒng)的應(yīng)用程序。
圖3 嵌入式Linux軟件設(shè)計(jì)流程圖
4.1 配置嵌入式Linux系統(tǒng)
Linux對(duì)每一個(gè)外圍的物理設(shè)備,統(tǒng)一抽象定義為字符設(shè)備、塊設(shè)備或者網(wǎng)絡(luò)接口,可以按照規(guī)范開(kāi)發(fā)驅(qū)動(dòng)程序,加載成一個(gè)模塊而裝入內(nèi)核中,通過(guò)虛擬文件系統(tǒng)(VFS)等方便的管理和維護(hù)。
在Linux 2.6 內(nèi)核下進(jìn)行內(nèi)核編譯的基本步驟如下:
(1)鍵入命令make menuconfig,對(duì)內(nèi)核進(jìn)行配置,選擇YAFFS文件系統(tǒng),支持NFS啟動(dòng),系統(tǒng)使用的是USB接口的攝像頭,故要啟動(dòng)USB 設(shè)備支持模塊,包括USB設(shè)備文件支持模塊、USB主控制器驅(qū)動(dòng)模塊等。此外USB攝像頭屬于視頻設(shè)備,為了使應(yīng)用程序能夠訪(fǎng)問(wèn)它,還需要啟動(dòng)Video4Linux2模塊。
(2)用make dep命令生成內(nèi)核程序間依賴(lài)關(guān)系。
(3)Make zlmage命令生成內(nèi)核映像文件。
(4)Make modules 和make modules_ install命令生成系統(tǒng)可加載模塊。
這樣就生成了zlmage內(nèi)核映像文件,把它下載到目標(biāo)平臺(tái)的flash中。
4.2 視頻采集程序開(kāi)發(fā)
Linux 2.6 內(nèi)核中的視頻子系統(tǒng)Video4Linux2為視頻應(yīng)用程序提供了一套統(tǒng)一的應(yīng)用程序編程接口 (Application Programming Interface,API)。通過(guò)Video4Linux2 API 進(jìn)行編程,來(lái)實(shí)現(xiàn)圖像的采集流程圖如圖4所示。
圖4 采集程序流程圖
USB攝像頭采集到的視頻數(shù)據(jù)可以直接輸出到顯示器,我們通過(guò)VIDIOC_S_WIN IOCTL為視頻輸出設(shè)備設(shè)置視頻窗口的位置和大小。在VIDIOC_S_WIN IOCTL中設(shè)置的顯示窗口寬度和高度與視頻采集設(shè)備設(shè)置的VIDIOC_S_FMT IOCTL中的值一致。
本文針對(duì)USB攝像頭,通過(guò)基于A(yíng)RM體系的RISC設(shè)計(jì)思想,在嵌入式Linux上調(diào)用Video4Linux2 APIs編程實(shí)現(xiàn)USB攝像頭視頻采集功能。由于Linux良好的移植性,且程序的主要部分是通過(guò)調(diào)用Video4Linux2 API函數(shù)實(shí)現(xiàn),使得只需要對(duì)程序源代碼稍加修改,進(jìn)行交叉編譯后就能移植到其他USB攝像頭的嵌入式系統(tǒng)中使用。該系統(tǒng)將圖像采集、圖像處理、圖像顯示集成在一起,實(shí)用性強(qiáng),在很多領(lǐng)域都具有應(yīng)用性(如可視電話(huà)、多媒體IP電話(huà)等手持式或便攜式圖像處理設(shè)備)和研究?jī)r(jià)值。
[1] 何加銘主編. 嵌入式32位微處理器系統(tǒng)設(shè)計(jì)與應(yīng)用. 電子工業(yè)出版社. 2006年
[2] 楊繼華,嚴(yán)國(guó)萍. 基于嵌入式Linux與S3C2410平臺(tái)的視頻采集. 單片機(jī)與嵌入式系統(tǒng)應(yīng)用. 2004,11:69-71
[3] 黃大勇,李鑒,張建正. 基于USB 2.0 接口的高速數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù).2007,30 (24):69 - 72
[4] SUMSUANG ELECTRONICS.S3C2410X user’s manual[Z]. Republic of Korea: Sumsang,2003,1-160
[5] IEEE Std. 1149.1-2001 ,Test Access Port and Boundary Scan Architecture,IEEE .2001
[6] 趙永勇,張永健. 基于Video4Linux的視頻圖像采集實(shí)現(xiàn). 電腦編程技巧與維護(hù)[J].2006.5: 75-77
The RISC design concept based on ARM system gives the the ARM rocessor-based USB camera, video player design. That works as : to configure an embedded Linux operating system on a hardware platform which has Samsung's S3C2410A-based image processing and central control as the chip, and transplant Linux-compiled Video Capture program image to the hardware platform to collect USB camera head connected to the USB port, then show on the LCD screen which is connected with the S3C2410A.
嵌入式Linux系統(tǒng);USB攝像頭