久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

基于ARM的視頻采集系統的設計與實現

時間:2019-05-12 23:41:08下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《基于ARM的視頻采集系統的設計與實現》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《基于ARM的視頻采集系統的設計與實現》。

第一篇:基于ARM的視頻采集系統的設計與實現

基于ARM的視頻采集系統的設計與實現

摘要

本文根據家庭視頻采集系統的要求,提出一種基于ARM的網絡視頻采集方案。方案要求視頻的實時傳輸、實時監控。本系統以Intel Xscale 芯片和嵌入式Linux系統為平臺,在平臺中搭建網絡視頻服務器,并以它為中介,負責將USB攝像頭采集到得視頻數據傳輸到網絡服務器中,最后發送到申請監控的遠程PC機中,遠程PC只需在網頁中便能實時的看到監控端的視頻圖像。

論文首先闡述了嵌入式網絡視頻采集技術的發展、現狀和前景,然后介紹了嵌入式硬件系統結構和嵌入式Linux操作系統的特點,闡述了嵌入式硬件整體結構,使大家大體的完整的對系統硬件有詳細的了解,實際記錄了嵌入式操作系統內核的編譯和移植,介紹了Bootloader的基本原理和啟動過程,實現了視頻采集程序的編譯和移植,研究了嵌入式一般驅動程序的使用。隨后,本文詳細描述了視頻采集程序的整體結構框圖和具體功能代碼塊、網絡通信編程技術、圖像編解碼、嵌入式視頻服。

關鍵詞:ARM;嵌入式;Linux;視頻采集

I

目錄

摘 要.............................................................................................................................I 第1章 引言.................................................................................................................1

1.1 課題的背景和來源..........................................................................................1 1.2本文的內容及主要工作..................................................................................1 第2章 嵌入式ARM系統硬件結構簡介..................................................................3

2.1 視頻監控系統結構簡介..................................................................................3 2.2 ARM處理器簡介.............................................................................................3 2.3 XSCALE體系結構............................................................................................4 2.4 主要硬件電路說明..........................................................................................7 第3章 嵌入式ARM系統軟件結構..........................................................................9

3.1 LINUX操作系統簡介.......................................................................................9 3.2 交叉編譯環境的建立....................................................................................10 3.3 嵌入式LINUX操作系統移植........................................................................11 3.3.1 BootLorder移植...................................................................................11 3.3.2 Linux 內核移植...................................................................................12 3.3.3 嵌入式文件系統.................................................................................13 3.4 LINUX下的程序調試.....................................................................................14 第4章 USB設備驅動程序設計...............................................................................15 4.1 設備驅動程序簡介........................................................................................15 4.2 LINUX下驅動程序的實現.............................................................................18 4.3 USB攝像頭驅動程序設計............................................................................20 第5章 視頻采集功能的設計...................................................................................23 5.1 基于V4L的編程...........................................................................................24 5.1.1 攝像頭相關數據結構.........................................................................24 5.1.2 攝像頭基本功能實現.........................................................................25 5.1.3 視頻數據采集.....................................................................................29 5.2 圖像編解碼....................................................................................................32 5.2.1 編解碼介紹.........................................................................................32 5.2.2 系統壓縮技術.....................................................................................33

第1章引言

1.1課題的背景和來源

二十一世紀的網絡化、數字化讓人們的生活每天都發生著翻天覆地的變化,獲取信息的方便和快捷可以使人們在信息化的今天領先一步創造出巨大的利益,而獲取信息的重要途徑就是眼睛。據統計,人類采集信息的80%來自視覺。圖像和視頻是對客觀事物生動、形象的描述,是一種最直觀的表現方式。而視頻監控技術因為它方便快捷、生動形象、信息豐富等特點日益受到人們的青睞,并在各行各業得到廣泛的應用。與此同時,現代網絡和數字技術的快速發展也為視頻監控技術的發展奠定了堅實的基礎。

二十一世紀,嵌入式技術、多媒體處理技術進一步發展,為視頻監控系統的發展提供了新的出路——嵌入式視頻監控系統。嵌入式系統是以應用為中心,軟硬件可以剪裁,具有高穩定、低成本、功耗低、速度快、實時好的專用計算機系統,它由嵌入式微處理器,配以周邊硬件設備,接口電路組成。嵌入式系統內部使用嵌入式操作系統,安裝專用的功能軟件。嵌入式技術把硬件和軟件集于一體,獨立工作。嵌入式視頻監控系統比其他視頻采集系統在布局區域范圍上要廣泛;由于使用IP技術,嵌入式視頻監控技術比其他視頻采集系統更具緊密的結合度,能夠充分利用現代網絡技術的成果,并能構成復雜的視頻監控網絡;性能上,嵌入式視頻采集系統繼承了嵌入式技術的優點,非常適合自動化的環境。

因此,嵌入式視頻采集技術正在我國快速的發展,積極的研究會加強我們在這方面技術的學習,也會為視頻監控技術的發展貢獻力量。

1.2本文的內容及主要工作

根據畢業設計的初衷,我們需要設計基于ARM的網絡視頻采集系統。在監控系統中,視頻采集、傳輸、播放的功能不是由專門視頻處理芯片完成,而是由軟件實現。

論文首先介紹了嵌入式ARM系統的硬件結構和軟件結構,方便大家熟悉ARM和Linux系統,包括嵌入式設備的硬件結構,邏輯框圖和Linux的基本操作、安裝方法;第二,研究了嵌入式的一些驅動程序,主要是攝像頭驅動程序

V4L,系統中選用的攝像頭芯片——中星微301;第三,研究了視頻監控的具體流程和實現方式,讓大家在總體上對整個系統有一個大概的認知。

本次設計的目的只有一個,就是實現視頻的實時監控。圍繞它,不管是硬件結構還是軟件流程,都需要學習和研究,不斷調試,決不放棄。

總之,論文的內容都是圍繞如何建立一個視頻采集系統。無論是從哪個方面,我們都是為這個目標而努力。2

第2章嵌入式ARM系統硬件結構簡介

2.1視頻監控系統結構簡介

網絡視頻監控系統是基于嵌入式技術設計的。嵌入式并沒有統一的定義,但目前有一個廣泛而又被認可的規范:將軟件產品固化到硬件平臺上,完成應有的功能既是嵌入式。

基于嵌入式ARM技術的視頻監控系統服務器端采用攝像頭不斷的采集圖像,壓縮成視頻流,然后通過網絡發送到申請監控的客戶端。監控系統的使用者可以在遠程實現網頁上的實時監控和一些簡單的功能操作。系統整體結構如圖2.1所示[1]。

LCDJTAG攝像頭ZC301CPU單元Intel Xscale以太網控制器遠程PC客戶端SDRAMFLASH

圖2.1 系統整體結構圖

該系統中CPU采用基于ARM的PXA270微處理器,通過在其上運行Linux操作系統,執行Boa視頻服務器,接受并處理來自攝像頭的圖像信號,通過以太網控制器發送至遠端,實現視頻數據的遠程傳輸和接受,達到視頻監控的目的[2]。

2.2ARM處理器簡介

ARM,既是一個公司的名字,也是對一類微處理器的通稱。ARM嵌入式微處理器是全球領先的16/32位RISK處理器芯片知識產權設計供應商ARM(AdvancedRISKMachines)公司的產品。ARM公司本身不直接從事芯片生產,而是依靠轉讓設計許可,由合作公司生產各具特色的芯片。

ARM處理器以其完整的體系結構,極小的體積、極低的功耗、極低的成本、極高的性能,及時根據嵌入對象的不同進行功能上的擴展的優勢,在眾多種類的嵌入式微處理器中脫穎而出。基于ARM技術的微處理器應用占據了32位RISC微處理器75%以上的市場份額,ARM技術正在逐步滲入到我們生活的各個方面。

采用RISC架構的ARM微處理器一般具有如下特點:

(1)采用固定長度的指令格式,指令規整、簡單、基本尋址方式有2~3種;(2)使用單周期指令,便于流水線操作執行;

(3)大量使用寄存器,數據處理指令只對寄存器進行操作,以提高指令的執行效率;

(4)所有的指令都可根據前面的執行結果決定是否被執行,從而提高指令的執行效率;

(5)可用加載/存儲指令批量傳輸數據,以提高數據的傳輸效率;(6)可在一條數據處理指令中同時完成邏輯處理和移位處理;(7)在循環處理中使用地址的自動增減來提高運行效率。

目前,ARM處理器有ARM7、ARM9、ARM9E、ARM10、ARM10E、SecurCore、StrongARM和XScale等系列。每個系列除了具有ARM體系結構的共同特點以外,都有各自的特點和應用領域。

2.3XScale體系結構

Xscale核是采用ARM V5TE架構的處理器,是Intel公司的StrongARM的升級換代產品,它具有高性能、低功耗等特點,并在流水線設計、DSP處理和指令設計中有很大改進[3]。ARM的體系結構是基于RISK的,XScale是ARM處理器的一種,所以XScale具有RISK的基本特性。而且針對嵌入式系統,XScale構架還引入了Pentium處理器工藝和系統結構技術,實現了Pentium微處理器體系結構的一系列高性能技術,達到了高性能、低功耗和小體積等嵌入式系統要求的特性。它的特點有:超流水線、高主頻、存儲體系、分支預測和指令集體系結構。本設計采用的就是基于英特爾Xscale構架的一種32位嵌入式處理器,它除了應用于掌上電腦之中外,還可以應用于智能手機、網絡存儲設備、骨干網路由器等電子設備。

PXA27x系列處理器是英特爾當前最新推出的嵌入式處理器。它的時鐘頻率從312到624MHz不等,并內建64MB的堆棧型Intel StrataFlash內存。內置了英特爾的無線MMX技術,能夠顯著提升多媒體性能。

OURS-PXA270-EP是一款基于INTEL XSCALE PXA270處理器,針對高效

嵌入式系統教學和實驗科研的平臺。這款設備主要包括核心板與底版兩個部分,核心板主要集成了高速的PXA270 CPU,配套的存儲器,網卡等設備;底版主要是各種類型的接口與擴展口。

核心板(8層PCB電路)系統包括:

CPU: INTEL PXA270(520M),支持GDB調試; SDRAM: 64M 工作在104M外頻上; FLASH: 32M INTEL Nor FLASH;Net: 10/100M Ethernet controller(LAN91C111);SUPERIO: WINBOND 83977;CPLD: XILINX 95144(117USER IO);總線驅動器: 若干;核心板正面如圖2.2所示,核心板背面如圖2.3所示。

SDRAMCPUdrvdrvCPLDdrvFLASHdrvdrvFLASHLDOdrv 圖2.2 核心板正面圖

SDRAMdrvEthernetdrvdrvdrv100PIN CONNECTORSuperIOLDO 圖2.3 核心板背面圖

底版(4層PCB電路)如圖2.4所示。包括: Ethernet: 10/100接口1個

UART: 6個(包括RS232,RS485,IRDA,全功能串口)USB1.1:2個(1個host 一個device)PS2:2個(KEYBOARD&MOUSE)標準并口:1個 PCMCIA: 1個 IDE:1個 SD/MMC: 1個 SMC:1個 CAMERA:1個 96PIN功能擴展口:2個 4X5 小鍵盤

CPU_JTAG CPLD_JTAG LED SHARP LQ080V3DG01 8寸真彩LCD

640X480 VGA 640X480 LED 8X8點陣

一組7段LED數碼管

4個

串口irda串口串口串口LCD接口LCD接口并口VGALED點陣音頻1音頻2音頻3PCMCIA 卡LED數碼管SMC 卡核心板SDPSPSUSBUSB485NET鍵盤 圖2.4 底版圖

2.4主要硬件電路說明

嵌入式設備除了以ARM芯片為主要控制單元,也有很多周邊電路和外圍設備,它們有的幫助ARM處理信號、有的負責存儲數據、有的進行網絡連接、有的用來數據通信,這些周邊設備缺一不可,不能替代。

首先介紹CPU核心總線[4],總線是CPU和其他設備的橋梁。CPU是通過總線信號來控制SDRAM ,FLASH,網卡,SUPERIO等外部設備的,無論是低速還是高速,只要是與總線相關的芯片,都要和CPU總線信號有關。其次,研究嵌入式系統內存——SDRAM。SDRAM是嵌入式系統的內存,具有單位空間存儲容量大和價格便宜的優點,已廣泛應用在各種嵌入式系統中。當系統啟動時,CPU首先從復位地址0x0處讀取啟動代碼,在完成系統的初始化后,程序代碼一般應調入SDRAM中運行,以提高系統的運行速度。同時,系統及用戶堆棧、運行數據也都放在SDRAM中。SDRAM的存儲單元可以理解為一個電容,總是傾向于放電,為避免數據丟失,必須定時刷新(充電)。因此,要在系統中使用SDRAM,就要求微處理器具有刷新控制邏輯,或在系統中另外加入刷新控制邏輯電路。PXA270芯片在片內具有獨立的SDRAM刷新控制邏輯,可方便地與SDRAM接口。除了SDRAM,FLASH也是一種存儲媒介。FLASH一般具有NOR型和NAND型。NAND型FLASH單元密度高,寫入和擦除速度非常快,而且一般NAND型FLASH的存儲容量很大。NOR型FLASH的優點是芯片內執行命令,這樣應用程序可以直接在FLASH內運行,不用進入內存,使得它的傳輸效率很高。嵌入式設備最大的優點就是網絡功能強大,它能像PC一樣方便地連接到互聯網上,這些功能都是網絡控制器的作用。也就是Ethernet Controller,本系統采用SMSC公司的單芯片的網絡控制器,LAN91C111。它可以工作在兩種速度下,10M以太網或者100M以太網。LAN91C111的工作流程是,驅動程序將要發送的數據包按指定格式寫入芯片并啟動發送命令,LAN91C111會自動把數據包轉換成物理幀格式在物理信道上傳輸;反之芯片收到物理信號后自動將其還原成數據,并按指定格式存放在芯片RAM中以便主機程序取用。就是LAN91C111完成數據包和電信號之間的相互轉換。最后,說明一下串口電路,在嵌入式視頻監控系統中,串口起到了很重要地作用,嵌入式系統啟動的信息都可以通過串口傳到PC上,極大地方便了系統的移植和軟件的調試。大多數情況下,嵌入式CPU的串口0會作為CPU的一個終端,為用戶與CPU交互提供基本的輸出輸入信息。當CPU運行BOOT代碼時,通常只有這個終端 ;運行LINUX內核時,如果有LCD顯示,串口0與LCD終端會同時有效。串口0終端的交互

