嵌入式DVR系統(tǒng)設計畢業(yè)設計論文_第1頁
嵌入式DVR系統(tǒng)設計畢業(yè)設計論文_第2頁
嵌入式DVR系統(tǒng)設計畢業(yè)設計論文_第3頁
嵌入式DVR系統(tǒng)設計畢業(yè)設計論文_第4頁
嵌入式DVR系統(tǒng)設計畢業(yè)設計論文_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、摘 要 本文提出了一種基于 arm 處理器的嵌入式圖像視頻監(jiān)控系統(tǒng)的設計 方案。本系統(tǒng)采用華為海思 hi3515(arm926ej)為處理器,以嵌入式 linux 做為操作系統(tǒng),通過基于 video4linuxvideo4linux 的 usbusb 攝像頭進行圖像 采集,最后顯示在 lcd 顯示屏。本文首先介紹了視頻監(jiān)控系統(tǒng)的時代背 景、實踐意義和研究現(xiàn)狀,并對嵌入式系統(tǒng)開發(fā)的基礎理論知識做了簡 單的介紹,在此基礎上分析了視頻監(jiān)控系統(tǒng)的總體結(jié)構設計;然后分析 linux 操作系統(tǒng)的開發(fā)技術,包括開發(fā)環(huán)境的建立、bootloader 的移植、 linux 內(nèi)核移植和根文件系統(tǒng)的制作,完成了利用

2、 usb 攝像頭采集圖像 的功能;然后介紹圖像在 lcd 上的顯示,并給出了最終的實驗結(jié)果。 關鍵字關鍵字:海思hi3515;視頻監(jiān)控;video4linux ;圖像采集 abstract this paper puts forward a designation of embedded images video monitoring system that based on the arm processor .this system use the huawei haisi (arm926ej) as the processor, with embedded linux as operat

3、ing system, through the usb camera that based on video4linux collect images, finally display on lcd screen. this thesis firstly introduces the research background, practical significance,research status and the basic theoretical knowledges of embedded system development on this basis gives the the o

4、verall structure desgin of this system;then it analyses carefully the technology of embedded linux system involve the development environment,bootloader,linux kernel and the root file system,and completes the image acquisition by usb camera;after that,it describes how to display the images on lcd an

5、d gives the final experimental results keywords:keywords: haisihi3515haisihi3515;video monitor;video4linux;image collection 目 錄 目 錄 .iii 1 1 緒緒 論論 .1 1.11.1 前前 言言 .1 1.21.2 課題研究背景與意義課題研究背景與意義 .1 1.2.1 課題研究背景課題研究背景.1 .2 課題研究意義課題研究意義.2 1.2.3 國內(nèi)外研究現(xiàn)狀.2 2 2 嵌入式系統(tǒng)的選擇嵌入式系統(tǒng)的選擇 .4 4 2.1.1 嵌入式系統(tǒng)的分類 .

6、4 2.1.2 嵌入式系統(tǒng)的選擇 .6 3.1 bootloader移植.8 3.1.1 bootloader 介紹.8 .2 u-bootu-boot 移植移植.9 3.2 內(nèi)核移植 .11 3.2.1 移植環(huán)境 .11 3.2.2 內(nèi)核移植過程 .11 3.3 文件系統(tǒng)移植 .12 移植步驟:移植步驟:.12 4.1 video4linux簡介 .13 4.2 video4linux 編程指南 .14 4.2.1.視頻編程的流程 .14 4.2.2 定義的數(shù)據(jù)結(jié)構及使用函數(shù) .14 4.2.3.video4linux 支持的數(shù)據(jù)結(jié)構及其用途.15 4.2.4 ioctl 函

7、數(shù)介紹.19 4.3 截取圖象的方法 .20 4.3.1 用 mmap(內(nèi)存映射)方式截取視頻 .20 4.3.2 直接讀設備 .22 5 5 圖像在圖像在 lcdlcd 屏上的顯示屏上的顯示 .2323 5.1 framebuffer的介紹.23 5.2 圖像由 24 位圖向 16 位圖轉(zhuǎn)換 .23 5.3 實物圖 .24 6 6 結(jié)束語結(jié)束語 .2525 參考文獻參考文獻 .2626 致致 謝謝 .2727 1 1 緒緒 論論 1.11.1 前前 言言 嵌入式系統(tǒng)(embedded system) ,是一種“完全嵌入受控器件內(nèi)部,為特定應 用而設計的專用計算機系統(tǒng)” ,根據(jù)英國電機工程師協(xié)

8、會的定義,嵌入式系統(tǒng)為控制、 監(jiān)視或輔助設備、機器或用于運作的設備1。 隨著網(wǎng)絡技術和集成電路技術的高速發(fā)展,嵌入式系統(tǒng)已經(jīng)成為it的一個焦點。 嵌入式圖像采集系統(tǒng)大量的應用于自動控制、工業(yè)生產(chǎn)、軍事技術和家用消費電子 等各個領域。 傳統(tǒng)的圖像采集方法是采用ccd攝像機獲得視頻信息,這種方法易于實現(xiàn),但成 本較高。隨著arm系列處理器應用的越來越廣泛和基于linux的嵌入式技術的迅速發(fā) 展,利用linux自身帶有的tcp/ip協(xié)議來實現(xiàn)遠程監(jiān)控和圖像傳輸已經(jīng)成為可能。 開發(fā)具有自主知識產(chǎn)權的嵌入式處理器,嵌入式操作系統(tǒng)和嵌入式高端產(chǎn)品, 對我國的民族工業(yè)來講,將有十分重要的戰(zhàn)略意義。 1.2課

