黃曉乾 湖南交通工程職業技術學院 421001
基于嵌入式Linux的USB視頻信號采集的研究
黃曉乾 湖南交通工程職業技術學院 421001
基于ARM體系的RISC設計思想,給出了基于ARM處理器的USB攝像頭視頻播放器的設計方案。通過基于三星公司的S3C2410A作為圖像處理和中央控制芯片硬件平臺上配置嵌入式Linux操作系統,并將Linux上編譯好的視頻采集程序鏡像移植到硬件平臺上,來采集連接在USB接口上的USB攝像頭,并顯示在與S3C2410A相連接的液晶顯示器上。
embedded Linux operating system;USB camera head
隨著圖像壓縮技術的進步,特別是MPEG-I、MPEG-II圖像壓縮芯片的大量推廣應用,2000年至今,數字圖像采集產品進入了一個快速發展時期,產品也由原來的數字監控錄像主機發展到網絡攝像機、網絡傳輸設備、電話傳輸設備、專業數字硬盤錄像機等多種產品。無論是從國家戰略的高度還是從國民生產的具體需要,都需要研制新一代的視頻采集系統,而超大規模集成電路和嵌入式軟硬件技術的迅猛發展,為我們找到了一種解決問題的新思路,即研制嵌入式結構的視頻采集系統。
視頻采集系統的應用主要包括前端采集用的通用產品(有鏡頭、CCD攝像機、云臺、報警開關等)和后端的控制系統(主要包括主機控制設備、視頻采集卡、視頻壓縮卡、解碼器、總控設備和圖像采集軟件系統)。
嵌入式系統一般由嵌入式微處理器、外圍硬件設備、嵌入式操作系統以及用戶的應用程序等四個部分組成[1],如圖1所示,用于實現對其他設備的控制、監視或管理等功能。嵌入式系統的組成軟硬兼施,互利互惠,融為一體,成為產品。芯片加軟件成為產品,但要開發工具輔助進行開發。

圖1 嵌入式系統體系結構
由于嵌入式系統的高速處理特性以及在圖像信號處理中的優勢和其它方面如技術支持和設備條件等原因,選用了三星公司的S3C2410A作為圖像處理和中央控制芯片。整個硬件電路功能框圖如圖2所示。
本設計的視頻信號采集系統硬件電路,主要是要在滿足視頻信號數據時序要求嚴格、數據量大、采集速度快等特點的情況下,保證數據能夠穩定可靠的采集并實現壓縮,最后傳輸給計算機作進一步處理。

圖2 系統硬件框圖
3.1 S3C2410處理器模塊
主控制器模塊是整個系統的核心,采用的S3C2410處理器是Samsung公司基于ARM920T處理器核的16 /32位微控制器[3],該處理器最高運行頻率可達到203 MHz,它的低功耗、精簡和全靜態設計特別適合于對成本和功耗敏感的應用。S3C2410提高了豐富的片內資源,支持Linux操作系統,是本系統的合適選擇。它能完成整個系統的調度工作,在系統上電時配置所需要工作的芯片的功能寄存器,完成視頻流的編碼。
3.2 系統存儲電路模塊
主控制器還需一些外圍存儲單元,如Nand Flash和SDRAM。Nand Flash中包括Linux的Boodloader、系統內核、文件系統、應用程序以及環境變量和系統配置文件等。SDRAM是運行操作系統及各類數據的緩存。設計采用了 64M的Nand Flash和64M的SDRAM。
3. 3 外圍電路模塊
設計中還需要用到的外部設備包括USB接口、RS232接口和JTAG接口。通用串行總線(USB)設備控制器設計用DMA接口提供一個高性能完備的速率功能控制解決方案[3],視頻監控終端的USB主控制器模塊通過專用的USB集線器與USB攝像頭相連。在實時監控狀態下,各個攝像頭上捕獲的圖像數據通過USB集線器傳輸到視頻監控終端的USB主控制器模塊上,然后再由USB主控制器模塊交由S3C2410處理器集中處理。S3C2410對采集到的圖像進行實時編碼壓縮,編碼之后的碼流直接傳輸到發送緩沖區中,等候發送。
S3C2410A可以很方便地用UART實現RS232串口功能,但S3C2410A的供電電壓為1.8V/3.3V,所以I/O口的最大邏輯電平也是3.3V,要實現RS232串口功能還要加電平轉換電路,故用MAX3232來實現這一功能。
JTAG接口[4]是一個業界標準,主要用于芯片測試和配置等功能,使用IEEE Std 1149. 1 聯合邊界掃描接口引腳[5]。現在JTAG接口還常用于芯片的在線配置,對PLD、Flash 等器件進行配置。為了完成系統的調試, 任何原型系統都支持J TAG配置方式,因而J TAG配置也就成為最廣泛支持的配置方式。
嵌入式系統的軟件和硬件往往只需針對某種特別的應用定制,因此嵌入式操作系統需要量體裁衣,除去冗余,同時盡可能發揮系統的潛力。Linux具有許多優點,如開放源碼;功能強大的內核,支持多用戶、多線程、多進程、實時性好、功能強大穩定,大小功能可定制,支持多種體系結構。
嵌入式Linux的軟件設計流程如圖3所示,其中的主要內容包括:
(1)在硬件上搭建一個軟件平臺,搭建嵌入式Linux軟件開發平臺需要完成啟動程序Bootloader移植、嵌入式Linux操作系統內核移植以及嵌入式Linux操作系統的設備驅動程序的開發等工作。
(2)在軟件平臺的基礎上,開發系統的應用程序。

