摘要:介紹了以S3C2440A為處理器,Micro2440開發板為硬件平臺,開發基于嵌入式Linux2.6.32.2操作系統的視頻采集系統。該系統以USB攝像頭為視頻獲取工具,通過V4L2 編程接口實現攝像頭捕獲視頻數據。實際運行表明,該視頻采集系統畫面顯示穩定流暢、實時性好。
關鍵詞:嵌入式Linux; S3C2440; framebuff ;視頻采集
中圖分類號:TP391 文獻標識碼:A 文章編號:2095-2163(2013)04-
A?Video?Capturing?System?based?on?Embedded?Linux
ZHAO Yani1, ZENG Haixing2 , QIAO LiPing3
(1 Tibet Nationality College, Xian yang Shanxi 712082, China;
Zhi Meida Technology Co. Ltd, Shen zhen, 518000, China)
Abstracts:?A?video?capturing?system?based?on?embedded?Linux?2.6.32.2?is?implemented?on?Micro
2440?development?board?with?the?processor?S3C2440A?.?This?system?uses?USB?camera?to?capture
?video?and?obtains?the?video?data?through?V4L2?interface.?The?experiment?results?show?that?the ?system?can?capture?the?video?efficiently?and?stably,?The?captured?video?can?be?displayed?fluently?in?real-time.?
Keywords:?Embedded?Linux; S3C2440A; Framebuff; Video?collection
0引言
隨著信息技術的高速發展,實時高品質的圖像、視頻信息已成為現時應用的迫切需求。質量優異的視頻采集系統在安防監控、工農業生產等各個領域內應用越來越普及與廣泛。基于嵌入式Linux的視頻采集在應用方面的起步并不久,但因其獨有的高品質、高智能化和高值性價比等特點而具備顯著優勢。嵌入式Linux支持TCP/IP協議,可以更好的利用網絡技術建立Client/Server工作模型來實現遠程視頻監控[1,2]。嵌入式技術必將在信息采集應用領域中發揮越來越重要的作用。本文所設計的視頻采集系統選擇三星公司推出的S3C2440A作為處理器,終端操作平臺為嵌入式 Linux 操作系統和 yaffs2文件系統,文章詳細敘述了視頻采集實現的各個具體步驟,主要內容包括交叉編譯環境搭建;基于 framebuff技術調用Video4Linux的API接口,完成實時的圖像采集等。
1 視頻采集系統總體硬件組成
視頻采集系統從功能上分為三個模塊:信號采集、處理和顯示。其中,信號采集部分采集原始視頻數據,信號處理部分則完成對信號的加工,加工后送入顯示部分,將采集到的信號在終端顯示出來。系統總體硬件組成圖[3]如圖1所示。
綜合本設計需要的視頻采集和處理的需求,選擇三星公司的S3C2440A為處理器。開發板選擇廣州友善之臂計算機科技有限公司的Micro2440。其3個串接口波特率高達 115 200bps,提供了2個LCD接口,配置一個7寸的真彩屏顯示模塊,DM9000 網卡芯片,可以自適應 10/100M 網絡。圖像采集芯片利用了中星微公司的 ZC301 視頻處理芯片。
301系列高清芯片擁有先進的影像控制技術,能實時傳遞真實畫面,圖像平滑、視覺舒適。ZC301芯片可以輸出RGB和YUV兩種圖像格式,提供USB1.1/2.0 接口,其USB帶寬占用低、不影響同時接入多個USB設備,通過該設備可直接將視頻圖像傳遞給處理器,方便快捷,對 Linux 環境有很好的支持。
2 嵌入式Linux視頻采集系統開發板軟件環境的搭建
主要介紹如何搭建開發板平臺,包括u-boot的修改和移植,內核的編譯和移植,以及根文件系統的制作和掛載等。
2.1開發宿主機環境的搭建
常用的個人計算機一般都采用windows操作系統,如果因開發將系統變換成Linux操作系統,會給其他工作帶來很大的不便,因此可以在windows環境下搭建虛擬的Linux操作系統。本開發選擇的虛擬軟件為Oracle公司的VM VirtualBox,操作系統為Ubuntu,版本是untu11.04。
為了各個平臺之間能夠方便地傳輸文件,還需要搭建一個共享的Samba服務,在搭建Ubuntu的環境以后,需要在其上安裝交叉編譯工具鏈,可選用開發板適合的符合EABI標準的交叉編譯器[4]ARM-Linux GCC 4.4.3。
2.2 u-boot的修改及燒寫
U-boot主要是在開發板上電后初始化硬件,為內核的加載完成相應準備工作。在此選用u-boot-1.2.0的版本源碼,給內核初始化傳遞必要的信息,包括板卡信息;DM9000的網卡支持;nandflash的支持和扇區修改;主頻和軟硬浮點的修改;最后選用arm-linux-gcc-3.4.1交叉編譯器編譯生成uboot.bin文件。
u-boot的燒寫臺式機用H-Flash,筆記本要用j-link調試版。文中選用了臺式機,即H-Flash。打開H-flash 選擇programing里面reset and check。修改型號:Flash Selection 選擇 S29AL016MB,Programing Type 選擇 Plain binary Format ,即運用二進制,因為已經編譯得到的是二進制文件。Dst Addr 起始地址選擇0。然后src File 中加載路徑,可以將uboot.bin進行復制存儲在d盤下,完成加載即可。結果圖2所示:
2.3 內核的裁剪
在內核源碼中修改相應的配置,裁剪編譯生成所需要的內核。
下載內核并將內核解壓到根文件系統文件夾下面,添加arm的支持,進入頂層的Makefile,搜索ARCH,修改代碼如下:ARCH?= arm,CROSS_COMPILE?= arm-linux-。其次,設Nand Flas引導,打開配置菜單進行配置,板卡選擇S3C2440 Machines ,拷貝默認的配置文件。設備驅動方面添加nandflash支持、串口支持、網卡DM9000支持。文件系統支持方面增加網絡文件系統支持、增加Jffs2文件系統的支持、虛擬文件系統的支持等,保存配置退出。修改晶振頻率和nandflash分區信息,并且使用arm-linux gcc 4.4.3編譯器編譯,同時在arch/arm/boot文件夾下生成一個uImage內核映像文件就是所需的內核。
2.4根文件系統的制作
根文件系統主要制作步驟如下:
(1)選用開源版本busybox-1.13,配置裁剪生成需要的linux系統基本工具集,拷貝放入根文件系統/bin下面。
(2)創建/dev目錄,添加兩個初始設備節點,使用mknod命令,mknod -m 660 console c 5 1和mknod -m 660 1 c 1 3。
(3)在/lib下面添加交叉編譯器的相關庫文件。
(4)在/etc下面新建inittab文件初始化文件系統的配置,在/etc/init.d/rcS中掛載所有目錄/bin/mount -a,并新建fstab文件,再寫入:none /proc defaults 0 0 //' ,即實現了proc文件系統掛載到文件目錄下面。
(5)新建mnt、tmp、proc三個文件夾。
(6)制作jffs2文件系統映像,將mkfs.jffs2拷貝到fs下面并且執行:./mkfs.jffs2 -d fs -o rootfs.img -e 0x20000 --Pad=0x1e00000 -s 0x800 -n -l -U,參數則給定了塊大小和頁大小,不加校驗,小段模式,權限設置為root,最后生成的rootfs.img就是可以使用的內核鏡像了。
最后,使用tftp簡單文件傳輸的協議,通過網線接口,將內核和文件系統燒寫到開發板。最后結果如圖3所示。
3 Video4Linux視頻采集
本設計通過調用Video4Linux提供的API來實現圖像的采集,主要流程如圖4所示。在V4L2中,視頻設備可看作一個文件,使用open函數以非阻塞模式打開視頻設備,設定屬性及采集方式;用VIDIOC_QUERYSTD來檢測當前視頻設備支持的標準(在亞洲,一般使用PAL(720X576)制式的攝像頭);設定視頻捕獲格式;完成內存分配;獲取并記錄緩存的物理空間;最后采用mmap函數進行視頻采集。
3.1 幀緩沖設備驅動的加載與卸載[5]
(1)Linux內核提供了register_framebuffer()和unregister_framebuffer()函數分別注冊和卸載幀緩沖設備,這兩個函數都接受FBI指針為參數,對于register_framebuffer()函數而言,如果注冊的幀緩沖設備超過了FB_MAX,則函數返回-ENXIO,注冊成功返回0。
(2)在幀緩沖設備驅動模塊函數加載中,應完成如下四個工作:
① 申請FBI結構體和內存空間,初始化FBI結構體中固定和可變屏幕參數,即填充FBI中的fb_var_screeninfo var 和struct fb_fix_screeninfo fix成員。
② 根據具體屏幕的特點,完成LCD控制器硬件的初始化。
③ 申請幀緩沖設備的顯示緩沖區間。
④ 注冊幀緩沖設備。
3.2視頻采集系統設計測試與結果分析
搭建NFS(網絡文件系統),在ubuntu的主機下將NFS根文件系統共享,將開發板與主機設置成同一IP段,接著使用mount命令將根文件系統掛載到開發板。在當前目錄下產生snap.jpg,如此圖像采集即已經實現。再選用友善之臂基于QT4庫的圖像系統做進一步的測試,運行測試應用程序./arm_uvccapture, 最后串口輸出結果和LCD采集到的視頻結果如圖5、圖6所示。實驗結果表明,本課題的視頻采集系統能夠較好地實時顯示清晰流暢的視頻圖像,穩定性強,其實現效果也完全可以滿足當前的視頻監控要求。
4 結束語
嵌入式 Linux 操作系統內核裁剪性好,整個系統需要高效設計,靈活配置,才能實現更高的性能。本設計采用中星微 301 攝像頭為輸入設備,S3C2440 作為處理器設計了基于嵌入式 Li nux 操作系統的視頻采集系統。系統運行穩定,顯示畫面清晰流暢,該系統可在視頻監控和可視性電話等領域應用。但視頻采集系統的研究仍有未盡之處,整個視頻采集系統只是試驗階段,調試運行均在實驗室較為理想的環境下運行的,并未投入生產實踐中;整個程序設計也只是初步階段,需要逐步優化改進。此后的研究中應進一步考慮對已獲視頻數據的存儲及遠程傳輸等問題。
參考文獻
[1]趙昌永,王勇,陳抗生,等.一種基于嵌入式Linux的視頻采集系統[J].2005,26(8):537-540.
[2] 王恒,王中訓,杜思良,等.基于ARM9的USB攝像頭圖像采集壓縮及無線傳輸[J].電視技術,2011, 35(3):29-31.
[3] 徐富新,羅 明,陳 芳,等. 基于LabVIEW的遠程測控系統視頻采集的設計與實現[J]. 計算機工程與科學, 2009,35(5):24-27.
[4] HE.Hongjiang,ZHANG Yamin. Research on automobile driving state real-timemonitoring system based on ARM[C]// Proceedings - 2009 International Conference on Computer Engineering and Technology.2009:361-364.
[5] 宋寶華. Linux設備驅動開發詳解[M].北京:人民郵電出版社,2010:441-478.
基金項目:“青年學人培育計劃”資助項目(13myQP10)。
作者簡介:趙亞妮(1976- ),女,陜西禮泉人,研究生,講師,主要研究方向:智能控制、電子技術應用等;
曾海星(1990- ),男,湖南長沙人,工程師,主要研究方向:嵌入式系統設計及底層驅動開發