9、題研究背景與意義課題研究背景與意義 1.2.1 課題研究背景課題研究背景 隨著計算機技術的不斷發(fā)展,人類步入網(wǎng)絡時代以來,以“信息采集、處理、 監(jiān)控”為核心的視頻監(jiān)控系統(tǒng)越來越廣泛地應用于電視會議、可視電話、遠程監(jiān)控、 智能交通、智能小區(qū)等遠程圖像傳輸系統(tǒng)中。傳統(tǒng)的視頻監(jiān)控系統(tǒng)一般基于pc機和 視頻采集卡的形式,傳統(tǒng)系統(tǒng)采集的圖像品質(zhì)不高、抗干擾能力差、系統(tǒng)體積大、 成本高、攜帶不便,在遠距離通訊、多系統(tǒng)控制中很難實現(xiàn)。而采用基于dsp結(jié)合 fpga方式又需投入大量的人力和資金,成本高2。 在這種背景下,設計一種輕便小巧的系統(tǒng)來采集傳輸圖像成為市場所需。 嵌入式linux操作系統(tǒng)具有可移植性好

10、、網(wǎng)絡功能強、有優(yōu)秀的gun編譯工具支 持等優(yōu)點,linux的開放源代碼和免費的優(yōu)點也使成本大大降低,嵌入式系統(tǒng)把微處 理器與其專用軟件平臺相結(jié)合,大大提高了操作系統(tǒng)的效率,采用usb接口的攝像頭 在一定程度上突出了采樣速率高、圖像質(zhì)量高、通用性好的特點。 基于上述原因,本文設計了一種新的視頻采集處理系統(tǒng)基于arm和linux的 嵌入式視頻監(jiān)控系統(tǒng)。 .2 課題研究意義課題研究意義 本課題研究的是基于嵌入式linux的視頻圖像采集,利用市場上很常見的中星微 系列的usb攝像頭來得到現(xiàn)場的圖像數(shù)據(jù),利用linux內(nèi)核中的video4linux編程接口 函數(shù)采集,在pc機上和lcd

11、屏上實現(xiàn)了圖像的實時顯示。此類視頻采集系統(tǒng)對于各個 領域都有重要的意義。 例如,在日常生活中,視頻監(jiān)控,智能交通和智能小區(qū)的發(fā)展,生物醫(yī)學中的x 射線成像、染色體分類技術等,衛(wèi)星遙感圖像識別,辦公自動化中的門禁系統(tǒng)、手 寫識別、票據(jù)以及人民幣的識別,以及工業(yè)視覺,虛擬現(xiàn)實等等領域,圖像采集都 有著極其重要的應用3。 在軍用方面。圖像采集收集的情報通過無線傳輸?shù)奖O(jiān)控指揮中心,為戰(zhàn)場行動 提供了重要的情報依據(jù),在強大空中偵察下,我軍能夠及時掌握敵方的大規(guī)模行動, 其部署和移動很容易暴露,靈活、機動、可靠的情報搜集,戰(zhàn)時能起到很好的偵察 保障功能,為決策人緣提供有力的決策依據(jù)。 在不就的將來,也許我

12、們能體驗到,當我們在各種需要身份驗證和識別時,需 要的不再是鑰匙、密碼,而僅僅是一個攝像頭而已。試想,這項技術的發(fā)展將會給 我們的生活帶來多么深遠的影響。因此,研究圖像采集及其處理有著重大的意義。 1.2.3 國內(nèi)外研究現(xiàn)狀 視頻監(jiān)控系統(tǒng)是安全防范系統(tǒng)的重要組成部分. 目前在國內(nèi)外市場上,主要有 模擬視頻監(jiān)控和數(shù)字視頻監(jiān)控類產(chǎn)品. 傳統(tǒng)的模擬監(jiān)控系統(tǒng)技術已非常成熟,性能 穩(wěn)定、應用廣泛,但已不能滿足人們?nèi)找嬖鲩L的需要. 模擬視頻信號的傳輸工具主 要是同軸電纜,通常只適合于小范圍的區(qū)域監(jiān)控;系統(tǒng)的擴展能力差,新的設備也 很難添加到原有的系統(tǒng)之中;由于各部分獨立運作,相互之間的控制協(xié)議很難互通,