方式是命令行的模式,在BOOT階段,支持簡單的BOOT命令。8

第3章嵌入式ARM系統軟件結構

3.1Linux操作系統簡介

Linux是一個類似Unix的操作系統,它起源于芬蘭一個名為LinusTorvaldS的業余愛好者,現已成為最流行的一款開放源代碼的操作系統。Linux從問世至今,短短時間內已發展成為一個功能強大、設計完善的操作系統。Linux系統不僅能夠運行于PC平臺,還在嵌入式系統方面大放光芒。由于Linux的源碼開放,內核精簡且性能強悍,不依賴于具體廠商,能廣泛適用于各種硬件設備,系統二次開發成本極低,因此在IT業界已經達成共識,即采用嵌入式Linux作為嵌入式操作系統是大勢所趨[5]。

嵌入式Linux是目前嵌入式系統領域中發展勢頭非常迅猛的系統。嵌入式Linux是指對Linux經過小型化裁剪后,能夠固化在容量只有幾百K字節或幾M字節的存儲器芯片或單片機中,應用于特定嵌入式場合的專用操作系統。目前正在開發的嵌入式系統中,49%的項目選擇嵌入式Linux作為操作系統。嵌入式Linux現已成為嵌入式操作系統的理想選擇[6]。目前基于嵌入式Linux的應用已經遍布很多領域,比如移動多媒體設備、手持設備、車載導航系統、機械控制等。嵌入式Linux分為兩種類型:在沒有使用MMU的平臺上(無內存虛實地址轉換和映射)的一般為uCLinux;而在有MMU平臺上,則使用原本地嵌入式Linux版本。由于在目前的主流嵌入式ARM中大多不具有MMU,因此只用IM左右的內核就能實現網絡功能和任務調度的Linux系統就可以適用于從高端服務器到嵌入式應用的各級平臺。ARM技術和Linux成功地結合,應用于數以千計的商業產品中。從便攜式消費品、網絡和無線設備,到自動化設備、醫療設備和存儲產品,這一應用列表與日俱增。ARM和Linux的結合充分滿足了各類應用對嵌入式平臺高性能、低功耗和低價格的要求,通過開發環境、開源社區和ARM的商業伙伴的優勢為嵌入式開發提供了更靈活的選擇。

本次設計的開發環境為redhat9.0系統,在Windows XP 下安裝虛擬機,在虛擬機中安裝Linux系統,這樣可以屏蔽底層差別,避免硬件驅動帶來的麻煩,而且還能方便的使用串口、并口、USB接口,快速的進入實驗環境。圖3.1為虛擬機下Linux系統啟動后的情況。

圖3.1 虛擬機下Linux操作系統

3.2交叉編譯環境的建立

通常嵌入式系統的軟件編譯和執行是在兩個不同平臺上進行的。編譯是在宿主機,一般為裝有Linux的pc;執行是在目標機,即嵌入式系統的硬件平臺。一般是在宿主機上通過跨平臺交叉編譯器把源文件編譯成目標平臺上可執行的文件,再通過串口、并口或者網絡下載至目標平臺上的FLASH或者其它存儲介質,然后由目標機來運行這些軟件。這里所說的跨平臺編譯器和一般的編譯器功能類似,都是把源代碼通過編譯器編譯成目標文件,然后通過鏈接器、可重定位器程序和定位器把目標文件重新定位成可執行文件。和通用的編譯器之間最大的差別就在于跨平臺編譯器編譯出來的可執行程序通常只能在特定CPU所屬平臺上運行。所以一般來說每種CPU都對應有不同的跨平臺編譯器。

本系統采用基于XScale的PXA270,可以使用常用的ARM-LINUX-GCC交叉編譯器。要成功構建完整的交叉編譯環境需要在宿主機上創建一系列的工具包括C/C++編譯器、匯編器、鏈接器、嵌入式系統的標準C庫和GDB代碼級調試器。成功建立好開發環境后便可以運用這些工具進行嵌入式系統開發[7]。

3.3嵌入式Linux操作系統移植 3.3.1BootLorder移植

BootLoader是系統加電后運行的第一段代碼。一般只是在啟動時運行很短的時間,然而對一個嵌入式系統來說,這一部分卻是整個系統的一個無比重要的組成部分,不可缺少。在一般嵌入式系統中,系統復位或者加電后通常從地址0x00000000處開始執行,而這個地址一般正是存放的BootLoader啟動代碼。通過這段程序,可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終加載操作系統內核準備好正確的環境。

BootLoader一般情況下需要包含以下幾個必備的功能 :(l)初始化處理器。這個動作都是用匯編語言完成的,稱為重置碼(resetcode)或者稱為bootcode,而且對于每個CPU都不一樣的,當電源接通后就會執行這個動作,通常只有兩三個匯編指令,目的是將CPU的控制權轉給硬件初始化的程序。

(2)初始化一些必要的硬件。這個動作也大都由匯編語言來完成,主要是初始化CPU、SDRAM等,其他的硬件,例如串口,可以由c語言等比較高級的程序語言來完成后續動作。

(3)設置處理器的寄存器以及內存,關掉所有的輸入管腳(包括中斷管腳),以防止突然有信號進入妨礙接下來的硬件初始化動作。然后初始化串口,以便后續運行的程序能夠同HOST端進行通信,便于調試。

(4)從特定的位置把操作系統和文件系統調入內存,并設置一些操作系統所必需的參數,然后把CPU控制權交給操作系統。有的BootLoader會先從串口或者網絡等其他途徑得到內核的映像文件,然后把這些文件寫入目標系統的FLASH或者其它存儲介質,最后再把內核載入RAM執行,交出控制權。

一般BootLoader都包含兩種不同的操作模式:“啟動加載”模式和“下載”模式,這種區別僅對于開發人員才有意義。從最終用戶的角度看,BootLoader的作用就是用來加載操作系統,而并不存在所謂的啟動加載模式與下載模式的區別。

(l)啟動加載(Bootloading)模式:這種模式也稱為“自主”(Autonomous)模式,即BootLoader從目標機上的某個固態存儲設備上將操作系統加載到RAM中運行,整個過程并沒有用戶的介入。這種模式是BootLoader的正常工作模式,因此在嵌入式產品發布的時候,BootLoader顯然必須工作在這種模式下。

(2)下載(Downloading)模式:在這種模式下,目標機上的BootLoader將通過串

口連接或者網絡連接等通信手段從主機(HOST)下載文件,比如下載內核映像和根文件系統映像等。從主機下載的文件通常首先被BootL0ader保存到目標機的RAM中,然后再被BootLoader寫到目標機上的FLASH類固態存儲設備中。BootLoader的這種模式通常在第一次安裝內核與根文件系統時被使用,此外,以后的系統更新也會使用BootLoader的這種工作模式。工作于這種模式下的BootLoader通常都會向它的終端用戶提供一個簡單的命令行接口。

BootLoader的實現依賴于CPU的體系結構,一般來說啟動過程分為兩個階段。

第一階段依賴于CPU體系結構的代碼,比如設備初始化代碼等,通常都放在第一階段中,而且通常都用匯編語言來實現,運行效率比較高。這個階段完成的任務一般如下:(l)硬件設備初始化(屏蔽所有的中斷、關閉處理器內部的指令/數據cache);(2)為第二階段準備RA.M空間;(3)復制BootLoader的第二階段代碼到RAM空間中;(4)設置好堆棧并跳轉到第二階段的C程序入口點。

第二階段則通常用C語言來實現,這樣可以實現復雜的功能,而且代碼會具有更好的可讀性和可移植性。這個階段主要任務有:(l)初始化本階段要使用的硬件設備;(2)檢測系統內存映射;(3)將內核映像和根文件系統從FLASH讀到RAM中;(4)為內核設置啟動參數;(5)調用內核文件運行。

本設計中的Bootloader采用Blob,Blob是Boot Loader Object的縮寫,是一款功能強大的Bootloader。Blob最初是由Jan-Derk Bakker和Erik Mouw兩人為一塊名為LART(Linux Advanced Radio Terminal)的開發板寫的,該板使用的處理器是StrongARM SA-1100,現在Blob已經被成功移植到許多基于ARM的CPU上了。本設計中的Intel Xcale就是采用Blob作為Bootloader[8]。

3.3.2Linux 內核移植

選用嵌入式Linux作為目標機操作系統,一方面由于Linux是一款免費的操作系統,能很好的降低成本,同時Linux的開發應用現在已經成為熱門,有大量的資源可用于學習與重復應用,并且Linux系統具有良好的可移植性和可裁剪性,能自動支持多任務管理。一般常用的GUI如QT/E,MiniGUI等都支持Linux。

Linux的開發工具也都可以很方便的免費獲得。

系統采用的嵌入式Linux內核為隨實驗平臺光盤中的Linux內核,它是針對這套實驗平臺所配置的Linux內核,內核版本為Linux2.4.20[9]。在實驗過程中,只需要在這個內核的基礎上進行添加和刪減所需要和不需要的功能,編譯后就可以使用了。

在編譯內核之前,需要對內核進行必要的配置,通過虛擬機進入/pxa270_linux/linux/目錄后在終端執行make menuconfig[10]命令,就可以可視化的配置內核需要的功能和要求,本次試驗,主要是針對視頻方面,選擇了對V4L的靜態加載、對spca5xx攝像頭驅動的動態加載,這樣就結束了對內核的配置。編譯內核需要創建內核依賴關系、創建內核鏡像文件和創建內核模塊。首先執行makedep命令,讀取配置過程生成的配置文件,來創建對應于配置的依賴關系樹,從而決定哪些需要編譯而哪些不需要;接著需要makeclean刪除前面步驟留下的文件,以避免出現一些錯誤;然后便可以生成所需要的內核文件了,用make zlmage來實現得到可移植的內核。內核文件通過并口下載線燒寫入開發板中,便可以通過BootLoader加載運行。

3.3.3嵌入式文件系統

嵌入式Linux操作系統一般采用FLASH作為存儲介質。FLASH具有獨特的物理特性,所以必須使用專門的嵌入式文件系統。嵌入式系統對文件的操作是通過層次結構實現的。對于用戶程序來說,文件是有結構的文件,用戶程序通過對文件IO函數操作文件。嵌入式文件系統是嵌入式操作系統的一部分,它的任務是對邏輯文件進行管理,其工作包括提供對邏輯文件的操作(復制、刪除、修改等)接口,方便用戶操作文件和目錄。在文件系統內部,根據存儲設備的特點,使用不同的文件組織模式來實現文件的邏輯結構。此外,文件系統要對管理文件的安全性負責。文件系統不能直接控制物理設備,它是通過FLASH驅動實現控制的[11]。

目前FLASH支持的文件系統技術主要有JFFS2,YAFFS2,TrueFFS,FTL/NTFL,RAMFS,CRAMFS和ROMFS等等。本系統采用的是JFFS2文件系統。

JFFS2文件系統是專門為NAND閃存設計的嵌入式文件系統,根據NAND閃存以頁面為單位存取的特點,將文件組織成固定大小的數據段。利用NAND閃存提供的每個頁面16B的備用空間來存放ECC(ErrorCorrectionCode)和文件系統的組織信息、,不僅能夠實現錯誤檢測和壞塊處理,也能夠提高文件系統的加

載速度。JFFS2采用一種多策略混合的垃圾回收算法,結合了貪心策略的高效性和隨機選擇的平均性,達到了兼顧損耗平均和系統開銷的目的。它是日志結構的文件系統,提供了損耗平衡和掉電保護,可以有效地避免意外掉電對文件系統一致性和完整性的影響。JFFS2文件系統是按層次結構設計的,分為文件系統管理層接口、JFFS2內部實現層和NAND接口層,這樣就簡化了其與系統的接口設計,可以方便地集成到系統中去。與YAFFS相比,它增加了一些功能,因此功能更強。

3.4Linux下的程序調試

調試是程序開發過程中必不可少的一個重要環節,通用PC機的程序調試與嵌入式操作系統的調試環境上有著明顯的區別,前者調試器和被調試的程序往往是運行在同一臺機器上,是相同操作系統下的兩個不同的進程,調試器通過操作系統專用調用接口控制被調試進程,后者通常為遠程調試,調試器一般運行于桌面操作系統上,而被調試的程序則運行在嵌入式系統之上,因此需要協調這兩個程序之間的通信。Linux下的調試工具非常的少,gdb是Linux下最著名的調試工具,它是GNUC自帶的調試工具,它可以使開發人員了解程序運行的詳細細節,從而消除程序的錯誤,達到調試的目的,gdb還具有遠程調試功能,可以滿足嵌入式系統調試的要求,在調試過程中PC機也稱為宿主機和嵌入式系統通過串口協議或者TCP/IP協議連接起來,遠程主機上運行被gdb規范斷點改造過的內核,當條件成立時,斷點被激活,然后等待本地宿主機的連接命令,一旦連接成功,宿主機就可以向遠程嵌入式系統發送調試命令了。在調試過程中gdb通過調試stub來完成通信功能,調試stub是嵌入式操作系統中的一小段代碼,它提供了運行gdb的宿主機和嵌入式系統進程之間交互的一個媒介。

除了使用調試器外還可以直接在程序中使用printf()或printk打印函數,這種方法功能比較弱,效率低下,但在內核模塊調試時這是唯一的方法。14

第4章USB設備驅動程序設計

4.1設備驅動程序簡介

Linux系統中,設備驅動程序扮演著特殊的角色。它就像一個獨立的黑盒子一樣,使某個特定的硬件可以相應一個定義良好的內部編程接口并且完成隱藏設備的作用。用戶只需調用一組標準化的函數完成操作,而且這些操作與特定的驅動程序無關。驅動程序的任務就是將這些函數映射到作用硬件的具體操作上。這樣的模塊化的驅動程序結構使得Linux系統中的驅動程序可以獨立于內核的其他部分,可以在需要使用的時候將驅動“插入”內核。

從系統運行順序來看,硬件平臺啟動運行Linux后,啟用了MMU單元即內存管理單元,在這種模式下系統不能直接對物理地址進行訪問。若要對某一硬件外設進行讀寫,需要通過內核調用該硬件的驅動來實現。