圖3 嵌入式Linux軟件設計流程圖
4.1 配置嵌入式Linux系統
Linux對每一個外圍的物理設備,統一抽象定義為字符設備、塊設備或者網絡接口,可以按照規范開發驅動程序,加載成一個模塊而裝入內核中,通過虛擬文件系統(VFS)等方便的管理和維護。
在Linux 2.6 內核下進行內核編譯的基本步驟如下:
(1)鍵入命令make menuconfig,對內核進行配置,選擇YAFFS文件系統,支持NFS啟動,系統使用的是USB接口的攝像頭,故要啟動USB 設備支持模塊,包括USB設備文件支持模塊、USB主控制器驅動模塊等。此外USB攝像頭屬于視頻設備,為了使應用程序能夠訪問它,還需要啟動Video4Linux2模塊。
(2)用make dep命令生成內核程序間依賴關系。
(3)Make zlmage命令生成內核映像文件。
(4)Make modules 和make modules_ install命令生成系統可加載模塊。
這樣就生成了zlmage內核映像文件,把它下載到目標平臺的flash中。
4.2 視頻采集程序開發
Linux 2.6 內核中的視頻子系統Video4Linux2為視頻應用程序提供了一套統一的應用程序編程接口 (Application Programming Interface,API)。通過Video4Linux2 API 進行編程,來實現圖像的采集流程圖如圖4所示。

圖4 采集程序流程圖
USB攝像頭采集到的視頻數據可以直接輸出到顯示器,我們通過VIDIOC_S_WIN IOCTL為視頻輸出設備設置視頻窗口的位置和大小。在VIDIOC_S_WIN IOCTL中設置的顯示窗口寬度和高度與視頻采集設備設置的VIDIOC_S_FMT IOCTL中的值一致。
本文針對USB攝像頭,通過基于ARM體系的RISC設計思想,在嵌入式Linux上調用Video4Linux2 APIs編程實現USB攝像頭視頻采集功能。由于Linux良好的移植性,且程序的主要部分是通過調用Video4Linux2 API函數實現,使得只需要對程序源代碼稍加修改,進行交叉編譯后就能移植到其他USB攝像頭的嵌入式系統中使用。該系統將圖像采集、圖像處理、圖像顯示集成在一起,實用性強,在很多領域都具有應用性(如可視電話、多媒體IP電話等手持式或便攜式圖像處理設備)和研究價值。
[1] 何加銘主編. 嵌入式32位微處理器系統設計與應用. 電子工業出版社. 2006年
[2] 楊繼華,嚴國萍. 基于嵌入式Linux與S3C2410平臺的視頻采集. 單片機與嵌入式系統應用. 2004,11:69-71
[3] 黃大勇,李鑒,張建正. 基于USB 2.0 接口的高速數據采集系統設計[J].現代電子技術.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的視頻圖像采集實現. 電腦編程技巧與維護[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系統;USB攝像頭