13、無法形成有效的報警聯(lián)動,聯(lián)動只能在有限的范圍內(nèi)進行4。 近年來,隨著計算機、網(wǎng)絡、圖像處理以及傳輸技術的飛速發(fā)展,視頻監(jiān)控制 技術也有長足的進步,前端一體化、視頻數(shù)字化、監(jiān)控網(wǎng)絡化、系統(tǒng)集成化是視頻 監(jiān)控系統(tǒng)公認的發(fā)展方向。本文基于這種發(fā)展趨勢,提出了1 種性能高效、價格低 廉解決方案. 本方案采用pc機、高性能嵌入式設備以及先進的圖像處理技術,通過 internet傳輸圖像. 本系統(tǒng)的優(yōu)點在于:數(shù)字監(jiān)控系統(tǒng)可以在internet上傳輸圖像 數(shù)據(jù),基本上不受距離限制,信號不易受干擾,可大幅度提高圖像品質(zhì)和穩(wěn)定性; 使數(shù)字化存儲成為可能,經(jīng)過壓縮的視頻數(shù)據(jù)可存儲在磁盤陣列中或保存在光盤中, 查詢

14、十分簡便快捷;基于嵌入式技術,系統(tǒng)硬件和操作系統(tǒng)捆綁較為緊密,功能專 一,因此性能上更穩(wěn)定,且便于安裝、維護,易于實現(xiàn)系統(tǒng)的模塊化設計,便于管 理3。 2 嵌入式系統(tǒng)的選擇嵌入式系統(tǒng)的選擇 2.1.1 嵌入式系統(tǒng)的分類 目前嵌入式操作系統(tǒng)種類繁多,有深嵌入系統(tǒng),也有淺嵌入式系統(tǒng);有多任務, 也有單任務系統(tǒng);有實時系統(tǒng),也有分時系統(tǒng)。其實,嵌入式操作系統(tǒng)是與應用環(huán) 境密切相關的,從應用范圍角度來看,大致可以分為通用型的嵌入式操作系統(tǒng)如 windowsce、vxworks、嵌入式 linux 等和專用型的嵌入式操作系統(tǒng)如 palm0s、sysbian,smartphone 等。從實時性的角度看,又

15、可以分為兩類。一類是 面向控制、通信等領域的實時操作系統(tǒng),如 microsoft 公司得 windows ce、windriver 公司的 vxworks、isi 的 psos、qnx 系統(tǒng)軟件公司的 qnx、ati 的 nucleus 等;另一類是面向消費電子產(chǎn)品的非實時操作系統(tǒng),這類產(chǎn)品包括個人數(shù) 字助理(pda)、移動電話、機頂盒、電子書、webphone 等,如現(xiàn)在非常流行的 mierosoft 公司的 smartphone 操作系統(tǒng)等等。20 世紀 80 年代,商業(yè)化的嵌入式操 作系統(tǒng)開始得到蓬勃發(fā)展6。目前國內(nèi)外已有幾十種商業(yè)操作系統(tǒng)可供選擇。 目前比較流行的嵌入式操作系統(tǒng)比較多,

16、對其中幾類進行介紹如下7: (1)palm0s palm0s 是一種 32 位的嵌入式操作系統(tǒng)。palmos 提供了串行通信接口和紅外線 傳輸接口,利用它可以方便地與其它外部設備通信;擁有開放的 0s 應用程序接口, 開發(fā)商可根據(jù)需要自行開發(fā)所需的應用程序。在個人數(shù)字助理(pda)市場上,palmos 是全球知名、使用人數(shù)最多的 pda 操作系統(tǒng)。 palmos 是一套具有極強開放性的系統(tǒng),現(xiàn)在有大約數(shù)千種專門為 palmos 編寫 的應用程序。 palmos 操作系統(tǒng)的一個最大的特點就是省電以及系統(tǒng)資源開銷較少,而且第三 方應用程序非常豐富。由于 palmos 采用開放式架構,有很多 pal

17、mos 的使用者都投 入到軟件開發(fā)工作中,這也是 palmos 操作系統(tǒng)成功的一個重要原因。 (2)vxworks vxworks 操作系統(tǒng)是美國 windriver 公司于 1983 年設計開發(fā)的一種嵌入式實時 操作系統(tǒng)。它的良好的持續(xù)發(fā)展能力、高性能的內(nèi)核以及友好的用戶開發(fā)環(huán)境,使 其在嵌入式實時操作系統(tǒng)領域占據(jù)一席之地。它以其良好的可靠性和卓越的實時性 被廣泛地應用在通信、軍事、航空、航天等高精度技術及實時性要求極高的領域中, 如衛(wèi)星通訊、軍事演習、彈道制導、飛機導航等。 vxworks 具有可靠性,良好的實時性,高度靈活的可裁減性等突出特點。 (3)uc/os uc/os 是美國人 j

18、ean labrosse 在 1992 年開發(fā)的一個嵌入式操作系統(tǒng),并 于 1998 年推出它的升級版本 uc/os 。uc/os 是一種免費、開放源代碼、結(jié)構 小巧、基于可搶占優(yōu)先級調(diào)度的實時操作系統(tǒng),其內(nèi)核提供任務調(diào)度與管理、時間 管理、任務同步和通信、內(nèi)存管理和中斷服務等功能。 uc/os 主要面向中小型嵌入式系統(tǒng),具有執(zhí)行效率高、占用空間小、結(jié)構簡 潔、實時性能優(yōu)良和可擴展性強等特點,最小內(nèi)核可編譯至 2kb,一般情況下占用 10kb 數(shù)量級。它的內(nèi)核本身并不支持文件系統(tǒng),但它具有良好的擴展性能,如果需 要的話可以自行加入。由于免費、源碼開放、規(guī)模較小,uc/os 不僅在眾多的商 業(yè)領