上面已經說過,驅動程序的作用在于向應用程序提供訪問硬件設備的接口,驅動程序屏蔽了硬件實現上的細節操作,于是應用程序可以像操作普通文件一樣對硬件設備進行操作。Linux以模塊的形式加載設備類型,通常是一個模塊對應實現一個設備驅動。模塊是內核的一部分,它們沒有被編譯到內核中,而是分別被編譯并鏈接成一組目標文件。可以根據用戶的需要在不需要對內核進行重新編譯的情況下動態載入正在運行的內核,或從正在運行的內核中卸載。利用這種機制,內核尺寸可以保持在最小,并具有最大的靈活性,也便于檢驗新的內核代碼,而不需要重新編譯內核并重新引導。設備驅動程序一般需要完成以下功能:(l)對設備初始化和釋放;(2)把數據從內核傳送到硬件和從硬件讀取數據;(3)讀取應用程序傳送給設備文件的數據和回送應用程序的請求數據;(4)檢測和處理設備出現的錯誤。

在Linux操作系統下有兩類主要設備文件類型:塊設備、字符設備。用戶進程正是通過設備文件來與硬件打交道。每個設備文件都有其文件屬性,表示是字符設備還是塊設備。另外每個文件都有2個設備號,第一個是主設備號,標識驅動程序;第二個是從設備號,標識使用同一個設備驅動程序的不同硬件設備。設備文件的主設備號必須與設備驅動程序在登記時申請的設備號一致,否則用戶進程將無法訪問驅動程序。

Linux驅動程序可以分為三個主要部分: 15

(l)自動配置和初始化子程序,負責檢測所要驅動的硬件設備是否存在和能否正常工作。如果該設備正常,則對這個設備及其他必需的條件位口中斷、DMA通道)進行申一請并初始化。這部分驅動程序僅在初始化時被調用一次。

(2)服務于I/O請求的子程序,又稱為驅動程序的上半部分。調用這部分程序是由于系統調用的結果。這部分程序在執行時,系統仍認為是與進行調用的進程屬于同一個進程,只是由用戶態變成了核心態,但仍具有進行此系統調用的用戶程序的運行環境,因而可以在其中調用與進程運行環境相關的函數。

(3)中斷服務子程序,又稱為驅動程序的下半部分。在Linux操作系統中,并不是直接從中斷向量表中調用設備驅動程序的中斷服務子程序,而是由Linux系統來接收硬件中斷,再由系統調用中斷服務子程序。中斷可以在任何一個進程運行時產生,因而在中斷服務子程序被調用時,不能依賴于任何進程的狀態,也就不能調用任何與進程運行環境有關的函數。因為設備驅動程序一般支持同一類型的若干設備,所以一般在系統調用中斷服務子程序時,都帶有一個或多個參數,以唯一標識請求服務的設備。

在系統內部,I/O設備的存取通過設備驅動程序提供的一組固定的入口點來進行,這組入口點在驅動程序初始化時向系統進行登記,以便在系統適當的時候調用。一般來說,字符型設備驅動程序能夠提供如下幾個入口點:(1)open入口點:打開設備準備I/O操作,對字符特別設備進行打開操作,都會調用設備的open入口點。open子程序必須對將要進行的I/O操作做好必要的準備工作,如清除緩沖區等。如果設備是獨占的,即同一時刻只能有一個程序訪問此設備,則open子程序必須設置一些標志以表示設備的狀態。

(2)close入口點:關閉一個設備,當最后一次使用設備結束后,調用dose子程序。獨占設備必須標記設備可再次使用。

(3)read入口點:讀取設備,對于有緩沖區的I/0操作,一般從緩沖區里讀取設備數據。

(4)write入口點:向設備寫數據,對于有緩沖區的I/O操作,一般向緩沖區里寫入數據。

(5)ioctl入口點:執行讀寫之外的操作。

USB(Universal Serial Bus)即“通用串行外部總線”,用途廣泛,可以外接硬盤、鍵盤、鼠標、打印機等多種設備,USB能夠使用盡可能少的接口支持盡可能多的外設,尤為適合在嵌入式設備中使用,是嵌入式接口標準的一個很好的選擇。

USB總線規范有1.1版和2.0版。USB1.1支持兩種傳輸速率:低速1.5Mbit/s、全速12Mbit/s,這樣的速率完全滿足鼠標、鍵盤、CD-ROM等設備,但是在嵌入式視頻監控系統中,這樣的速度還是很慢。所以,USB2.0提供了一種更好的傳輸速率:高速,它可以達到480Mbit/s。USB2.0向下兼容USB1.1,可以將遵循USB1.1規范的設備連接到USB2.0控制器上,也可以把USB2.0的設備鏈接到USB1.1控制器上。

USB總線的硬件拓撲結構[12]如圖4.1所示。

USB主機控制器USB設備根集線器USB設備USB設備集線器USB設備集線器USB設備集線器USB設備USB設備USB設備USB設備 圖4.1 USB總線硬件拓撲圖

USB主機控制器通過根集線器與其他USB設備相連。集線器也屬于USB設備,通過它可以在一個USB接口上擴展出多個接口。除根集線器外,最多可以層疊5個集線器,每條USB電纜的最大長度是5m,所以USB總線的最大距離為30m。一條USB總線上可以外接127個設備,包括根集線器和其他集線器。整個結構圖是一個星狀結構,一條USB總線上所有設備共享一條通往主機的數據通道,同一時刻只能有一個設備與主機通信。

通過USB主機控制器來管理外接的USB設備,USB主機控制器共分3種:UHCI、OHCI和EHCI。在配置Linux內核的時候,看到的“HCD”字樣表示“Host Controller Drivers”,即主機控制器驅動程序。

USB驅動程序分為兩類:USB主機控制器驅動程序(Host Controller Drivers)、USB設備驅動程序(USB device drivers)。它們在內核中的層次如圖4.2所示。

UserUSB Device DriversUSB Host Controller DriversHardware 圖4.2 USB驅動程序層次結構

在試驗中,教學平臺上的Linux嵌入式內核已經配置了USB主機控制器驅動程序,只需要添加需要的USB設備驅動程序,就能實現USB設備的正常使用。

4.2Linux下驅動程序的實現

Linux操作系統下對硬件設備進行驅動開發的一般步驟如下:(l)注冊設備

在系統啟動時或者在模塊加載的時候需要將設備和重要的數據結構登記到內核的設備數組中,并確定該設備的主次設備號。在Linux系統中,對于字符設備一般通過調用register_chrdev向系統注冊設備驅動程序,register_chrdev在fs/deviees.c文件中的定義如下:int register_chrdev(unsigned int major,const char*name,struct file_operations fops)定義中的major是設備驅動程序向系統申請的主設備號,如果major為O,則系統為該驅動程序動態的分配一個主設備號,不過此設備號是臨時的;name是設備名:fops是各個調用入口點的說明。函數返回O表示注冊成功,返回-INVAL表示申請的主設備號非法,返回-EBUSY表示申請的主設備號正在被其它設備驅動程序使用。

以后對設備驅動程序的file_operations的操作都可以通過該主設備號的索引來完成。register_chrdev函數操作成功后,設備名便出現在/proc/devices文件目錄中,使用命令cat/proc/devices可以查看設備的工作狀態。

(2)定義操作集

驅動程序中要通過一系列函數完成對設備的不同操作,這些操作在面向對象編程術語中也稱為方法,該操作集通過數據結構file_operations實現。內核內部通過file結構識別設備,通過file_operations數據結構提供的文件系統的入口點函數訪問設備。

file_operations定義在中的函數指針表: struct file_operations { struct module*owner;loff_t(*llseek)(struct file*, loff_t, int);ssize_t(*read)(struct file*, size_t, loff_t*);ssize_t(*write)(struct file*, const char*, size_t, loff_t*);int(*readdir)(struct file*, void*, filldir_t*);unsigned int(*poll)(struct file*, struct poll_table_struct*);int(*ioctl)(struct inode*, struct file*, unsigned int, unsigned long);int(*mmap)(struct file*, struct vm_area_struct*);int(*open)(struct inode*, struct file*);int(*flush)(struct file*);

int(*release)(struct inode*, struct file*);int(*fsync)(struct file*, struct dentry*, int datasync);int(*fsyne)(int, struct file*, int);int(*lock)(struct file*,int, struct file_lock*);ssize_t(*readv)(struct file*, const struct iovec*, unsigned long, loff_t*);ssize_t(*writev)(struct file*, const struct iovec*, unsigned long, loff_t*);ssize_t(*sendpage)(struct file*, struct page*, int, size_t, loff_t*, int);unsigned long(*get_unmapped_area)(struct file*, unsigned long, unsigned long,unsigned long, unsigned long);}

這個結構的每一個成員的名字對應一個系統調用,在用戶程序利用系統調用對設備文件進行諸如讀/寫操作時,系統調用會通過設備文件的主設備號找到相應的驅動程序,然后讀取這個數據結構的相應函數指針,把控制權交給該函數。對于具體的設備驅動并不需要實現結構中所有的例程,只要完成設備功能就可以了。例如對于一個常見的字符設備驅動來說,可能只有操作open(),write(),read(),ioctl()和close(),當用戶程序通過系統調用訪問設備時,最終要通過這些操作集來完成。

(3)卸載模塊

當不再需要使用一個模塊或設備時,需要將其從內核中卸載下來,這時會動態調用模塊中的module_exit()函數,并需要在該函數中調用modul_unregister_chrdev()或module_unregister_blkdev()釋放掛入內核的數據結構同時釋放該設備號。

4.3USB攝像頭驅動程序設計

攝像頭屬于視頻設備,在Linux內核中,VideoforLinux(簡稱V4L)是關于視頻設備的驅動標準。這個標準為應用程序定義了一系列的接口函數,內核、驅動和應用程序都是依靠這個標準來進行交流。本系統所使用的USB攝像頭正是基于該標準來編寫驅動和應用程序的。

Linux內核是依據設備號來操作設備文件的,在內核中,攝像頭對應的設備文件名為/dev/video0,主設備號是81,次設備號根據攝像頭數目來確定,本系統中僅使用一個攝像頭,所以可以通過mknod/dev/video0 c 81 0來創建節點。USB攝像頭驅動程序實現原理如圖4.3所示。

USB攝像頭的驅動和通用設備的驅動準則一樣,但需要與內核提供的視頻驅動掛鉤。即首先在驅動中聲明一個 video_device結構,并為其指定文件操作函數指針數組fops,向系統注冊。在應用程序發出文件操作的相關命令時,核心根據這些指針調用相應函數,并將該結構作為參數傳遞給它們。這樣,就完成了驅動和核心之間的通信。

例如: Static struct video_devie vdev_template={……};

聲明 video_deviee,指出掛接驅動

用戶進程系統調用攝像頭驅動文件操作接口接收緩沖區發送緩沖區中斷服務程序攝像頭 圖4.3 攝像頭驅動實現框圖

Static Struct file_operation spcasxx_fops= {……};

聲明本驅動的文件操作函數指針 Struct video_device*vdev=video_devdata(file);從文件指針中提取出 video_deviee結構

在video_deviee結構中,有一個私有指針priv,可以將它指向一塊保留內存。在這塊內存中,保存著本驅動、本設備的相關初始化信息。這塊內存的申請、初始化、指針指向等工作都是在USB驅動的枚舉函數probe中完成。這樣,在枚舉函數將控制權返還給系統后,因為內核不銷毀保留內存,所以驅動仍然保留著自己的信息。在驅動卸載函數中需要將申請的各塊內存全部釋放。

Linux系統中任何USB傳輸都通過URB實現。為提高速度,可以考慮擴大URB的緩沖,這樣可以降低每個USB事務中握手信息所占比例,提高有效數據的輸速度。但是受限于總線帶寬和具體的USB設備芯片,單純擴大URB的緩沖不能無限制地解決問題。USB在操作系統中每次傳輸都要包括URB的建立、發出、回收、數據整理等階段,這些時間不產生有效數據。因此可以建立兩個URB,在等待一個URB被回收時,也就是圖像正在被傳感器采集時,處理、初始化另一個URB,并在回收后立刻將其發出。兩個URB交替使用,大大減少了額外時間。

由于嵌入式平臺上運行的Linux2.4.20內核,內部已經集成了對USB2.0的支持,所以無需移植相應的USB驅動。

在設計中,攝像頭芯片采用中星微的Z301系列芯片,Linux2.4內核并不支持這種芯片,所以我們通過移植芯片驅動程序來達到目的。芯片的驅動程序是spca5**系列,如果不重新編譯內核的話,將驅動程序動態加載就可以正常使用。設計中動態加載的命令使用insmod命令,它和modprobe命令在使用上有所不同,modprobe在加載模塊時不用指定模塊文件的絕對路徑,也不用帶模塊文件的后綴.o或.ko;而insmod需要的是模塊的所在目錄的絕對路徑,并且一定要帶有模塊文件名后綴的.o或者.ko。但是在功能上,它們所達到的效果基本相同[13]。22

第5章視頻采集功能的設計

視頻采集程序是基于V4L開發的,包括攝像頭的初始化、打開/關閉、參數設置和數據讀取等操作,視頻采集程序流程圖如圖5.1所示[14]。

開始初始化攝像頭init_videoIn()打開攝像頭open_v4l()獲取攝像頭參數icotl(int->vd,int cmd,..)設置攝像頭參數ioctl()獲取一幀圖像N一幀是否截取完畢Y存儲并準備傳輸N是否終止視頻采集Y關閉攝像頭終止 圖5.1 視頻采集程序流程圖

5.1基于V4L的編程 5.1.1攝像頭相關數據結構

攝像頭的組成部分是傳感器、DSP、鏡頭、外殼、USB連線、電路板和周邊電路構成,其中最重要的是傳感器和DSP(數字信號處理器)。本系統選用的攝像頭采用了CMOS傳感器和中星微301處理器。

V4L[15]提供了一系列的接口應用程序,可以利用這些程序實現對攝像頭的調用,其中有read、open、ioctl等。V4l同時將這些函數和參數封裝成一個數據結構vdIn。struct vdIn {

int fd;char *videodevice;struct video_mmap vmmap;struct video_capability videocap;int mmapsize;struct video_mbuf videombuf;struct video_picture videopict;struct video_window videowin;struct video_channel videochan;struct video_param videoparam;

int cameratype;char *cameraname;char bridge[9];int sizenative;int sizeothers;int palette;int norme;int channel;int grabMethod;unsigned char *pFramebuffer;unsigned char *ptframe [4];

};int framelock [4];pthread_mutex_t grabmutex;int framesizeIn;volatile int frame_cour;int bppIn;int hdrwidth;int hdrheight;int formatIn;int signalquit;