19、域中獲得了廣泛的應用,而且被很多大學所接納,作為教學用的嵌入式實時操 作系統(tǒng)。 (4)嵌入式 linux linux 現(xiàn)在已經(jīng)是最為流行的一款開放源代碼的操作系統(tǒng)。linux 是 1991 年由 芬蘭人 linus torvalds 發(fā)明的,從誕生到現(xiàn)在的短短十幾年的時間,linux 已經(jīng)發(fā) 展成為一個功能強大、設計完善的操作系統(tǒng),不僅在通用操作系統(tǒng)領域與 windows 等商業(yè)系統(tǒng)分庭抗爭,而且在新興的嵌入式操作系統(tǒng)領域也獲得了飛速的發(fā)展。由 于 linux 系統(tǒng)本身是開放源碼的,又是一種多任務、穩(wěn)定性高、內(nèi)核可裁減的操作 系統(tǒng),它在嵌入式系統(tǒng)方面大放光芒。在各種嵌入式 linuxos 迅速

20、發(fā)展的狀況下, linux 在嵌入式系統(tǒng)方面的發(fā)展速度和影響是任何一種操作系統(tǒng)不能比的。 嵌入式 linux 是在標準 linux 的基礎上針對嵌入式系統(tǒng)進行內(nèi)核裁減和優(yōu)化后 形成的,使其體積更小、性能更高,同時,由于它是免費的,沒有其它商業(yè)性嵌入 式操作系統(tǒng)需要的許可證費用,所以具有很強的市場競爭力。當前國家對研制自主 操作系統(tǒng)大力支持,為源碼開放的 linux 的推廣提供了廣闊的發(fā)展前景。 (5)windows ce windows ce 是微軟公司在嵌入式操作系統(tǒng)市場上的一個重要產(chǎn)品。它最早于 1996 年開始發(fā)行,但是最初并沒有取得成功,直到 windows ce 3.0 以后他才真正

21、 被人們所接受。目前的最新版本為 windows ce.net。 windows ce 是一個 32 位的多線程、多任務的嵌入式操作系統(tǒng),它經(jīng)過壓縮, 可以移植,能夠開發(fā)多種企業(yè)和客戶設備,其操作界面來源于 windows,但 windows ce 是基于 win32api 重新開發(fā)的、新型的信息設備平臺。windows ce 具有模塊化、 結(jié)構化和基于 win32 應用程序接口以及與處理器無關等特點,適用于各種嵌入系統(tǒng) 和產(chǎn)品。它的模塊化設計方式使得系統(tǒng)開發(fā)人員和應用開發(fā)人員能夠為多種多樣的 產(chǎn)品來定制它。若開發(fā)者熟悉 windows 開發(fā)環(huán)境,可以基于 windows ce 開發(fā)出更好 的

22、應用程序。隨著嵌入式系統(tǒng)逐漸深入生活,越來越多的嵌入式設備都應用 wince 系統(tǒng)8。 2.1.2 嵌入式系統(tǒng)的選擇 多種嵌入式系統(tǒng)各有千秋,但是本課題研究選擇了嵌入式 linux 系統(tǒng),因為它 在嵌入式領域具有獨特的優(yōu)點。 嵌入式 linux 是將日益流行的 linux 操作系統(tǒng)進行裁剪修改,使之能在嵌入式 計算機系統(tǒng)上運行的一種操作系統(tǒng)。嵌入式 linux 既繼承了 interlnet 上無限的開 放源代碼資源,又具有嵌入式操作系統(tǒng)的特性。嵌入式 linux 的特點是版權費免費; 購買費用媒介成本技術支持全世界的自由軟件開發(fā)者提供支持網(wǎng)絡特性免費,而且 性能優(yōu)異,軟件移植容易,代碼開放,有

23、許多應用軟件支持,應用產(chǎn)品開發(fā)周期短, 新產(chǎn)品上市迅速,因為有許多公開的代碼可以參考和移植,實時性能 rt_linux hardhat linux 等嵌入式 linux 支持,實時性能穩(wěn)定性好安全性好9。 linux 做嵌入式的優(yōu)勢,首先,linux 是開放源代碼的,不存在黑箱技術,遍布 全球的眾多 linux 愛好者又是 linux 開發(fā)者的強大技術支持;其次,linux 的內(nèi)核小、 效率高,內(nèi)核的更新 嵌入式 linux 速度很快,linux 是可以定制的,其系統(tǒng)內(nèi)核最小 只有約 134kb。第三,linux 是免費的 os,在價格上極具競爭力。 linux 還有著嵌 入式操作系統(tǒng)所需要的