int fd :打開攝像頭時,open函數返回的文件描述符,其他函數使用這個描述符對攝像頭進行操作。

struct video_mmap vmmap: 用于內存映射的結構體。

struct video_capability videocap :描述攝像頭基本信息,如設備名稱、支持的最大分辨率、信號源信息、信道數等。

struct video_mbuf videombuf :在進行內存映射時讀取幀的信息,實際上是輸入到攝像頭存儲緩存中的幀信息。

struct video_picture videopict :攝像頭采集圖像的屬性,如亮度、色調、對比度、色度、深度等。

struct video_window videowin :表示采集窗口參數,如分辨率等。struct video_channal videochan :關于信號源的屬性。

5.1.2攝像頭基本功能實現

(1)初始化攝像頭參數

在對攝像頭進行操作之前,要對攝像頭進行初始化,即對vdIn這個結構進行初始化。使用init_videoIn 函數。

int init_videoIn(struct vdIn *vd, char *device, int width, int height, int format, int grabmethod){

int err =-1;int i;if(vd == NULL || device == NULL)return-1;

} if(width == 0 || height == 0)return-1;grabmethod = 1;//read by default;if(grab method < 0 || grabmethod > 1)// check format

vd->videodevice = NULL;vd->cameraname = NULL;vd->videodevice = NULL;vd->videodevice =(char *)realloc(vd->videodevice, 16);vd->cameraname =(char *)realloc(vd->cameraname, 32);snprintf(vd->videodevice, 12, “%s”, device);if(debug)printf(“video %s n”,vd->videodevice);memset(vd->cameraname, 0, sizeof(vd->cameraname));memset(vd->bridge, 0, sizeof(vd->bridge));vd->signalquit = 1;vd->hdrwidth = width;vd->hdrheight = height;vd->formatIn = format;

vd->bppIn = GetDepth(vd->formatIn);vd->grabMethod = grabmethod;vd->pFramebuffer = NULL;err = init_v4l(vd);for(i = 0;i < OUTFRMNUMB;i++){

} vd->frame_cour = 0;pthread_mutex_init(&vd->grabmutex, NULL);return err;vd->ptframe[i] = NULL;(unsigned char *)realloc(vd->ptframe[i], sizeof(struct frame_t)+(size_t)vd->framelock[i] = 0;vd->framesizeIn);

(2)打開攝像頭

在Linux中,類似攝像頭的設備是作為文件來看待的,叫做設備文件。我們可以使用open函數來對設備進行打開操作,open帶有兩個參數,第一個為設備文件名稱,本實驗的攝像頭設備名稱是/dev/video0,第二個則是打開的類型。

在使用open函數打開攝像頭之前,要判斷是否有攝像頭設備,即檢查參數videodevice是否為空。Open函數執行結束后會返回攝像頭的文件描述符,如果返回值為-1,則說明打開設備出錯。

int open_v4l(char *vd->videodevice){

if(!vd->videodevice){

printf(“No device file, ERROR opening V4L interface”);

return-1;}

if((vd->fd=open(vd->videodevice, O_RDWR))==-1){

printf(“ERROR opening V4L interface”);

return-1;} return vd->fd;}(3)獲取攝像頭參數

成功打開攝像頭后,需要獲取攝像頭的一些參數,利用ioctl函數控制I/O通道來實現。Ioctl函數的使用是ioctl(int->fd, int cmd,……),fd代表文件描述符,cmd表示用戶對設備的控制命令,第三個參數是一個其他的參數。其中,cmd包括VIDIOCGCAP(獲得video_capbility中有關攝像頭的信息)、VIDIOCGPICT(獲取圖像信息)、VIDIOCSPICT(改變圖像信息)、VIDIOCGMBUF(獲取攝像頭存儲緩沖區幀信息)、VIDIOCAMCAPTURE(獲取視頻圖像)、VIDIOSYNC(判斷攝像頭是否截取成功)等。

讀取video_capability中有關攝像頭的信息

if(ioctl(vd->fd, VIDIOCGCAP, &(vd->videocap))==-1){ printf(“Fail to get video_capability!/n”);return-1;} 讀取video_picture中的圖像信息 printf(“Fail to get video_picture!/n”);return-1;} if(ioctl(vd->fd, VIDIOCGPICT, &(vd->videopict))==-1){

讀取video_window信息

if(ioctl(vd->fd,VIDIOCGWIN,&(vd->videowin))==-1){

printf(“Fail to get video_window!/n”);

return-1;}(4)設置攝像頭參數

在對攝像頭參數進行設置的時候,應該按照以下步驟:比如更改圖像信息,首先,先給video_picture結構中所要修改的變量賦值,如vd->videopict.palette=vd->formaIn;vd->videopict.depth=GetDepth(vd->formatIn);然后通過ioctl函數的VIDIOCSPICT來設置,如if(ioctl(vd->fd,VIDIOCSPICT,&(vd->videopict))<0){ printf(Fail to set videopict params with VIDIOCSPICT!/n“);return-1;} 在設置好了之后可以通過VIDIOCGPICT命令來查詢圖像信息設置是否成功。(5)關閉攝像頭

在Linux編程過程中,必須養成一個好的編程習慣,就是在開啟一個設備后一定要關閉它,這樣可以避免很多諸如內存泄露等嚴重的問題。

本系統支持兩種讀取方式來獲得視頻流,它們是內存映射和直接讀取,所以首先需要判斷視頻采集的方式,如果是內存映射,則在系統任務完成后關閉內存映射,然后關閉攝像頭設備。同樣道理,如果采用的是直接讀取,則在任務完成后關閉直接讀取,然后在關閉攝像頭設備。在代碼中,采用了一個判斷語句,判斷vd->grabMethod的值來判斷系統采用哪種讀取方式。int close_v4l(struct vdIn *vd){

int i;if(vd->grabMethod){

} else { free(vd->pFramebuffer);vd->pFramebuffer = NULL;if(debug)printf(“unmapping frame buffern”);munmap(vd->pFramebuffer, vd->mmapsize);

} } if(debug)printf(“close video_devicen”);close(vd->fd);/* dealloc the whole buffers */ if(vd->videodevice){

} if(vd->cameraname){

} for(i = 0;i < OUTFRMNUMB;i++){

} pthread_mutex_destroy(&vd->grabmutex);if(vd->ptframe[i]){

} free(vd->ptframe[i]);vd->ptframe[i] = NULL;vd->framelock[i] = 0;if(debug)printf(“freeing output buffer %dn”, i);

free(vd->cameraname);vd->cameraname = NULL;free(vd->videodevice);vd->videodevice = NULL;5.1.3視頻數據采集

視頻數據的采集是系統實現的第一步,是所有工作的前提。嵌入式Linux系統支持兩種視頻數據采集的方式:內存映射、直接讀取視頻。

(1)內存映射

內存映射方式是通過mmap系統調用函數來實現的。mmap系統調用使得進程之間通過映射同一個普通文件實現共享內存。普通文件被映射到進程地址空間

后,進程可以像訪問普通內存一樣對文件進行訪問,不必再調用read()、write()等操作。

首先,使用ioctl系統調用的VIDIOCSFBUF命令獲得攝像頭存儲緩沖區的幀信息,之后初始化video_mbuf,修改video_mmap中的設置,重新設置圖像信息,如幀的垂直及水平分辨率、彩色顯示格式等。為了防止緩沖區的內容與有用信息疊加產生干擾,在初始化之前可以先調用memset(&(vd->videombuf),0,sizeof(vd->videombuf)來清零緩沖區。然后使用函數vd->map=(unsigned char*)mmap(O,vd->mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,vd->fd,ff_t offset)使設備內容映射到內存區,其中第一個參數為共享內存的起始地址,一般設為0,表示由系統分配;第二個參數為映射到調用進程地址空間的字節數,它從被映射文件開頭offset個字節開始算起;第三個參數指定共享內存的訪問權限(PROT_READ(可讀),PROT_WRITE(可寫),PROT_EXEC(可執行));第四個參數可以是MAP_SHARED或者MAP_PRIVATE;第五個參數為設備描述符。mmap()成功調用后返回系統實際分配的起始地址。

內存映射方式下真正進行視頻截取的是ioctl系統調用的VIDIOCMCAPTURE命令,若函數成功調用,再用VIDIOCSYNC命令來判斷圖像截取是否己經完畢,若該函數調用成功,則表明一幀圖像的截取已完成,便開始下一幀圖像數據的截取,并將當前截取的幀號按緩沖區總幀數的模加上l。

vd->vmmap.height=vd->hdrheight;vd->vmmap.width=vd->hdrwidth;vd->vmmap.format=vd->formatln;/*判斷圖像截取是否完成*/ if(ioctl(vd->fd,VIDIOCSYNC,&vd->vmmap.frame)<0){ perror(??cvsync errn);erreur=-I;} while((vd->framelock [vd->frame_cour]!=0)&&vd->signalquit)usleep(1000);temps=ms_time();

pthread_mutex_lock(&vd->grabmutex);jpegsize=convertframe(vd->ptframe[vd->frame_cour]+sizeof(struct frame_t),vd->pFramebuffer+vd->videombuf.offsets[vd->vmmap.frame],vd->hdrwidth,vd->hdrheight,vd->formatln,vd->framesizeIn);headerframe=(struct frame_t*)vd->ptframe [vd->frame_cour];

snprintf(headerframe->header, 5,”%s”.”SPCA”);

headerframe->seqtimes=ms_time();headerframe->w=vd->hdrwidth;headerframe->h=vd->hdrheight;headerframe->size=((jpegsize<0)? 0: jpegsize);headerframe->format=vd->formatln;headerframe->nbframe=frame++;pthread_mutex_unlock(&vd->grabmutex);/*截取視頻幀*/ if((ioctl(vd->fd,VIDIOCMCAPTURE,&(vd->vmmap)))<0){ perror(“cmcapture”);

if(debug)printf(“>>cmcapture err n”);erreur=-l;} vd->vmmap.frame=(vd->vmmap.frame+1)%vd->videombuf.frames;vd->frame_cour=(vd->frame_cour+l)%OUT FRMNUMB;(2)直接讀取方式

直接讀取視頻數據是通過read系統調用函數來實現。read是一個用來從指定的文件或設備中讀取數據的系統調用。參數表為read(fd,(void*)pFramebuff,(size_t)framesizeln)。其中fd為文件描述符,pFramebuffer為指向存放數據的內存的指針,framesizeln為需要讀取的數據的長度。對于攝像頭設備的讀取,需要先分配內存空間,用來存儲從攝像頭讀取過來的視頻數據,然后直接調用read系統調用讀取視頻數據,返回值為實際讀取的視頻幀大小,也正是在視頻傳輸過程中發送的視頻數據大小。

size=vd->framesizeln;vd->pFramebuffer=(unsigned char*)realloc(vd->pFramebuffer,(size_t)size);Len=read(vd->fd, vd->pFramebuffer, size);if(len<0){ if(debug)printf(“v41 read errorn”);

if(debug)printf(“len %d asked %dn”, len, size);return 0;}

/*是否有其他進程正在使用該視頻幀*/ while((vd->framelock [vd->frame_cour]!=0)&&vd->signalquit)

headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant);

usleep(1000);temps=ms_time();

pthread_mutex_lock(&vd->grabmutex);jpegsize=convertframe(vd->ptframe[vd->frame_cour]+sizeof(structframe_t),vd->pFramebuffer,vd->hdrwidth,vd->hdrheight,vd->formatln,vd->framesizeln);headerframe=(struct frame_t*)vd->ptframe [vd->frame_cour];snprintf(headerframe->header, 5,”%s”,”SPCA”);headerframe->seqtimes=ms_time();headerframe->deltatimes=(int)(headerframe->seqtimes-timecourant);headerframe->w=vd->hdrwidth;headerframe->h=vd->hdrheight;headerframe->size=((jpegsize<0)? 0: jpegsize);headerframe->format=vd->formatln;headerframe->nbframe=frame++;vd->frame_cour=(vd->frame_cour+1)%OUTFRMNUMB;pthread_mutex_unlock(&vd->grabmutex);5.2圖像編解碼 5.2.1編解碼介紹

通過攝像頭采集到數據后,還并不能把它們直接通過網卡傳輸,因為這樣的數據很大,網絡不能承擔如此龐大的數據傳輸。所以,必須將采集到得數據進行編碼,壓縮數據大小。通過這樣的操作,我們采集到得數據就會變得很小,然后再把這些數據通過網絡傳輸。同樣的道理,在輸出端我們還要把接收到的已經壓縮的數據還原回來,這就涉及到解碼的內容。通過這一系列的操作,圖像和視頻數據就實現的遠程的傳輸。如果沒有編解碼,遠程傳輸就是實際上不可能的事情,所以圖像的編解碼是非常重要的。

現在普遍使用的編解碼技術。對于靜態圖像,普遍使用靜態壓縮JPEG標準;對于動態視頻,普遍使用動態壓縮MPEG標準。

JPEG是由ISO和CCITT為靜態圖像壓縮所建立的國際上第一個靜態圖像壓縮標準,JPEG有著較高的壓縮比,復雜度適中,既可以用硬件實現,也可以用軟件實現,實用性強,被廣泛使用于計算機和通信行業。

MPEG中文譯名為動態圖像專家組。到目前為止,MPEG標準主要有五個,32

MPEG-

1、MPEG-

2、MPEG-

4、MPEG-7和MPEG-21。它是由ISO/IEC1172壓縮編碼標準得出的視頻壓縮格式,MPEG的出現使視聽傳播進入數碼化時代。MPEG標準的視頻壓縮編碼技術主要利用了具有運動補償的幀間壓縮編碼技術以減少時間冗余度,利用DCT技術以減少圖像的空間冗余度,利用熵編碼技術在信息表示方面減少了統計冗余度。通過一系列技術,極大的體現了壓縮性能[16]。

5.2.2系統壓縮技術

由于本系統要求實現遠程視頻傳輸,為了達到預計的設計要求,設計采用基于MJPEG算法的壓縮技術進行視頻壓縮。MJPEG和MPEG的不同點在于MJPEG不使用幀間編碼。可是MJPEG與MPEG仍然是一脈相承的,它對MEPG進行了一些改進和發展,功能更加強大,能發送高質圖片、清晰視頻,編碼容易實現。但MJPEG也有一些缺點,由于功能的提升,MJPEG對帶寬的要求很高,編碼效率低。

參考文獻

1.張永強,趙勇勇,李崇德.嵌入式遠程視頻采集系統的設計與實現[J].現代電子技術,2006,05(02):57-60.2.Jing Li, Weidong Hao.Research and Design of Embedded Network Video Monitoring System Based on Linux[C].The 2008 International Conference on Embedded Software and Systems Symposia, 2008, 1310-1313.3.陳章龍,唐志強,涂時亮.嵌入式技術與系統——Intel Xscale 結構與開發[M].北 京:北京航空航天大學出版社,2004,143.4.奧爾博公司.PXA270嵌入式實驗開發系統——Linux實驗指導[M],2007.5.Seon Gyu Kim and Sung Ho Cho.Implementation of an Embedded Software Modem Platform[J].Division of Electrical & Computer Engineering,2006,04(2):5-9 6.杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003.7.朱珍民,隋雪青.嵌入式實時操作系統及其應用開發[M].北京:北京郵電大學出版社,2006.8.李亞峰 歐文盛.ARM嵌入式Linux系統開發從入門到精通[M].北京:清華大學 33

出版社,2007,51-54.9.李善平.Linux內核2.4版源代碼分析大全[M].北京:機械工業出版社,2002.10.廖日坤.ARM嵌入式應用開發技術白金手冊[M].北京:中國電力出版社,2007, 284-290.11.劉昆.Linux環境下宿主機與ARM開發板NFS服務的配置[J].科技資訊,2008,05(04):65-80.12.韋東山.嵌入式Linux應用開發完全手冊[M].北京:人民教育出版社,2008.13.孫紀坤,張小全.嵌入式Linux系統開發技術詳解——基于ARM[M].北京:人民郵電出版社,2006.14.李冰,孫建平,譚悅,張啟勤.基于嵌入式Linux與S3C2410的網絡視頻監控[J].河北:華北電力大學學報,2006,2(4):15-30.15.董玲,朱宏,楊忠孝.基于ARM的嵌入式Linux應用程序開發研究[J].電子測試,2008,05(06):40-60.16.Yongqiang Zhang, Bing Zhang.Design of Embedded Audio and Video Compression System[J].Workshop on Intelligent Information Technology Application,2007,12(8):76-90.17.Xing Zhang, Li-Ming Song.Implementation of Video Data Transmission Between ARM and DSP Through Embedded Linux[C].The 2008 International Conference on Embedded Software and Systems Symposia,2008,292-295.18.張躍進,謝昕.嵌入式網絡數字視頻監控系統的設計[J].計算機工程與設計,2009,12(9):70-100.19.Yi Wu, Jiangyong Cai, Xiao Lin, Lianfeng Shen.The Design and Realization of the Wireless Video Monitoring System Based on Embedded Linux and CDMA1X[C].The 2008 International Conference on Embedded Software and Systems Symposia, 2008, 179-184.20.王先春,郭杰榮,胡惟文,樊希平.基于ARM_Linux的嵌入式Web服務器的設計與實現[J].微計算機信息,2007,14(7):90-95.34

第二篇:嵌入式遠程視頻采集系統的設計與實現(基于S3C2410)

嵌入式遠程視頻采集系統的設計與實現(基于S3C2410)

發 布 時 間 : 2008-11-19 來 源 : 中電網 作 者 : 張永強,趙永勇,李崇德 瀏 覽 :

984

多媒體通信技術的發展為信息的獲取和傳輸提供了豐富的手段,視頻采集是其中不可缺少的重要組成部分,該系統基于S3C2410的ARM9芯片和嵌入式Linux操作系統,采用USB攝像頭捕捉視頻,經MPEG-4算法壓縮編碼,系統直接與網絡相連,用戶使用標準的網絡瀏覽器和流媒體播放程序即可查看遠程視頻影像。硬件系統

系統硬件平臺選用基于ARM9架構嵌入式芯片S3C2410,穩定工作在202MHz主頻,板載64MB SDRAM 64MB FLASH,主板資源包括:主USB口、從USB口、10M/100M以太網口,觸摸屏、彩色LCD、鍵盤、8個用戶自定義LED數碼管,A/D,RTC電路,2個串口、1個JTAG通用接口,音頻模塊,支持MPEG4,MP3編解碼,3個168PIN的擴展插座,32位的數據總線,保留充分擴展空間。

其中標配模塊包括:IC卡+PS2模塊、IDE硬盤+CF卡模塊、PCMCIA+SD/MMC模塊。另外可選配模塊有:GPS模塊,GPRS模塊,FPGA模塊,CAN+AD+DA模塊、紅外模塊、藍牙模塊、攝像頭模塊。軟件系統

2.1 內核配置與USB攝像頭驅動

假定已經搭建好嵌入式Linux的開發環境,下面第一步工作就是USB攝像頭的安裝與驅動。首先檢查Linux Kernel中是否已經添加了USB模塊的支持,并且加入Video4Linux支持。

Multimedia devices→Video For Linux

Video For Linux→[*]V4L information in proc filesystem

在主菜單的USB Support下還有各種攝像頭的驅動,選中將要使用的攝像頭芯片類型。

<>USB IBM(Xirlink)C-it Camera support<*>USB OV511 Camera support<>USB Philips Cameras <>USB SE401 Camera support<>USB STV680(Pencam)Camera support<>USB 3com HomeConnect(akavicam)support 在USB攝像頭選購時,優先考慮Linux內核公開支持的攝像頭芯片,不然要額外編寫相應的USB攝像頭驅動程序,然后進行編譯、安裝。在此選用網眼公司的V3000產品,他采用了OV511的芯片。

確定USB攝像頭被正常驅動后,下一步就是使用Video4Linux提供的API函數集來編寫視頻采集程序。

2.2 基于V4L設計的視頻采集模塊

在Linux下,所有外設都被看成是一種特殊的文件,稱為設備文件。系統調用是內核和應用程序之間的接口,而設備驅動程序則是內核和外設之間的接口。他完成設備的初始化和釋放、對設備文件的各種操作和中斷處理等功能,為應用程序屏蔽了外設硬件的細節,使得應用程序可以像普通文件一樣對外設進行操作。

Linux系統中的視頻子系統Video4Linux為視頻應用程序提供了一套統一的API,視頻應用程序通過標準的系統調用即可操作各種不同的視頻捕獲設備。Video4Linux向虛擬文件系統注冊視頻設備文件,應用程序通過操作視頻設備文件實現對視頻設備的訪問。

Linux下與Video4Linux相關設備及用途如表1所示。

這里主要針對設備文件/dev/video進行視頻捕捉方面的程序設計。

Linux下視頻采集流程如圖2所示。

其中用到的主要函數有:

Camera_open():用來開啟視頻設備文件,使用前需要首先聲明一個video_device類型的設備文件。

Camera_get_capability():通過調用ioctl()函數取得設備文件的相關信息,并存放到video_capability結構里。

Camera_get_picture():通過調用ioctl()函數取得圖像的相關信息,并且存放到video_picture結構里。

Camera_close():用來關閉設備文件。Camera_grab_image():用來抓取圖像,采用mmap方式,直接將設備文件/dev/video0映射到內存,加速文件I/O操作,還可以使多個線程共享數據。

剩下的還有設備初始化、參數設備等相關函數,不再詳述。

2.3 視頻壓縮編碼模塊

獲取圖像數據后,可以直接輸出到FrameBuffer進行顯示,由于本系統要將采集到的視頻影響通過網絡傳輸出去,所以在傳輸之前要對原始的圖像數據進行壓縮編碼,在此選用MPEG-4視頻編解碼方案。和其他標準相比,MPEG-4壓縮比更高,節省存儲空間,圖像質量更好,特別適合在低帶寬條件下傳輸視頻,并能保持圖像的質量。

MPEG-4中基于對象的視頻編碼過程可以分為3步進行:

(1)從原始視頻流中分割視頻對象。

(2)對視頻對象進行編碼,對不同視頻對象的運動信息、形狀信息、紋理信息分配不同的碼字。對輸入的任意形狀的VOP序列,用基于塊的混合編碼技術編碼,處理順序是先IVOP后PVOP,BVOP。在對VOP的形狀信息編碼后,取得任意形狀VOP的采樣,每個VOP劃分為不相交的宏塊,每個宏塊含有4個8×8象素塊進行運動補償以及紋理編碼,已編碼的VOP幀保存在幀存中,在當前VOP幀和已編碼VOP幀之間的計算運動矢量;對將編碼的塊和宏塊,計算他們的運動補償預測誤差;運動補償預測后的IVOP及誤差用8×8塊DCT變換,并進行DCT系數的量化,然后是游程編碼和熵編碼。

(3)對各個視頻對象的碼流進行復合,每個視頻對象的形狀、運動紋理信息復合成VOL比特流,各視頻對象視頻流復合成統一的碼流輸出。對視頻流進行壓縮編碼以后,接下來就要實現網絡傳輸部分的功能。

2.4 JRTPLIB網絡傳輸模塊

流媒體指的是在網絡中使用流技術傳輸的連續時基媒體,RTP是目前解決流媒體實時傳輸問題的好辦法,JRTPLIB是一個面向對象的RTP庫,他完全遵循RFC1889設計,下面講述如何在Linux平臺上運用RTP協議進行實時流媒體編程。

2.4.1 初始化 在使用JRTPLIB進行實時流媒體數據傳輸之前,首先應該生成RTPSession類的一個實例來表示此次RTP會話,然后調用Create()方法來對其進行初始化操作。RTPSession類的Create()方法只有一個參數,用來指明此次RTP會話所采用的端口號。

2.4.2 數據發送

當RTP會話成功建立起來之后,接下來就可以開始進行流媒體數據的實時傳輸了。首先需要設置好數據發送的目標地址,RTP協議允許同一會話存在多個目標地址,這可以通過調用RTPSession類的AddDestination()、DeleteDestination()和ClearDestinations()方法來完成。目標地址全部指定之后,接著就可以調用RTPSession類的SendPacket()方法,向所有的目標地址發送流媒體數據。

2.4.3 數據接收

對于流媒體數據的接收端,首先需要調用PollData()方法來接收發送過來的RTP或者RTCP數據報。由于同一個RTP會話中允許有多個參與者(源),因此既可以通過調用GotoFirstSource()和GotoNextSource()方法來遍歷所有的源,也可以通過調用GotoFisstSourceWithDat()和GotoNextSourceWithData()方法來遍歷那些攜帶有數據的源。在從RTP會話中檢測出有效的數據源之后,接下去就可以調用RTPSession類的GetNextPacket()方法從中抽取RTP數據報,當接收到的RTP數據報處理完之后,要及時釋放。

JRTPLIB為RTP數據報定義了3種接收模塊,通過調用RTPSession類的SetReceiveMode()方法可以設置下列這些接收模式:

RECEIVEMODE_ALL:缺省的接收模式,所有到達的RTP數據報都將被接受;RECEIVEMODE_IGNORESOME:除了某些特定的發送者之外,所有到達的RTP數據報都將被接受,而被拒絕的發送者列表可以通過調用AddToIgnoreList(),DeleteFromIgnoreList()和ClearIgnoreList()方法來進行設置;RECEIVEMODE_ACCEPTSOME:除了某些特定的發送者之外,所有到達的RTP數據報都將被拒絕,而被接受的發送者列表可以通過調用AddToAcceptList(),DeleteFromAcceptList和ClearAcceptList()方法來進行設置。

2.4.4 控制信息 JRTPLIB是一個高度封裝后的RTP庫,只要PollData()或者SendPacket()方法被成功調用,JRTPLIB就能夠自動對達到的RTCP數據報進行處理,并且還會需在要的時候發送RTCP數據報,從而能夠確保整個RTP會話過程的正確性。

在本系統中,使用RTPSession JRTPLIB類庫提供的方法來實現底層的RTP/RTCP操作,并且把他封裝在CrtpTransmitter類中,該類從Media Sink類繼承而來,接收到相應的媒體幀數據,使用RTPSession類庫的操作把數據發送到網絡上。結語

本系統基于S3C2410平臺和Linux操作系統,利用Video4Linux設計采集程序,使用MPEG-4壓縮編碼算法,通過實時流媒體傳輸技術實現了網絡傳輸,整個系統具有穩定可靠、安裝簡便、成本低廉等特點,可擴展應用在工業控制、視頻會議系統、可視電話、遠程監控系統等諸多領域。

第三篇:嵌入式視頻采集系統的設計與實現_韓相軍

嵌入式視頻采集系統的設計與實現

首都師范大學% 韓相軍關永王萬森王雪立

Han,Xiangjun Guan,Yong Wang,Wansen Wang,Xueli 摘要!較為理想的嵌入式視頻采集系統是基于!“# 的視頻采集系統 & 本文重點闡述了嵌入式視頻采集系統的硬 ’

軟件設計

環節以及開發中的一些關鍵技術問題(首先以

$%”&’()%*+’

構建視頻采集的硬件系統 & 詳細介紹了 $,#-.-(’“//0.’.以

及所設計的視頻采集系統原理 & 該系統在 12’3&((控制下能實時將視頻像進行采集 ’

編碼和傳輸)最后提出嵌入式系統的開

發流程并分析嵌入式系統開發中的一些問題 * 關鍵詞!視頻采集)嵌入式系統)”#$%&’(#)*& 中圖分類號 +“,%-./* 文獻標識碼!0 01234563!45678 69:65565;<56= 27>?@A6 3B3?69 <3 ?C6;<56= 27>?@A6 3B3?69 :7365 =D!”EF ?C6 >7>6A ?@A6 C7A5I7A6 7D5 3=H?I7A6 3B3?69 7D5 3=96 J6B ?62CD=8=GB K@63?<=D3L /? H?@A6 C7A5I7A6 3B3?69 <3 :@<8? @3?@A6 3B3?69 >A86 7A6 ?@A6F 6D2=56 7D5 ?A7D39<2?@A6 A678M?<96 @D56A ?C6 12’3&((N 3 2=D?A=8896D? >A=265@A6 =H ?C6 69:65565 3B3!?69 7D5 3=96 K@63?<=D3 =H ?C6 3B3?69 <3 >@? H=AI7A5 H<8;65?3@48)AB18<<8<;?8453>CD 29238B)“E$%&’(E)*& 文章編號

+.’’FG’HI’J&’’)K’.G&G’’&)G’% 引言