24、很多特色,突出的就是 linux 適應于多種 cpu 和多種硬件平 臺,是一個跨平臺的系統(tǒng)。到目前為止,它可以支持二三十種 cpu。而且性能穩(wěn)定, 裁剪性很好,開發(fā)和使用都很容易。很多 cpu 包括家電業(yè)芯片,都開始做 linux 的 平臺移植工作。移植的速度遠遠超過 java 的開發(fā)環(huán)境。也就是說,如果今天用 linux 環(huán)境開發(fā)產(chǎn)品,那么將來換 cpu 就不會遇到困擾。同時,linux 內(nèi)核的結(jié)構 在網(wǎng)絡方面是非常完整的,linux 對網(wǎng)絡中最常用的 tcp/ip 協(xié)議有最完備的支持。 提供了包括十兆、百兆、千兆的以太網(wǎng)絡,以及無線網(wǎng)絡,toker ring(令牌環(huán)網(wǎng))、 光纖甚至衛(wèi)星的支

25、持。所以 linux 很適于做信息家電的開發(fā)10。 3 3 軟件平臺的設計與實現(xiàn)軟件平臺的設計與實現(xiàn) 3.1 bootloader 移植 3.1.1 bootloader 介紹 系統(tǒng)引導程序通常稱為boot loader,是在系統(tǒng)復位后執(zhí)行的第一段軟件代碼, 相當于pc機上的bios。通常固化在硬件的某個固態(tài)存儲結(jié)構中,上電后自啟動。通 過bootloader這段代碼,我們可以初始化硬件設備、建立內(nèi)存空間的映射圖,從而 將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準備好正 確的環(huán)境。 bootloader是嚴重地依賴于硬件而實現(xiàn)的。每種不同體系結(jié)構的處理器都有不 同的boo

26、tloader.不過bootloader的發(fā)展也趨于支持多種體系結(jié)構,現(xiàn)在比較成熟的 有一下幾種: (1)vivi vivi是由韓國mizi公司專門針對基于arm處理器的嵌入式系統(tǒng)開發(fā)的一種boot loader,因為vivi 目前只支持使用串口和主機通信,所以必須使用一條串口電纜來 連接目標板和主機。vivi一般有如下作用。 1)把內(nèi)核(kernel)從flash復制到ram,然后啟動它; 2)初始化硬件; 3)下載程序并寫入flash; 4)檢測目標板。 (2)redboot redboot也稱紅帽子嵌入式調(diào)試引導程序。redboot 是一個專門為嵌入式系統(tǒng)定 制的引導啟動工具,最初由re

27、dhat開發(fā),它是基于ecos(embedded configurable operating system)的硬件抽象層,同時它繼承了ecos的高可靠性、簡潔性、可配 置性和可移植性等特點。redboot集bootloader、調(diào)試、 flash燒寫于一體,支持串 口、網(wǎng)絡下載,執(zhí)行嵌入式應用程序。既可以用在產(chǎn)品的開發(fā)階段(調(diào)試功能) ,也 可以用在最終的產(chǎn)品上(flash更新、網(wǎng)絡啟動) 。redboot支持下載和調(diào)試應用程序, 開發(fā)板可以通過bootp/dhcp協(xié)議動態(tài)配置ip地址,支持跨網(wǎng)段訪問。用戶可以通過 tftp協(xié)議下載應用程序和image,或者通過串口用x-modem/y-mo

28、dem下載。redboot支 持用gdb(the gnu debugger)通過串口或者網(wǎng)卡調(diào)試嵌入式程序,可對gcc編譯的 程序進行源代碼級的調(diào)試。相比于簡易jtag調(diào)試器,它可靠、高速(cpu的 cache打 開后,通過網(wǎng)卡tftp下載能達到1mbps,gdb下載的速度能達到2mbps) 、穩(wěn)定,用戶 可通過串口或網(wǎng)卡,以命令行的形式管理 flash上的image,下載image到flash。動 態(tài)配置redboot啟動的各種參數(shù)、啟動腳本,上電后redboot可自動從flash或 tftp 服務器上下載應用程序執(zhí)行。 (3)u-boot u- boot是德國denx小組開發(fā)的用于多種嵌入

29、式cpu的bootloader程序,它可以 運行在基于powerpc、arm、mips等多種嵌入式開發(fā)板上。本linux系統(tǒng)的啟動代碼用 的是u-boot。 .2 u-bootu-boot 移植移植 要移植u-boot到嵌入式產(chǎn)品中,首先要在宿主機上編譯配置u-boot,將u-boot 源代碼編譯成為可以在arm上執(zhí)行的二進制文件,并燒寫到實驗箱上才能執(zhí)行。本實 驗系統(tǒng)采用將u-boot燒寫到nand flash(smc卡)中進行啟動。 移植過程如下: (1)在工作目錄下解壓uboot 輸入命令:tar -xjvf u-boot-1.3.1.tar.bz2 (2)進入u-boo

30、t目錄,修改makefile 輸入以下命令:cd u-boot-1.3.1 vim makefile 為tekkaman2440建立編譯項: sbc2410 x_config: unconfig $(mkconfig) $(:_config=) arm arm920t sbc2410 x null s3c24x0 tekkaman2440_config:unconfig $(mkconfig) $(:_config=) arm arm920t tekkaman2440 tekkaman s3c24x0 各項的意思如下: arm: cpu的架構(arch) arm926ej: cpu的類型(cp

31、u),其對應于cpu/arm926ej子目錄。 tekkaman2440: 開發(fā)板的型號,對應于board/tekkaman/tekkaman2440目錄。 tekkaman: 開發(fā)者/或經(jīng)銷商(vender)。 s3c24x0: 片上系統(tǒng)(soc)。 同時在“ifndef cross_compile ”之前加上自己交叉編譯器的路徑,比如我使 用crosstool-0.43制作的基于2.6.24內(nèi)核和gcc-4.1.1-glibc-2.3.2的arm9tdmi交叉 編譯器,則: cross_compile=/home/tekkamanninja/working/gcc4.1.1/gcc-4.1