視頻采集系統是數字圖像獲取的最基本手段 & 是

進行數字圖像處理 + 多媒體和網絡傳輸的前提 & 它可

為各種圖像處理算法提供待處理的原始數字圖像和 算法驗證平臺 & 隨著人們對視頻圖像需求的激增和各 種圖像和視頻新的壓縮標準相繼提出 & 如

QP’*&’QP

’*+’REST’’REST+ 和

UEST’(((等 & 對高性能視頻

采集系統的研究將成為一個熱點 * 按系統的處理器不 同嵌入式視頻采集系統大致可分為三類 VW.X 基于專用

視頻圖像芯片的視頻采集系統)W’X 基于 EY 的視頻采 集系統)W&X 基于)”E 的視頻采集系統 * 基于專用視頻圖像芯片的視頻采集系統其核心 處理單元為專用圖像芯片 & 該圖像芯片決定系統的功 能 & 其應用主要針對某一類產品 $ 如數碼攝像機 %& 所

以具有一定的局限性 * 而基于 EY 機的視頻采集系統

最為普遍的就是基于視頻采集卡獲取數字化視頻信 息 & 通過運行相應的 EY 程序實現視頻的采集 ’ 顯示與 存儲 & 但是目前基于 EY 的算法程序通常處理時間較 長 & 很難實現實時的圖像處理應用 * 相比基于專用視頻圖像芯片和基于 EY 的視頻采 集系統而言 & 嵌入式視頻采集系統可完成視頻的實時 采集 ’

傳輸以及各種視頻壓縮算法和圖像處理算法的 實現 & 根據不同的應用 & 可以編制不同的圖像處理程 序 & 所以具有更大的靈活性 & 并且設計與實現簡單 & 硬

件設計一般采用基于)“E 的視頻采集系統 F 即 ,YY)Z 視頻信號處理芯片 ZYE[)]E^/SE_)Z)”E-的模式 實現 * 其中 & 視頻信號處理芯片進行信號的 /)轉換 & YE_)或 SE_)或 ]E^/ 用于視頻采樣控制 &)“E 對采

集的數據進行處理 * 嵌入式視頻圖像采集系統主要包 括硬件設計 ’

軟件設計和操作系統 & 個部分 *.嵌

入式視頻采集系統的硬件設計.P.視頻采集系統的基本構成 基于)”E 的視頻采集系統要求對視頻信號具備 采集 ’

實時顯示 & 對圖像的處理和分析功能 * 因此 & 一

個視頻采集系統通常可由如下五部分構成 V 視頻圖像 的采集 ’

視頻圖像的顯示輸出 ’

各種同步邏輯控制 ’ 視

頻圖像的分析和處理 ’

視頻數據的存儲 * 因此 & 對于視

頻采集系統的基本構成可用圖.所示框圖描述 * 圖.視頻采集系統的基本框圖

韓相軍 # 碩士研究生

北京市自然科學基金資助項目 $*’)&’’-%)北京市教委

科技發展計劃面上項目 $7E&’’).’’&F’.%%)北京市高 等學校 &’’H

教育教學改革立項項目 $&’’H’IH% 嵌入式系統應用 中文核心期刊!微計算機信息 “(嵌入式與 SOC)2006 年第 22 卷第 1-2 期 360元 / 年郵局訂閱號 # 82-946!!”# 格式輸出 $ 數據輸出格式是通過 $%& 總線編程來 選擇的 $’()*+,-的內部寄存器初始化也通過 $.& 串

行接口來完成 % 對于不同的輸入制式 & 不同的采集要

求和不同的處理要求 $ 其幀緩存要求是不相同的 $ 如 對于)/012 制

$’314 5’67-+ 視頻輸入 $ 采樣后按 89.9.格式輸出 $ 一幀數據為

:.-!*:7!.“-6;<=>?@A$ 若

緩存三幀圖像 $ 則需要 <=>?@A 空間的采集幀緩存 $ 若 按 89+9+ 格式輸出 $ 則只需.=>?@A 的幀緩存 % 系統可選 擇

;=!<.1>B@ 的 C24/= 在系統中即作為采集幀緩存 和處理后的數據幀緩存 $ 也可作下載程序的存儲器使 用 % 系統提供串行接口 $ 可與外部設備進行通信和傳 輸圖像數據 % 其中

DBEBFG DH.I<--J)K/ 實現以下四 點功能 # L+M 完成系統中視頻采集和輸出部分的同步信號 和消隱信號的控制 $ 其中主要包括 ’(),+,-和

C//:+%+ 的行同步信號 & 場同步信號 & 消隱信號 ’ L%N 將部分邏輯單元設計為 J$JO 作數據緩存 $ 完 成外接 J$JO 的同步讀寫控制 $ 承擔 ’#),+,-與 2C)的數據傳送工作 ’ P

’=C<.-2=78.與計

算機的數據通信工作以及從計算機加載各種圖像處 理算法 ’ L8N 對

’#)*+*-輸出的數字圖像進行預處理 $ 其中

主要包括圖像數據的色度空間轉換如!3# 到 4K5 的 轉換 $ 數據格式轉換如將 89.9.轉換為 89.9-’ L*N 作數據總線接口 $ 實現數據的驅動傳輸等功能 % ’=C<.-2=78.在系統中是各類算法實現的核心 器件 $ 根據不同的應用場合 $ 可以編制不同的算法處 理程序 $ 使得該系統具有了很強的靈活性與通用性 % 值得強調的一點是為了便于操作系統中的其它外設 $ 在該系統中 $’=C<.-2=78.的外部存儲器接口控制

寄存器必須配置為優先使用外部存儲器模式 %!嵌

入式視頻圖像采集系統的軟件 設計

一個完整的嵌入式系統由圖 < 所示的 8 部分來 組成 % 圖 < 嵌入式系統組成 圖 < 中的底層是硬件系統 $ 核心是嵌入式處理器(嵌入芯片)$ 通常這樣構成的系統又被稱為是 CO& LC?I@AQ RF &SBTN 系統 % 在硬件系統的上面是 5C)L 板級 支持包 N$ 包括各種必要的對底層硬件系統的屏蔽 $ 引

導上層操作系統在硬件系統上的正確運行 % 操作系統

正確運行之后還需要開發各種設備驅動程序 $ 目的是

給用戶的應用程序開發提供對底層設備的屏蔽 $ 提供

一個統一的用戶開發接口 L/)$N% 5C)是指系統內核在特定的硬件系統上面運行所 需要的初始化代碼和各種設備驅動程序 % 它主要包 括 # 系統初始化 $ 初始化 &)3 寄存器和測試 &)3 的型 號版本等 $ 它和

5RR@ERUVAW 中的初始化部分共同完成 所有的系統準備工作 $ 使得系統處于預期的穩定工作 狀態 ’

內存管理 $ 在沒有 ==”L 內存管理單元 N 的系統

里面主要是數據 HUHSA 和程序 HUHSA 的管理 $ 在具有 ==“ 單元的系統中還要包括 ==” 的各種表的管理 $ 它主要用來實現內存的映射 ’

中斷控制器管理 $ 對于 一個 4’OC 來說 $ 中斷是不可缺少的部分 % 嵌入式操作系統相關技術已經成熟 $ 由于 0BFXG 具有源碼開放 & 開發工具豐富 & 技術支持廣泛等特點 $ 視頻圖像采集系統選用嵌入式 0BFXG 操作系統 LYQ# >AVVAV 0BFXG OTAWU@BRF C?I@AQN% 0BFXG 中的中斷管理

包括中斷號的申請和釋放 & 中斷屏蔽和中斷服務 & 中

斷向量分配等 $ 時鐘和設備驅動程序 % 驅動程序是利用操作系統提供的接口 $ 完成對底 層硬件的操作 % 驅動程序的開發 $ 是在操作系統提供 的接口基礎上編寫對底層硬件的操作和控制程序 $ 然

后加入到操作系統的內核 % 用戶對某一個設備的訪 問 $ 首先是將用戶的各種操作傳遞給操作系統 $ 然后

由操作系統調用設備的驅動程序 $ 完成對硬件的各種 數據傳輸 $ 所以驅動程序必須要告訴操作系統該硬件 的各種操作程序的入口地址 % 特別對于 0BFXG 下的驅 動程序開發 $ 經過調試通過的驅動程序可以編譯為一

個模塊動態地裝載入操作系統內核或者從操作系統 內核中刪除 Z 因此驅動程序在 0BFXG 中是可以作為內 核的一部分來編寫 % 對于用戶程序開發 $ 與通用)& 上面開發應用程 序類似 % 但是在嵌入式應用中 $ 應用程序一般是作為

文件系統的一部分加入到操作系統的內核 $ 然后重新 編譯內核 $ 最后生成一個可以執行的二進制壓縮映像 文件加載到系統的存儲空間 % 加載的加入了用戶應用

程序的操作系統一般還必須固化 $ 燒到系統的 JEUIS 中 % 在系統運行時 $ 根據操作系統的 $*$’

函數轉到用 戶程序執行 % “結 論 基于 2C)的視頻采集系統 $ 由于可以靈活的修改 其圖像處理算法 $ 它的應用主要面向用戶的特定需求 和對實時性有較高要求的場合 % 隨著技術的 L 見 +8;頁 N

BSP

嵌入式系統應用!現場總線技術應用 200 例.;”!“# 基于 $%& 的視頻采集系統 圖 # 給出了基于 ’(%)#*$(+,# 與

’-&.!./ 構

成的視頻采集系統 ”’(%)#/$(+,# 可以直接和視頻 編解碼器接口 “ 該系統可同時完成四路視頻圖像的實 時采集 # 傳輸以及各種視頻壓縮算法和圖像處理算法 的實現 ” 根據不同的應用 “ 可以編制不同的圖像處理 程序

$ ’(%)#/$(+,#

有自己的圖像處理庫函數 ” 可以 實現各類圖像處理算法 $ 因此 “ 該系統具有更大的靈 活性與通用性 $ 圖 # 基于 ’-&.!./ 與 $%& 的視頻采集系統!”#“!’(%)#/$(+,# 簡介

’(%)#/$(+,# 是 ’0 推出的一款面向數字多媒體 應用的 $%&” 它在 ’0 的

1+,2 $%& 內核基礎上進一步 集成了完備的視頻 3 音頻輸入 3 輸出接口 % 以太網接口 # &104++ 總線等片上外設 “ 不僅能使用戶很方便地對音 頻 5 視頻等各種復雜的運算進行高速處理 ” 還能為方 便 # 無縫地接口視頻 3 音頻編解碼器件和以太網 3&10 總

線等數據傳輸接口 & 因此 “ 它非常適用于-60&% 數字視 頻服務器 % 多通道數字視頻錄像機 7$-89% 多通道數字 視頻監控等應用 & $(+,# 的程序 3 數據空間以字節為單位進行統一 編址 ” 整個尋址空間為 ,:8& 其片上存儲器 % 片上外 設 % 及外部存儲器接口 7;(0<9 均映射到此 ,:8 的空間 中 & $(+,# 通過外部存貯器接口 7;(0<9 訪問片外存儲 器

7<=>?@%%$AB(%CBA’%B’B9“ 如圖 # 所示 ”$(+,# 共有三個視頻口 “ 分別為-&/%-&!和

-&#&-&/ 與-&!則與

(D8%&%(DB%& 復用引腳的 ” 其功能選擇由 $(+,# 上的外設配置寄存器 7&;A1<:9 進行配置的 & $(+,# 支持多種外部接口!&10 接口 %E&0 接口和以太 網(B1 接口 “ 這些接口信號復用相同的引腳 ” 它們的

功能選擇和配置是在上電復位時通過檢測 $(+,# 上 的特殊引腳

7&10F;G%(B1F;G%E$.%&10F;;B09 的狀

態來實現的 &!H#“# 視頻 B3$ 采樣電路!’-&.!./ 在圖 # 系統中 ”’-&.!./ 是由 ’0 公司推出的一款 高性能視頻解碼器 “ 可將

G’%1%&BI 視頻信號轉換成 數字色差信號 7JC-,K#K#9” 支持兩個復合視頻或一個 % 端子輸入 & 輸出格式為 0’C 4A 8’L+.+“ 并支持

(>DM6NO?O6P ’(復制保護以及高級的-80 功能 & 不僅如 此 ”’-&.!./ 還具備了封裝小 7)# 腳的

’Q<&9% 功耗小 的特點 7R!./ST9& 因此 “ 它非常適用于便攜 % 批量大 % 高質量和高性能的視頻產品 & ’-&.!./ 可接受 # 路復

合視頻信號 71-8%9 輸入和!路超級視頻信號 7%U-OVW6 即

%XYWMU-OVW6”J319 輸入 & 該芯片包含一個擴展端口 ’ZU 端口(用于數字視頻 ’

雙向半雙工(“ 它可直接連接 倒(&;: 或視頻電話進行編解碼 $ ’-&.!./ 的圖像端 口 ’0U 端口(支持 [ 位或!+ 位的輸出數據并帶輔助參 考數據可直接與-:B 控制器接口 $ ’-&.!./ 提供 0 # 1 總線接口 ” 其最高傳輸速率為 ,//]O^?_?“ 通過它可以

完成芯片的初始化以及設置修改等操作 $ ’-&.!./ 作 為 0 # 1 總線的從設備 ” 最多可配置為 # 個不同的從設 備地址 “ 一條 0 # 1 總線只能同時訪問 # 個

’-&.!./ 配 置口 ” 所以 $(+,# 可以連接 , 個

’-&.!./“ 進行 , 路

視頻輸入 $!H#H)視頻 $_B 電路!%BB‘!#!圖 # 系統中視頻 $_B 由視頻編碼器 %BB‘!#!完 成

$ %BB‘!#!支持 &BI 與 G’%1

格式的視頻編碼 ” 其

輸入支持 8’H+.+

格式的數字視頻 $ %BB‘!#!有!路

復合視頻 71-8%9 輸出和!路超級視頻

7%U-OVW6“J_19 輸 出 ” 其系統像素時鐘頻率為!)H.(Ea“ 它可以直接接收(&;: 解碼數據和采用 ,K#K# 格式每行 ‘#/ 有效像素 的 110A 兼容 JC-數據 ” 其內部包含同步 _ 時鐘產生

器和數模轉換器兩部分電路 $ %BB‘!#!

同樣需要通過 0 # 1 總線進行初始化和設置修改等操作 $ 從圖 # 中可看出 “-&/ 既要做視頻輸入口 ” 也要支

持視頻輸出口 “ 即-&/ 可以工作在 1>Y^XMW 與

$O?Y=>b 兩種作模式 $ 但這兩種工作模式不能同時使用作模式 不能同時使用 $ 當-&/ 作為 [U 位的 8’H+.+ 視頻采集 口時 ” 僅需視頻數據流串行時鐘和采集使能控制信 號 “ 串行數據流串行時鐘由 ’-&.!./ 的 %1Ic” 采集使

能控制信號則由 ’-&.!./ 的

0G’A;Q_:&1I_-8Ic 引

腳配置為通用輸出引腳來控制 “ 此時 %BB‘!#!E 不起 作用 $ 當-&/ 作為 [U 位的 8’H+.+ 顯示口時 ”%BB‘!#!需要 E%JG17 行同步信號 9%-%JG17 場同步信號 9%II1 7#‘(Ea 的行鎖存號 9 控制 $!H#H, 系統原理 圖 # 系統其主要功能是完成視頻圖像的采集 % 處 理 % 存儲和傳輸 $ 系統的視頻輸入可以是 G’%1%&BI 和 %;1B(制式的任何一種 “ 或者采用 % 端子輸入 $ ’-&.!./ 完成視頻信號的 B_$ 轉換 ” 為后續處理提供 數字視頻數據 “ 同時它還分離出行 % 場同步信號并輸 出系統時鐘供視頻 $_B 芯片和 <0

EMAC/MDIO TVP5150 EMIF64

HPI16/HPI32 TMS320DM642

(600MHz 4800MIPS)

EDMA 64 Channels

L1P Cache 16KB L1D Cache 16KB L2 Cache 256KB Parallel executive Units 32 bit Timers 66MHZ PCI32 20/10b VP0 20/10b VP1 20/10b VP2A TVP5150 TVP5150 TVP5150 20/10b VP2B Xilinx XC2S300 FPGA SAA7121

嵌入式系統應用)變頻器與軟啟動器應用 200 例 * #‘中文核心期刊!微計算機信息 ”(嵌入式與 SOC)2006 年第 22 卷第 1-2 期 360元 / 年郵局訂閱號 # 82-946!!模糊量 $ 可歸納一系列控制規則 $ 例如規則!“ #$ %&!’(!)* +,-.&/!’ +!0* 1234 5!’ 6!7 %!8)909%%9:* : 為規則數 $+!)&+;0&% 及 6!為語言變量 $ 則由第;條規則構成的模糊關系為 # 6!* >.+!0 > 6!* 而對于一定 &? 和 &/?$ 相應的輸出為 # 5!8@&?>.+!= >6!*A > @&/?>.+!B > 6!*A 則

#585!.!8)$0$%$:* 圖 C 模糊控制框圖 根據控制經驗 $ 將其中將語言變量分成七級 # 正 大.D6*$ 正中.DE*$ 正小.DFG$ 零.H*$ 負小.,F*$ 負中.,E*$ 負大.,6*’

在實際控制中 $ 由于被控對象只能接受一個 確定的控制信號 $ 而模糊推理是一個模糊集合 $ 因此 $ 必須建立精確量和模糊量之間的轉換關系 9 即從輸出 的模糊集合中 $ 判決出一個精確量(在此采用固定量 化因子 & 比例因子及隸屬度最大原則 $ 進行離散推理 $ 求出各相應的控制表 $ 并將數據存入-FD 內存 $ 以便 在線使用 $ 實施實時控制(圖 I 1J 中斷采樣子程序 軟件采用定時器 1J 中斷方式 9 中斷服務子程序如 圖 I 所示(系統每隔一個時間段進行一次中斷 9 啟動!K ” 轉換 9 同時完成數據采集 & 數字 #$“ 控制 & 控制量輸 出 & 溫度顯示及數據保存等功能(定時器 1)中斷 $ 為-FD 處理器和計算機通訊 $ 發送數據 $ 便于計算機繪制 溫度跟蹤曲線 $ 鍵盤中斷 $ 完成鍵盤掃描和獲取鍵值(此外 9 為了減小系統在平衡位置的振蕩 9 在軟件上采取 了數據濾波 & 設定死區等措施(!結 語 基于-FD0LJM 模糊 N 數字 D;O 差熱天平采用計算 機控制技術 $ 能夠實現溫度發控制 $ 并在液晶屏和計

算機上實時顯示溫度及溫度跟蹤曲線(實驗中對控制

算法進行多次實驗和調整 9 取得了很好的控制效果 $ 達

到了預期的設計目的(參考文獻 @)A 安穎 9 劉麗娜 P 基于-FD 的高速信號采集與處理系統的設計)Q*% 微計 算機信息

$0JJC9)RCMNCS @0A 孫增圻 $ 等 P 智能控制理論與技術 @EAP 北京 # 清華大學出版社 $)SSMP @TA 于海生 $ 等 P 微型計算機控制技術 @EAP 北京 # 清華大學出版社 $)SSSP @LA 張念淮 $ 等 P 5F6 總線接口開發指南 @EAP 北京 # 國防工業出版社 $0JJ)作者簡介 # 李智強 $ 男

$)SMI&$ 河南工業大學電氣工程 學院 $ 碩士(籍貫 # 山東 + 郭廣靈 $ 女 $)SM)&$ 河南工業

大學電氣工程學院 $ 高級實驗師(,!”###$ 河南鄭州河南工業大學電氣工程學院韓相軍

關永王萬森王雪立 %<166’7’ 12 F(21-G)/+1(H(7+(’’-+(78 <)I+/)6 J1-!G)6 *(+,’-.+/08K’+L+(78D###E$= &)(8M+)(7L;(@;)(8 N1(7 O)(78O)(.’(O)(78M;’6+ U 投稿日期 R0JJCPIP)IG U 修稿日期 R0JJCPIP0VG

e α

dt d ec

E EC

e c α

U

u D/A

y D/A u α

T0

A/D

ADC

FIFO

《 #’(技術應用)** 例》

DSP 開發與應用)LV

第四篇:基于ARM的數據采集系統的設計--優秀畢設申請材料

基于ARM的數據采集系統的設計

班級:通信071 姓名:

指導教師:

摘 要

隨著嵌入式技術的迅速發展,嵌入式終端在家居和工業等領域發揮著越來越重要的作用。本設計提出了一種以嵌入式為基礎的溫度采集系統的設計方案,使得基于嵌入式系統做溫度采集終端有較好的人機交互界面和系統高穩定性等特點。

本文介紹了整個硬件開發環境,bootloader的啟動流程,Linux系統的架構,Linux內核的架構和根文件系統等相關知識。同時,本設計在軟件方面主要編寫了DS18B20的底層驅動程序,進行了Linux內核的配置編譯,設計了QT頂層應用程序;在硬件方面主要設計了DS18B20的硬件電路,搭建了嵌入式交叉開發環境。通過綜合調試最終實現了基于ARM9的嵌入式溫度采集系統的設計。

嵌入式數據采集系統具備了發展潛力大,功耗低,穩定性高,可視化界面好,便于攜帶和功能可擴展的特性。

關鍵詞:嵌入式系統;Linux內核;溫度采集

Abstract With the rapid development of embedded technology, the embedded terminal is playing an increasingly important role in the home and industry.The paper proposes a temperature collection system which is based on embedded system, and using the embedded terminal to do data collection will have characteristics of better man-machine interface and high stability.This article describes the environment of hardware development, the boot process of bootloader, the architecture of Linux system, Linux kernel-related architecture, root file system architecture and other related knowledge.At the same time, this design mainly completed the programming of DS18B20's bottom-level driver, the configuration and compilation of the Linux kernel and the design of QT top-level application program in software.In the respect of hardware, the work includes of designing of the DS18B20's circuit and building the cross-tool development environment.Through synthesized debugging this project the design of the temperature collection system finally is realized, which is based on ARM9 embedded system.The data collection terminal based on embedded system has the high potential for development, low power consumption, high stability, good visual interface, easy to carry and functions which can be expanded, and so on.Key Words: Embedded System;Linux Kernel;Temperature Collection System

一、選題背景和意義

目前我國溫室大棚技術已經在全國范圍內被廣泛應用,這一技術的誕生解決了北方人冬天沒蔬菜的難題。溫室大棚技術其關鍵技術在于對溫室的溫度進行嚴格控制,只有嚴格的溫度控制才能保證棚內植物正常生長,而如何實現對溫度的實時控制,顯而易見溫度采集作為大棚溫控是一個不可忽略的環節,然而傳統的溫度采集系統一般穩定性不高,而且沒有一個良好的人機交互界面,但是如果使用PC機作為溫度采集系統就會大大提高生產成本,而且安裝放置也很不方便。基于這一背景,本設計旨在通過設計一個基于ARM的嵌入式溫度采集系統在成本高和穩定性差之間尋求一個平衡點。

基于ARM的嵌入式系統有諸多優點是傳統電子系統無法比擬的,利用嵌入式開發技術本設計可以設計出具有良好的人機交互界面的實時系統,同時嵌入式系統最大的優點就是軟硬件可裁剪,依據自己系統的需要可以進行靈活的軟硬件設計開發,而且基于ARM的嵌入式系統開發成本低,而且系統穩定性高,功耗低,體積小,并且能夠應用于多種應用場合[1]。這些優點就大大擴大了基于ARM的嵌入式系統的應用范圍。

通過設計嵌入式溫度采集一方面可以解決一些實際問題,但更為重要的是通過本設計是對自己大學四年學習的一個檢驗,由于大學期間沒有學習有關嵌入式的相關知識,通過自學嵌入式開發的相關知識,讓自己對嵌入式有一個深入的理解,為以后的學習工作奠定基礎。

二、mini2440開發板的介紹 1.處理器S3C2440 Mini2440采用了S3C2440作為處理器[2]。S3C2440采用了ARM920T的內核,0.13μm的CMOS標準宏單元和存儲器單元。其功耗低,體積小且靜態設計特別適合于對成本和敏感性有特殊要求的實際應用。其總線采用了新的總線架構AMBA(Advanced Micro Controller Bus Architecture)。S3C2440其特點是CPU是一個16/32位ARM920T的RISC處理器,ARM920T具備MMU,AMBA,BUS以及Harvard高速緩沖體系結構。這一結構具有獨立的16KB指令Cache和16KB數據Cache每個都是由具有8字長的行組成。通過一套完整的通用系統外設,S3C2440無需配置額外的組也同時減少整體系統成本。S3C2440集成了大量的片上功能,所以以S3C2440為核心處理器的mini2440開發板有豐富的接口資源可供開發者編程使用。

2.交叉開發環境

嵌入式系統的開發一般采用“宿主機-目標機”交叉開發方式[3]。首先,利用宿主上豐富的資源以及良好的開發環境來進行開發和仿真目標機上的軟件,再通過H-JTAG口,UTAR口或者是以太網接口將生成的代碼下載到目標機上進行運行。

本設計宿主機主要是使用裝有RedHat5企業版Linux操作系統的PC機,而目標機就是mini2440開發板。組成架構如圖2.1所示。宿主機PC機串口、以太網接口、USB接口目標機Mini2440開發板

圖2.1 嵌入式開發交叉環境構架

三、系統組成及DS18B20的驅動設計 1.系統硬件框圖

本設計硬件系統方面比較簡單,系統部分組成:一是系統控制部分,二是溫度采集部分。其中系統控制部分又包括以下幾個部分:處理器、復位模塊、顯示模塊、外部接口模塊等四大部分組成。而溫度采集本分主要由DS18B20電路組成。具體組成如圖3.1所示。

顯示模塊其他接口CPU及存儲器I/O接口測溫模塊復位模塊 圖3.1 測溫系統硬件框圖

2.DS18B20驅動設計

硬件驅動大體可以分為以下幾類:網絡接口驅動,字符設備驅動,塊設備驅動[5]。字符設備是指按字節來訪問的設備,字符驅動就負責驅動字符設備,這樣的驅動通常實現read、write、open、和close的調用[4]。

Linux用戶一般是通過操作設備文件來訪問和操作各種設備的,所以用戶想要使用DS18B20進行溫度采集時,只需要對設備文件ds18b20進行打開、控制、讀、寫、關閉等一系列操作就可以控制DS18B20進行溫度采集。

在字符設備中存在一種特殊的字符設備---混雜設備,這類設備的主設備號都是10,次設備號通過函數調用可已進行動態分配。本設計DS18B20的驅動就被劃歸為字符設備中的混雜設備。在驅動文件中只需要對DS18B20的時需進行讀、寫、復位時序描寫。

四、bootloader相關知識

1.Bootloader背景知識 簡單地說,bootloader就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,本設計可以初始化硬件設備、建立內存空間映射圖,從而將系統的軟硬件環境帶到一個合適狀態,以便為最終調用操作系統內核準備好正確的運行環境。在嵌入式系統中,通常并沒有像BIOS那樣的固件程序,因此整個系統的加載啟動任務就完全由bootloader來完成。比如在一個基于ARM9的嵌入式系統中,系統在上電或復位時通常都從地址0x00000000處開始執行,而在這個地址處安排的通常就是系統的bootloader程序。

bootloaderLinux kernelRoot file system 圖4.1 嵌入式系統軟件層次結構

2.單片機主控模塊

對于開發板mini2440有多種bootloader,例如 u-boot,supervivi,v-boot等等。他們之間的區別就是不同的bootloader可以引導不同內核。像supervivi能啟動zImage,u-boot能啟動uImage,而zImage和uImage的不同之處就在于在編譯時生成內核的文件頭不同。本設計采用的是supervivi作為bootloader來引導Linux內核。

Supervivi和許多bootloader一樣它的啟動也包括兩個部分:stage1和stage2。Stage1主要實現的是硬件的初始化同時為stage2準備內存空間,并將stage2復制到內存中并設置堆棧,然后跳轉到stage2。.五、Linux內核 1.Linux內核簡介

Linux內核的主要模塊(或組件)分以下幾個部分:存儲管理、CPU和進程管理、虛擬文件系統、設備管理和驅動、網絡通信,以及系統的初始化(引導)、系統調用等。具體如圖5.1所示:

系統調用接口(System Call Interface)進程管理Process Management內存管理Memory Management結構Arch虛擬文件系統Vritual File System網絡協議棧Network Stack設備驅動Device Drivers 圖5.1 Linux內核架構

2.配置編譯生成zImage[5] 使用已經移植好的Linux-2.6.29內核進行zImage的生成,在此過程中通過內核編譯的方式把DS18B20的驅動加載到內核當中,而不是使用內核模塊的方式加載驅動程序,然后通過內核配置,編譯最后生成zImage。添加DS18B20驅動界面如下圖:

圖5.2 添加設備DS18B20

六、QT測溫應用程序 1.QT應用程序流程圖

根據畢設要求,要設計一個直觀的溫度采集界面,能夠實時顯示為溫度值,所以QT界面上能夠同時顯示時間和溫度,使得操作者能夠清楚地看到溫度值和當前時間。應用程序具體流程如圖6.1所示:

開始圖形界面屬性初始化1秒定時器開始定時判斷能否打開設備DS18B20YY寫入命令讀取溫度獲取當前系統時間顯示溫度顯示時間NN1秒定時是否結束結束

圖6.1 應用程序流程圖

2.QT應程序的設計

QT應用程序主要是通過QT designer進行設計的,根據畢設要求,要設計一個直觀的溫度采集界面,能夠實時顯示為溫度值,所以QT界面上能夠同時顯示時間和溫度,使得操作者能夠清楚地看到溫度值和當前時間。具體界面如下圖:

[6]

圖6.2 利用QT designer設計界面

通過在x86平臺下通過配置編譯最后看到在x86平臺下QT應用程序的界面:

圖6.3 x86平臺下QT程序的運行結果

七、root_qtopia件系統和綜合調試

雖然root_qtopia這個文件系統的GUI是基于Qtopia的,但其初始化啟動過程卻是由大部分由busybox完成,Qtopia(qpe)只是在啟動的最后階段被開啟[7]。

在進行了上面步驟的前提下本設計得到了zImage 和root_qtopia.img文件,基于此基本上完成了設計然后進行綜合調試[8],具體步驟如下:

(1)安裝bootloader:連接好超級終端并作如下設置、dnw、電源線,并把開關撥向Nor Flash一端。在超級終端可以看到如下界面:

圖7.1 串口超級終端設置

圖7.2 用H-JTAG和H-JFlasher燒寫vivi

圖7.3 supervivi啟動界面

(2)分別通過選擇“x”、“v”、“k”、“y”分別把supervivi下載到Nand Flash中然后把開關撥向Nand Flash一側,給開發上電,進入dev目錄查看設備中是否有DS18B20。

圖7.4 查看DS18B20設備是否存在

(3)綜合調試結果:

圖7.5 綜合調試結果圖

參 考 文 獻

[1] 孫戈,盧建軍,高理.基于S3C2440的嵌入式Linux開發實例.西安:西安電子科技大學出版社,2010.[2] 三星公司.S3C2440 User's Manual.http://.[7] 百度文庫.root_qtopia文件系統啟動流程http://wenku.baidu.com/view/251bdb27a5e9856a56126021.html.[8] 友善之臂.mini2440開發板用戶手冊.http://www.arm9home.net/read.php?tid-5682.html

第五篇:視頻交通流采集系統解決方案

視頻交通流信息采集系統解決方案 概述

視頻交通流信息采集系統主要包括視頻圖像采集設備、視頻傳輸網絡、交通流視頻檢測器等。視頻檢測器采用虛擬線圈技術,利用邊緣信息作為車輛的檢測特征,實時自動提取和更新背景邊緣,受環境光線變化和陰影的影響較小;同時采用動態窗的方式來進行車輛計數,解決了采用以往固定窗方式進行車輛計數時由于車輛變道而導致的錯誤、重復計數問題。視頻檢測器能對視頻圖像采集設備或交通電視監視系統的視頻信號自動進行檢測,主要采集道路的微觀交通信息如流量、速度、占有率、車輛間距、排隊長度等,適用于近景監控模式。系統功能及特點介紹

2.1 數據接口設計

視頻交通流信息采集系統可以通過調用本項目提供的交通流數據統一接入接口,或由本項目提供數據格式標準化及上傳程序,將采集到的交通流數據共享給本項目相關系統,以實現視頻交通流數據的采集功能。

數據格式標準化及上傳程序數據推送數據共享接口視頻采集系統數據交通信息統一接入接口 圖1 數據接口設計

2.2 系統功能

交通流信息視頻檢測系統的主要功能如下:(1)車輛檢測 系統能夠對輸入的視頻流圖像進行車型、車牌等特征檢測。(2)交通流數據采集功能

系統可以采集交通流數據包括交通流量、平均車速、車道占有率、車型、平均車頭間距、車輛排隊長度、車輛密度、交通流狀態等,交通流數據采集時間間隔在1~60分鐘任意可調。

圖 2 視頻交通流檢測模塊

(3)視頻圖像跟蹤功能

系統能對單路監控前端設備在不同預置位采集的視頻圖像進行不同區域不同事件的自動檢測。一旦檢測到特定的交通事件,事件檢測器應具有該交通事件的視頻圖像目標自動跟蹤、記錄、分析功能。

當輸入的視頻圖像不為設定的預置位的視頻圖像,系統應能自動不進行事件檢測。一旦監控前端設備恢復至設定的預置位,系統應能自動進行事件檢測。

(4)事件圖像抓拍、錄像功能

系統可以根據用戶的設置,完成相應的錄像和圖片抓拍功能。

事件錄像可以按攝像機、按事件類型、按時間歸檔存儲在系統的預錄像子系統中,由系統服務器進行統一的管理調用。

系統循環進行錄像,當發生交通異常事件時,系統能夠提供事發之前和之后的3分鐘間的錄像(可設置)。

系統可通過多種組合查詢條件對視頻交通流檢測所采集的數據進行統計,包括時間-流量統計、時間-平均車速統計、時間-占有率統計、速度-流量統計等;統計結果可導出為Execl報表。

圖3數據查詢統計

圖4數據統計結果

(5)其他功能

? 系統能自動檢測視頻場景變動,判別檢測數據是否有效;并能自動恢復到設定的位置;

? 視頻檢測器能夠保存采集到的交通數據15天以上,在網絡發生故障時能夠將交通數據自動存儲在視頻檢測器內,網絡恢復后可以查詢歷史交通數據,保證數據不會丟失;

? 支持查詢同時支持自動生成各類圖形化報表,使得數據管理更加方便直觀。

2.3 系統特點

(1)車輛檢測算法先進可靠

采用先進的穩定邊緣特征車輛檢測算法,結合區域特征處理,魯棒性高,受環境光照和天氣變化影響較小,特別是針對城市交通流做了很多優化處理,在緩慢和擁堵等飽和交通流情況下仍能保持較高檢測精度,而且不受行人和自行車等混合交通流的干擾。

(2)應用模式靈活多樣

具有多種應用模式及相應工程解決方案,可滿足用戶各種不同視頻資源條件下的交通流采集需求。可接入標清/高清、模擬/數字、單路/多路視頻信號進行檢測,并可通過有線/無線通訊方式將檢測數據傳到監控中心,實現前端/后臺的視頻交通流信息采集。此外,后臺中心采集方式特有刀片式服務器版本,可同時并行處理多路視頻,極大提高用戶機房空間利用率,投資性價比高。

(3)具有自適應場景功能

特有自適應場景技術,即可以自動檢測各種原因造成的攝像頭偏移,判定場景變化,自動調整檢測區域位置,自動控制云臺和攝像頭復位,保證檢測結果的正確和有效。

(4)支持視頻輪巡檢測

支持對任意多路視頻以輪巡方式進行檢測,視頻輪巡方案可由用戶靈活設置,可大大提高視頻資源利用率,性價比高。

(5)自帶數據統計分析功能

提供數據統計分析功能,可根據用戶需要實現單點/多點、早晚高峰/任意時間段、小時/天/任意統計間隔、截面/分車道、單個參數/多個參數等的統計和對比分析、生成統計報表,并可用二維或三維柱狀圖和曲線圖的方式進行結果展示,直觀明了。應用案例

基于智能視頻交通流檢測技術,方緯公司自主研發了視頻交通流檢測軟件,并已在廣東省公安廳交通管理局、佛山市交通局、香港運輸署等地進行了應用。

(1)廣州市交委公交專用道視頻交通流檢測(一、二、三期)? 應用地點:廣州市交委

? 項目名稱:公交專用道視頻交通流檢測(一、二、三期)? 應用規模:200路視頻

? 應用場景:市區主干道,部分場景如下圖所示:

圖5廣州市城市主干路交通流檢測場景

? 應用情況:

該案例為后臺檢測應用,由廣州市交委數據中心機房的檢測服務器通過網絡從前端網絡攝像機或硬盤錄像機直接獲取視頻流進行交通流檢測。一期項目采用10臺工控機檢測80路視頻,二期和三期項目采用3臺刀片式服務器檢測120路視頻,極大地節省了機房空間。由于應用場景為城市道路,因此交通流情況比較復雜,如早晚高峰會出現緩慢或擁堵、車輛變線行駛頻繁、行人和自行車干擾等,但即便在如此復雜的交通流情況下,本產品仍能保持較高的檢測精度:所有視頻的車流量檢測準確率均大于91%。

(2)泰國布吉機場高速公路智能化管理系統項目一期 ? 應用地點:泰國機場高速

? 項目名稱:泰國布吉機場高速公路智能化管理系統項目一期 ? 應用規模:60路視頻

? 應用場景:高速公路,部分應用場景如下圖所示:

圖6泰國高速路交通流檢測場景

? 應用情況

該案例為后臺檢測應用,由泰國交通部機房的檢測服務器通過網絡從前端網絡攝像機(海康威視產品)直接獲取視頻流進行交通流檢測。由于當地只提供ADSL網絡,帶寬較小,因此本產品有針對性地調整了檢測視頻分辨率,每路視頻只需0.5M帶寬,很好地解決了帶寬不足的問題。此外,由于應用場景為高速公路,車速都比較快,但本產品仍能保持較高的檢測精度:車流量檢測準確率均大于95%,車速檢測精度大于90%。

下載基于ARM的視頻采集系統的設計與實現word格式文檔
下載基于ARM的視頻采集系統的設計與實現.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    人事管理系統設計與實現

    人事管理系統設計與實現 目 錄 前 言.... 1 1 需求分析.... 2 1.1 系統需求... 2 1.1 功能需求... 2 1.3 可靠性要求... 3 1.4 性能需求... 3 2 開發環境簡介.... 4 2.1 Del......

    基于ARM的指紋識別門禁系統設計

    HUBEI NORMAL UNIVERSITY 嵌入式課程設計報告 課題: 指紋識別門禁系統設計 姓名: 萬苗 學號: 20*** 院系: 計算機科學與技術學院班級: 1303班導師: 曹杉杉 第 1 / 23......

    基于ARM的IP網絡電話系統設計.

    海思工作室 杭州匯文教育咨詢有限公司 ——VoIP電話方案投標書 海思工作室 海思工作室 VoIP電話方案投標書 目 錄 一、公司介紹以及項目綜述 ...................................

    電能計量采集系統的應用與實現[5篇模版]

    電能計量采集系統的應用與實現 摘要:作為一種重要的自動化電力系統,電能計量采集系統十分復雜,它將集合主站系統,電能采集終端,電能表,輔助設備系統等多種功能和多個環節為一體,而......

    視頻信息的采集與簡單加工”教學設計

    本節課是教育科學出版社出版的《信息技術基礎》(必修)第五章多媒體信息加工第二節的教學內容。1課時。筆者從表達信息的需求出發,介紹視頻信息采集與簡單加工的相關知識與技能,......

    嵌入式系統ARM實驗報告

    南京郵電大學通信與信息工程學院 實驗報告 實驗名稱:實驗一基于ADS開發環境的設計 實驗二嵌入式Linux交叉開發環境的建立 實驗三嵌入式Linux環境下的程序設計課程名稱嵌入式......

    信息采集系統設計說明書

    信息采集系統概要設計 整體網絡拓撲 信息采集系統的總體網絡拓撲如下圖所示: 工程師站服務器公網采集站1采集站2... 網絡結構說明 設備與采集站屬于廠區內的同一個私有網絡。......

    辦公自動化系統的設計與實現

    辦公自動化系統的設計與實現 1、摘要 多年以來人們都使用傳統的人工方式管理企業內部信息。這種管理方式不僅讓企業信息管理者感到非常的厭倦,也存在著不可避免的缺點,如效......

主站蜘蛛池模板: 67194熟妇人妻欧美日韩| 免费女人高潮流视频在线观看| 欧美野外疯狂做受xxxx高潮| 亚洲国产成人久久综合同性| 欧美日韩国产专区一区二区| 自偷自拍亚洲综合精品麻豆| 免费观看又色又爽又湿的视频软件| 99久久精品日本一区二区免费| 男人扒开女人腿做爽爽视频| 日韩久久久久久中文人妻| 精品久久国产综合婷婷五月| 调教套上奶牛榨乳器喷奶水| 亚洲 欧洲 日韩 综合二区| 影音先锋久久久久av综合网成人| 狠狠躁天天躁日日躁欧美| 99久久成人国产精品免费| 色橹橹欧美在线观看视频高清| 午夜精品久久久久久毛片| 99久久精品日本一区二区免费| 亚洲色大成网站www永久男同| 美女高潮黄又色高清视频免费| 中文字幕人成乱码熟女香港| 亚洲色帝国综合婷婷久久| 日本最新免费二区三区| 男插女高潮一区二区| 亚洲乱亚洲乱妇24p| 麻豆久久久9性大片| 欧美精品亚洲精品日韩专区va| 成人国内精品久久久久一区| 9 9久热re在线精品视频| 少妇太爽了在线观看| 丰满大乳少妇在线观看网站| 国产在线视频国产永久| 国产成人亚洲综合色婷婷秒播| 熟妇高潮一区二区三区| 午夜福利1000集在线观看| 又色又爽又高潮免费视频国产| 亚洲欧洲日产无码中文字幕| 国产精品人妻久久毛片高清无卡| 国产亚洲aⅴ在线电影| 日韩av无码成人无码免费|