32、.1-glibc- 2.3.2/arm-9tdmi-linux-gnu/bin/arm-9tdmi-linux-gnu- (3)在/board子目錄中建立自己的開發(fā)板tekkaman2440目錄 由于我在上一步板子的開發(fā)者/或經(jīng)銷商(vender)中填了 tekkaman ,所以開發(fā) 板tekkaman2440目錄一定要建在/board子目錄中的tekkaman目錄下 ,否則編譯會出 錯。 tekkamanninjaarm9-host u-boot-1.3.1$ cd board tekkamanninjaarm9-host board$ mkdir tekkaman tekkaman/tek

33、kaman2440 tekkamanninjaarm9-host board$ cp -arf sbc2410 x/* tekkaman/tekkaman2440/ tekkamanninjaarm9-host board$ cd tekkaman/tekkaman2440/ tekkamanninjaarm9-host tekkaman2440$ mv sbc2410 x.c tekkaman2440.c 還要修改自己的開發(fā)板tekkaman2440目錄下的makefile文件,不然編譯時會出錯: tekkamanninjaarm9-host tekkaman2440$ kwrite mak

34、efile cobjs := tekkaman2440.o flash.o 在include/configs/中建立配置頭文件 tekkamanninjaarm9-host tekkaman2440$ cd ././. tekkamanninjaarm9-host u-boot-1.3.1$ cp include/configs/sbc2410 x.h include/configs/tekkaman2440.h (4)測試編譯能否成功 1)配置 tekkamanninjaarm9-host u-boot-1.3.1$ make tekkaman2440_config configuring

35、for tekkaman2440 board. 2)測試編譯 tekkamanninjaarm9-host u-boot-1.3.1$make 測試通過后進行下一步 3.2 內(nèi)核移植 3.2.1 移植環(huán)境 交叉編譯器:arm-linux-gcc 3.4.1 安裝交叉編譯器 3.2.2 內(nèi)核移植過程 (1)下載壓縮包:utu-linux_for_s3c2440_v1.5.3-2007-11-5.tar.bz2 (2)解壓: tar xjvf utu-linux_for_s3c2440_v1.5.3-2007-11-5.tar.bz2 (3)配置及編譯內(nèi)核 make menuconfig:提供基于

36、ncurses圖形界面的用戶配置界面是字符的圖形界 面, 出現(xiàn)如圖所示的界面. (4)修改屏幕偏移 由于視頻監(jiān)控系統(tǒng)還設計到lcd屏的顯示,所以要修改一下屏幕的偏移: 打開: /home/utu-linux_for_s3c2440_v1.5.3/arch/arm/mach-s3c2410/mach- utu2440.c 將寄存器3做如下修改即可: .lcdcon3 = s3c2410_lcdcon3_hbpd(55) | s3c2410_lcdcon3_hozval(319) | s3c2410_lcdcon3_hfpd(5), 完成內(nèi)核配置后,執(zhí)行如下命令:#make ulmage:創(chuàng)建內(nèi)核

37、鏡像文件ulmage,再 下載到tftp中。 在超級終端中執(zhí)行以下命令即可:run install-kernel 圖3.1 內(nèi)核配置界面 3.3 文件系統(tǒng)移植 移植步驟:移植步驟: (1)拷貝制作yaffs文件下載鏡像文件的工具mkyaffsimage到虛擬機 /utulinux/s3c2440下; (2)拷貝文件系統(tǒng)源代碼壓縮包s3c2440_recover.tar.bz2到虛擬機 /utulinux/s3c2440目錄下; (3)解壓縮s3c2440_recover.tar.bz2到目錄/utulinux/s3c2440下; (4)輸入命令:./mkyaffsimage s3c2440_r

38、ecover test.yaffs 生成test.yaffs,將test.yaffs改名為filesystem.yaffs下載到tftp中。 在超級終端中執(zhí)行以下命令即可:run install-filesystem 4 圖像采集程序設計圖像采集程序設計 4.1 video4linux 簡介 video4linux是linux中關于視頻設備的內(nèi)核驅(qū)動,他針對視頻設備的應用程序 編程提供一系列接口函數(shù),配合適當?shù)囊曨l采集設備和相應的驅(qū)動程序,可以實現(xiàn) 影像采集、am/fm廣播、頻道切換等功能,在遠程會議、可視電話、視頻監(jiān)控系統(tǒng)中 有著廣泛的應用。 在linux下,所有外設都被看成是一種特殊的文件

39、,稱之設備文件,這里只要針 對的設備文件是/dev/video0,進行視頻圖像采集方面的程序設計。 基于vide04linux的圖像采集的程序流程如圖4.1所示。 開始 開啟設備 獲取設備信息和圖 像信息 對采集緩沖區(qū)進行 內(nèi)存映射 捕捉視頻數(shù) 據(jù) 圖像數(shù)據(jù)處 理 采集中止? 關閉設備 結(jié)束 n y 圖4.1 圖像采集流程圖 4.2 video4linux 編程指南 4.2.1.視頻編程的流程 (1)打開視頻設備: (2)讀取設備信息 (3)更改設備當前設置(可以不做) (4)進行視頻采集,兩種方法: 1)內(nèi)存映射 2)直接從設備讀取 (5)對采集的視頻進行處理 (6)關閉視頻設備。 4.2.

40、2 定義的數(shù)據(jù)結(jié)構及使用函數(shù) struct _v4l_struct int fd; struct video_capability capability; struct video_buffer buffer; struct video_window window; struct video_channel channel8; struct video_picture picture; struct video_mmap mmap; struct video_mbuf mbuf; unsigned char *map; ; typedef struct _v4l_struct v4l_devi

41、ce; extern int v4l_open(char *, v4l_device *); extern int v4l_close(v4l_device *); extern int v4l_get_capability(v4l_device *); extern int v4l_set_norm(v4l_device *, int); extern int v4l_get_picture(v4l_device *); extern int v4l_grab_init(v4l_device *, int, int); extern int v4l_grab_frame(v4l_device

42、 *, int); extern int v4l_grab_sync(v4l_device *); extern int v4l_mmap_init(v4l_device *); extern int v4l_get_mbuf(v4l_device *); extern int v4l_get_picture(v4l_device *); extern int v4l_grab_picture(v4l_device *, unsigned int); extern int v4l_set_buffer(v4l_device *); extern int v4l_get_buffer(v4l_d

43、evice *); extern int v4l_switch_channel(v4l_device *, int); 4.2.3.video4linux 支持的數(shù)據(jù)結(jié)構及其用途 (1)video_capability 包含設備的基本信息(設備名稱、支持的最大最小分辨 率、信號源信息等) name32 設備名稱 maxwidth maxheight minwidth minheight channels 信號源個數(shù) type 是否能capture , 彩色還是黑白, 是否能裁剪等等。值如 vid_type_capture等 (2)video_picture 設備采集的圖象的各種屬性 brigh

44、tness 065535 hue colour contrast whiteness depth 8 16 24 32 palette video_palette_rgb24 | video_palette_rgb565| video_palette_jpeg| video_palette_rgb32 (3)video_channel 關于各個信號源的屬性 channel 信號源的編號 name tuners type video_type_tv | ideo_type_camera norm 制式 pal|nstc|secam|auto (4)video_window 包含關于capture

45、 area的信息 x x windows 中的坐標. y y windows 中的坐標. width the width of the image capture. height the height of the image capture. chromakey a host order rgb32 value for the chroma key. flags additional capture flags. clips a list of clipping rectangles. (set only) clipcount the number of clipping rectangle

46、s. (set only) (5)video_mbuf 利用mmap進行映射的幀的信息 size 每幀大小 frames 最多支持的幀數(shù) offsets 每幀相對基址的偏移 (6)video_mmap 用于mmap 關鍵步驟 1)打開視頻: int v4l_open(char *dev, v4l_device *vd) if (!dev) dev = ”/dev/video0”; if (vd -fd = open(dev, o_rdwr) capability各分量 int v4l_get_capability(v4l_device *vd) if (ioctl(vd -fd, vidioc

47、gcap, if(ioctl(vd-fd, vidiocspict, for (i = 0; i capability.channels; i+) vd -channeli.channel = i; if (ioctl(vd -fd, vidiocgchan, return 0; 5 4.2.4 ioctl 函數(shù)介紹 從上面代碼段中可以看到ioctl函數(shù)頻繁的出現(xiàn),下面我們來介紹一下ioctl函 數(shù)。 ioctl用于向設備發(fā)控制和配置命令 ,有些命令也需要讀寫一些數(shù)據(jù),但這些 數(shù)據(jù)是不能用read/write讀寫的,稱為out-of-band數(shù)據(jù)。也就是說,read/write讀 寫的數(shù)據(jù)是i

48、n-band數(shù)據(jù),是i/o操作的主體,而ioctl命令傳送的是控制信息,其中 的數(shù)據(jù)是輔助的數(shù)據(jù)。ioctl是設備驅(qū)動程序中對設備的i/o通道進行管理的函數(shù),所 謂對i/o通道進行管理,就是對設備的一些特性進行控制,例如,在串口線上收發(fā)數(shù) 據(jù)通過read/write操作,而串口的波特率、校驗位、停止位通過ioctl設置,a/d轉(zhuǎn) 換的結(jié)果通過read讀取,而a/d轉(zhuǎn)換的精度和工作頻率通過ioctl設置。 ioctl函數(shù)是文件結(jié)構中的一個屬性分量,就是說如果你的驅(qū)動程序提供了對 ioctl的支持,用戶就可以在用戶程序中使用ioctl函數(shù)控制設備的i/o通道。 如果不用ioctl的話,也可以實現(xiàn)對

49、設備i/o通道的控制,但那就是蠻擰了。例 如,我們可以在驅(qū)動程序中實現(xiàn)write的時候檢查一下是否有特殊約定的數(shù)據(jù)流通過, 如果有的話,那么后面就跟著控制命令(一般在socket編程中常常這樣做)。但是 如果這樣做的話,會導致代碼分工不明,程序結(jié)構混亂, 程序員自己也會頭昏眼花的。 所以,我們就使用ioctl來實現(xiàn)控制的功能 。要記住,用戶程序所作的只是通 過命令碼告訴驅(qū)動程序它想做什么,至于怎么解釋這些命令和怎么實現(xiàn)這些命令, 這都是驅(qū)動程序要做的事情。 int ioctl(int fd, ind cmd, );7 4.3 截取圖象的方法 4.3.1 用 mmap(內(nèi)存映射)方式截取視頻 在

50、這部分涉及到下面幾個函數(shù),它們配合來完成最終圖像采集的功能。extern int v4l_mmap_init(v4l_device *):該函數(shù)把攝像頭圖像數(shù)據(jù)映射到進程內(nèi)存中, 也就是只要使用 vd-map 指針就可以使用 采集到的圖像數(shù)據(jù)。extern int v4l_grab_init(v4l_device *, int, int):該函數(shù)完成圖像采集前的初始化工作。 extern int v4l_grab_frame(v4l_device *, int):該函數(shù)是真正完成圖像采集的 一步,在本文使用了一個通常都會使用的一個小技巧,可以在處理一幀數(shù)據(jù)時同時 采集下一幀的數(shù)據(jù),因為通常我們

51、使用的攝像頭都可以至少存儲兩幀的數(shù)據(jù)。 extern int v4l_grab_sync(v4l_device *):該函數(shù)用來完成截取圖像的同步工作, 在截取一幀圖像后調(diào)用,返回表明一幀截取結(jié)束6。 mmap( )系統(tǒng)調(diào)用使得進程之間通過映射同一個普通文件實現(xiàn)共享內(nèi)存。普通文 件被映射到進程地址空間后,進程可以向訪問普通內(nèi)存一樣對文件進行訪問,不必 再調(diào)用read(),write()等操作。兩個不同進程a、b共享內(nèi)存的意思是,同一塊物 理內(nèi)存被映射到進程a、b各自的進程地址空間。進程a可以即時看到進程b對共享內(nèi) 存中數(shù)據(jù)的更新,反之亦然。 采用共享內(nèi)存通信的一個顯而易見的好處是效率高,因為進

52、程可以直接讀寫內(nèi) 存,而不需要任何數(shù)據(jù)的拷貝。 1、設置picture的屬性 2、 初始化video_mbuf,以得到所映射的buffer的信息 ioctl(vd-fd, vidiocgmbuf, 若調(diào)用成功,開始一幀的截取,是非阻塞的,是否截取完畢留給vidiocsync來判 斷 6、調(diào)用vidiocsync等待一幀截取結(jié)束 if(ioctl(vd-fd, vidiocsync, 返回值為實際讀寫的字符數(shù) int len ; unsigned char *vd-map= (unsigned char *) malloc(vdcapability.maxwidth*vdcapability.m

53、axheight ); len = read(vdfd,vd vd-map, vdcapability.maxwidth*vdcapability.maxheight* 5 圖像在圖像在 lcd 屏上的顯示屏上的顯示 5.1 framebuffer 的介紹 framebuffer 在 linux 中是作為設備來實現(xiàn)的,它是對圖形硬件的一種抽象1, 代表著顯卡中的幀緩沖區(qū)(framebuffer)。通過 framebuffer 設備,上層軟件可以 通過一個良好定義的軟件接口訪問圖形硬件,而不需要關心底層圖形硬件是如何工 作的,比如,上層軟件不用關心應該如何讀寫顯卡寄存器,也不需要知道顯卡中的 幀

54、緩沖區(qū)從什么地址開始,所有這些工作都由 framebuffer 去處理,上層軟件只需 要集中精力在自己要做的事情上就是了。 framebuffer 的優(yōu)點在于它是一種低級的通用設備,而且能夠跨平臺工作,比 如 framebuffer 既可以工作在 x86 平臺上,也能工作在 ppc 平臺上,甚至也能工作 在 m68k 和 sparc 等平臺上,在很多嵌入式設備上 framebuffer 也能正常工作。諸如 minigui 之類的 gui 軟件包也傾向于采用 framebuffer 作為硬件抽象層(hal)。 從用戶的角度來看,framebuffer 設備與其它設備并沒有什么不同。 frameb

55、uffer 設備位于/dev 下,通常設備名為 fb*,這里*的取值從 0 到 31。對于常 見的計算機系統(tǒng)而言,32 個 framebuffer 設備已經(jīng)綽綽有余了(至少作者還沒有看 到過有 32 個監(jiān)視器的計算機)。最常用到的 framebuffer 設備是/dev/fb0。通常, 使用 framebuffer 的程序通過環(huán)境變量 framebuffer 來取得要使用的 framebuffer 設備,環(huán)境變量 framebuffer 通常被設置為”/dev/fb0”。 從程序員的角度來看,framebuffer 設備其實就是一個文件而已,可以像對待 普通文件那樣讀寫 framebuffer 設備文件

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論