畢業(yè)設計論文---基于嵌入式系統(tǒng)的圖像采集系統(tǒng)_第1頁
已閱讀1頁,還剩64頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  畢 業(yè) 設 計</b></p><p>  題 目:基于嵌入式系統(tǒng)的圖像采集系統(tǒng)</p><p>  姓 名: </p><p>  學 號: </p><p>  學 院:

2、 信息學院 </p><p>  專 業(yè): 電子信息工程 </p><p>  同 組 人: </p><p>  指 導 教 師: </p><p>  協(xié)助指導教師:

3、 </p><p>  2012 年 5 月 12 日</p><p><b>  畢業(yè)設計任務書</b></p><p>  題目: 基于嵌入式系統(tǒng)的圖像采集系統(tǒng) </p><p>  一、主要內容和基本要求&

4、lt;/p><p>  圖像采集系統(tǒng)作為一種比較通用的圖像采集裝置,在各個行業(yè)有著廣泛應用,本題目設計以嵌入式系統(tǒng)為核心的圖像采集系統(tǒng),具有一定的通用性。</p><p><b>  基本要求:</b></p><p>  1.設計系統(tǒng)的總體方案。</p><p>  2.設計圖像傳感器與嵌入式系統(tǒng)的接口。</p>

5、;<p>  3.設計圖像采集和存儲的軟件。</p><p>  4.部分實驗及調試。</p><p>  5.撰寫畢業(yè)設計論文,答辯。</p><p><b>  二、主要參考資料</b></p><p>  1.方彥軍. 嵌入式系統(tǒng)原理與設計,國防工業(yè)出版社 2011.7</p><

6、p>  2.趙燕. 傳感器原理及應用, 北京大學出版社, 2011.7</p><p>  3.伊拉希 (美)(ElahiA.). 網絡通信技術,科學出版社,2007.12</p><p>  4. 任哲. 嵌入式實時操作系統(tǒng)uC/OS-II原理及應用(第2版),北京航空航天大學出版社.2009.10</p><p>  5. 張綺文. 解書剛.ARM嵌入式常

7、用模塊與綜合系統(tǒng)設計實例精講(第2版), 電子工業(yè)出版社.2008.10</p><p>  6. 劉文耀. 數字圖像:采集與處理, 電子工業(yè)出版社, 2007.8</p><p><b>  三、進度要求</b></p><p>  17周-18周:根據本課題的具體設計任務,熟悉課題,收集相關資料,進行調研和分析。</p>&l

8、t;p>  19周-20周:確定總體方案。撰寫并完善開題報告,進行開題答辯。</p><p>  01周-04周:學習相關知識,設計系統(tǒng)的總體方案。嵌入式圖像采集系統(tǒng)的硬件設計。設計圖像傳感器與嵌入式系統(tǒng)的接口。</p><p>  05周-08周:嵌入式圖像采集系統(tǒng)的軟件設計。設計圖像采集和存儲的軟件。</p><p>  09周-10周:實驗及調試。<

9、;/p><p>  11周-13周:總結畢業(yè)設計階段的工作,撰寫畢設論文,畢業(yè)設計答辯。</p><p>  指 導 教 師:      (簽字)</p><p>  專業(yè)負責人/系主任: (簽字)</p><p><b>  摘 要</b></p><p>  

10、Linux是個開源的操作系統(tǒng),由于其源代碼開源、內核功能強大、安全性高、支持的硬件平臺多等特點,linux在嵌入式系統(tǒng)和服務器上中得到了極其廣泛的應用,Linux也是當前最熱門的嵌入式操作系統(tǒng),嵌入式市場占有率最高。近幾年,隨著android的興起,商用linux的市場越來越大,很多大公司在linux內核基礎上開發(fā)新的操作系統(tǒng),并把linux用到更廣泛的領域。</p><p>  將Linux內核應用到一個特定的

11、嵌入式圖像采集系統(tǒng)首要的工作就是Linux系統(tǒng)移植和驅動開發(fā)。這部分工作完成后,就為上層應用程序的開發(fā)屏蔽了硬件平臺的復雜性與多樣性,極大提高了產品開發(fā)的效率。</p><p>  本畢業(yè)設計選用FL2440平臺,以完成一個嵌入式圖像采集系統(tǒng)為目標,該平臺使用三星S3C2440A片上系統(tǒng)為底板,選用Linux2.6.12版本內核,涉及的工作主要是linux USB驅動移植,數據采集程序,用于發(fā)送視頻的通信服務器端

12、和數據接收的客戶端編寫。</p><p>  畢業(yè)設計論文的主要內容為:</p><p>  1、研究linux內核的usb驅動模型,給出嵌入式linux開發(fā)環(huán)境的搭建方法和編寫linux驅動代碼的方法,并移植開源的gspca驅動到內核中。 </p><p>  2、研究linux服務器端數據采集程序接口(v4L)和tcp/ip協(xié)議接口,編寫上層的數據采集程序和基于

13、tcp/ip的圖像傳輸程序(服務器端)。</p><p>  3、在Ubuntu Linux PC上編寫客戶端,利用SDL顯示圖像。</p><p>  關鍵詞:ARM9 Linux 嵌入式 視頻監(jiān)控 USB驅動 V4L </p><p><b>  Abstract</b></p><p>  Linux is

14、 an open source operating system, and with the character of open source code, powerful kernel, safe, supporting more hardware platforms, Linux get a very wide range of applications in embedded systems and server.Linux is

15、 currently the most popular embedded operating systems,and has the highest market share. In recent years, with the android rising, commercial linux market is growing, Many large companies to develop a new operating syste

16、m on the basis of the linux kernel and try to use it</p><p>  Linux system porting and driver development is the primary work to apply Linux kernel to a particular embedded image acquisition system. When thi

17、s part of the work is completed,the kernel will shield the complexity and diversity of the hardware platform for the upper layer application development, greatly increase the efficiency of product development.</p>

18、<p>  This graduation design use FL2440 platform, in order to complete the embedded video monitoring system as the goal, the platform using the Samsung S3C2440A chip selecting Linux2.6.12 version of the kernel, the

19、 work involved in the linux USB drive transplant, the data acquisition program used to send the video communication server side and client data receiving programming.</p><p>  The main content of the graduat

20、e design thesis as follows:</p><p>  1. Study linux kernel usb driver model, given the structures of embedded Linux development environment and the preparation of the linux driver code.</p><p> 

21、 2.Study linux server-side data collection program interface (v4L,) and tcp / ip protocol interface, write the top of the data collection procedures and tcp / ip-based image transmission program (server side).</p>

22、<p>  3.Writing the client on Ubuntu Linux PC with SDL library to display images.</p><p>  Key words: ARM9  Linux  Embedded  Video Monitor USB Driver</p>

23、<p><b>  目 錄</b></p><p>  摘 要..........................................................................................................................Ⅲ</p><p>  Abstract.....

24、...................................................................................................................Ⅳ</p><p><b>  引 言1</b></p><p><b>  1 概述2</b></p&

25、gt;<p>  1.1 課題任務與目的2</p><p>  1.1.1課題任務2</p><p>  1.1.2課題目的2</p><p>  2 總體方案設計3</p><p>  2.1系統(tǒng)的總體方案設計3</p><p><b>  2.2硬件設計3</b>&l

26、t;/p><p><b>  2.3軟件設計4</b></p><p>  3嵌入式Arm-Linux交叉開發(fā)環(huán)境的配置7</p><p>  3.1 交叉開發(fā)環(huán)境概述7</p><p>  3.2 GNU工具鏈7</p><p>  3.2.1 交叉編譯工具鏈7</p>&l

27、t;p>  3.2.2 交叉編譯相關工具7</p><p>  3.2.3 交叉編譯的構建8</p><p>  3.3 系統(tǒng)硬件平臺配置9</p><p>  3.3.1 ARM9處理器介紹9</p><p>  3.3.2 USB攝像頭原理11</p><p>  4 Linux USB驅動程序1

28、4</p><p>  4.1 Linux驅動程序14</p><p>  4.1.1設備驅動的簡介14</p><p>  4.1.2設備驅動程序結構15</p><p>  4.1.3 linux設備模型18</p><p>  4.2 Linux USB驅動22</p><p>

29、  4.2.1 usb協(xié)議22</p><p>  4.2.2 內核中的USB框架25</p><p>  4.2.3 usb驅動程序設計26</p><p>  4.3 內核、文件系統(tǒng)及驅動移植28</p><p>  4.3.1 USB攝像頭設備驅動移植28</p><p>  4.3.2 Linux

30、 文件系統(tǒng)移植30</p><p>  5 嵌入式圖像采集系統(tǒng)的服務器端31</p><p>  5.1 Linux V4L視頻采集31</p><p>  5.1.1 Linux V4L視頻采集編程接口分析31</p><p>  5.1.2 服務器端視頻采集程序33</p><p>  5.2 Linux

31、網絡編程37</p><p>  5.2.1 linux套接字編程API37</p><p>  5.2.2 linux多線程API和線程間的通信方式43</p><p>  5.3 服務器端程序45</p><p>  6 圖像采集系統(tǒng)的客戶端程序47</p><p>  6.1 SDL庫47<

32、;/p><p>  6.2 客戶端程序49</p><p><b>  結 論52</b></p><p><b>  致 謝53</b></p><p><b>  參考文獻54</b></p><p><b>  引 言&

33、lt;/b></p><p><b>  1、研究背景與意義</b></p><p>  近年來,隨著通信、計算機技術的飛速發(fā)展,尤其是移動互聯(lián)網的發(fā)展和消費電子產品尤其是智能手機、pad上網本等設備的大眾化,電子產品的微型化和專業(yè)化成為潮流,嵌入式產品日漸成為IT產業(yè)的中流砥柱。Linux從1991年產生到現在,二十多年時間已經發(fā)展成為功能極其強大的操作系統(tǒng);

34、可運行在X86、Alpha、Sparc、MIPS、PPC、Motorola、NEC、ARM等各類硬件平臺,并且開放所有源代碼,可以按需定制,可與傳統(tǒng)的windows競爭。</p><p>  目前,Linux應用相當廣泛,如信息家電,移動計算設備,網絡設備,工控,仿真,醫(yī)療儀器等智能信息和通信產品。[1]因為嵌入式市場遠大于pc市場,Linux在嵌入式市場的大作為也吸引了許多大公司、科研單位和高校進行研究。嵌入式

35、Linux開發(fā)的主要部分是驅動開發(fā),即對新的硬件芯片進行內核的支持,是當前的嵌入式的熱門。</p><p>  圖像采集系統(tǒng)作為視頻監(jiān)測的一個部分,在安全防范領域有著廣泛的應用,也是嵌入式Linux的一個應用方向。視頻監(jiān)測系統(tǒng)其直觀、方便、信息內容豐富而被廣泛應用于許多重要場合,成為監(jiān)控的主要手段。監(jiān)控系統(tǒng)作為現代企業(yè)不可或缺的重要組成部分,已廣泛應用于交通、醫(yī)院、銀行、家居和教育等諸多領域,可以有效地避免安全隱

36、患,提高工作效率。[2]</p><p>  2 、本畢業(yè)設計論文的主要工作</p><p>  論文主要解決的問題是在飛凌公司的FL2440開發(fā)平臺上,通過移植linux2.6.12內核和usb網絡攝像頭的驅動,并編寫通信的服務器端程序和客戶端程序,從而實現圖像的采集,編碼,傳輸和保存,最終初步實現一個視頻監(jiān)控系統(tǒng)。</p><p>  本畢業(yè)設計的主要工作分為5

37、部分,分別是對linux編程環(huán)境的熟悉,對linux下usb驅動進行移植,對linux內核的進行裁剪和配置,對服務器端的采集和發(fā)送程序的編寫,linux客戶端pc的程序編寫。</p><p>  Linux的入門是一項艱辛的工作,由于linux的開源特性,linux社區(qū)中上有大量的參考資料,對于本畢業(yè)設計的完成有很大的幫助,本畢業(yè)設計也是站在巨人的肩膀上,對嵌入式linux系統(tǒng)的圖像采集系統(tǒng)做一個初步的探索。&l

38、t;/p><p>  實現嵌入式圖像采集系統(tǒng)需要作很多的硬件和軟件工作,通過本畢業(yè)設計,本人參考閱讀了大量的linux源代碼和USB的規(guī)范,對usB總線協(xié)議有了一定的理解,會熟練使用嵌入式交叉開發(fā)環(huán)境,對linux c語言編程開發(fā),多線程編程和跨平臺的圖形開發(fā)框架qt都有深入的理解和掌握。</p><p><b>  1 概述</b></p><p&g

39、t;  1.1 課題任務與目的</p><p><b>  1.1.1課題任務</b></p><p>  圖像采集系統(tǒng)作為一種比較通用的圖像采集裝置,在各個行業(yè)有著廣泛應用,本題目設計以嵌入式系統(tǒng)為核心的圖像采集系統(tǒng),具有一定的通用性。</p><p><b>  基本要求:</b></p><p&g

40、t;  1. 設計系統(tǒng)的總體方案。</p><p>  2. 設計圖像傳感器與嵌入式系統(tǒng)的接口。</p><p>  3. 設計圖像采集和存儲的軟件。</p><p>  4. 部分實驗及調試。</p><p>  5. 撰寫畢業(yè)設計論文,答辯。</p><p><b>  1.1.2課題目的</b&g

41、t;</p><p>  在當前的數字信息技術和網絡技術高速發(fā)展的后pc時代,嵌入式系統(tǒng)已經廣泛的滲透到科學研究、工程設計、軍事技術以及人們生活的各個方面之中。</p><p>  嵌入式系統(tǒng)的定義是指以應用為核心,以計算機技術為基礎,軟硬件可剪裁,對功能、可靠性、成本、體積和功耗有嚴格要求的專用計算機系統(tǒng)。它一般由嵌入式操作系統(tǒng)、外圍硬件設備、嵌入式微處理器以及應用程序等部分組成,用于實

42、現特定的功能。[3]</p><p>  嵌入式最大的特色是與人們的生活密切相關,基于嵌入式技術的電子產品已經普及到大眾生活各個角落,像MP3,手機,上網本等娛樂設備,智能家電、車載GIS導航儀。嵌入式設備在總數量上已經遠超過個人PC。</p><p>  視頻監(jiān)測是安全防范系統(tǒng)的重要組成部分,是一種用于保護個人隱私,以及公共安全等其他用途的技術。近年來,隨著網絡通信以及圖像處理技術的飛速

43、發(fā)展,視頻監(jiān)測技術也有了長足的進步。Linux由于其內核具有強大的網絡通信功能,是嵌入式監(jiān)控系統(tǒng)的一個優(yōu)選。對于本畢設的研究,結合了arm9微處理器、網絡、圖像處理和傳輸技術于一體的嵌入式網絡視頻圖像監(jiān)測系統(tǒng)的研究,意義非常明顯。本人通過本畢業(yè)設計初步掌握嵌入式系統(tǒng)設計的全部流程,也掌握了監(jiān)控系統(tǒng)的設計思路和解決方案。本畢業(yè)設計主要是針對病人監(jiān)測而提出的初步解決方案。</p><p><b>  2 總

44、體方案設計</b></p><p>  2.1系統(tǒng)的總體方案設計</p><p>  整個系統(tǒng)由硬件和軟件兩部分組成。</p><p>  硬件部分由主控制板處理器、usb攝像頭圖像采集模塊、網卡傳輸模塊和視頻監(jiān)控PC等組成。軟件部分由linux 2.6.12標準內核、gspca usb攝像頭、有線網卡驅動以及圖像的v4l采集程序、服務器端和客戶端程序等

45、構成。</p><p>  系統(tǒng)組成結構如圖2-1所示。首先,通過usb驅動打開攝像頭,然后攝像頭中內置的DSP芯片產生JPEG流,主板上通過usb接口接收jpeg流,對接收到的數據進行處理及存儲,當客戶端啟動連接時,主板中的linux套接字程序通過有線網卡將圖像發(fā)送出去,最后客戶端的pc對圖像進行顯示。</p><p>  圖2-1 總系統(tǒng)構成</p><p>&

46、lt;b>  2.2硬件設計</b></p><p>  將飛凌公司的FL2440開發(fā)板作為主板,使用USB攝像頭進行圖像的采集,作為采集模塊,并通過USB傳輸到主板。傳輸模塊使用有線網卡,采用基于IEEE 802.3x以太局域網標準,對數據進行發(fā)送和接收。RS232串口把宿主機和開發(fā)板連接起來,主要用作調試和通信使用。整個硬件設計如圖2所示。</p><p>  圖2-

47、2 系統(tǒng)硬件圖</p><p><b>  主控制板</b></p><p>  主控制板芯片底板為S3C2440A,它是功能強大的SOC;內置的 ARM920T內核的32位RISC微處理器S3C2440,主頻最高可達400MHz,可以完成JPEG圖像壓縮以及傳輸的基本要求。FL2440對S3C2440A進行了擴充,其外設資源包括256MB NAND Flash、6

48、4MB SDRAM,串口和USB等接口電路。</p><p><b>  數字攝像頭</b></p><p>  采用中星微的ZC301PH USB攝像頭,該攝像頭通過內部A/D轉換和DSP芯片,輸出JPEG圖像流,圖像分辨率最高能達到640×480,最小為160X 120。</p><p><b>  2.3軟件設計&l

49、t;/b></p><p>  程序開發(fā)環(huán)境是在ubuntu Linux系統(tǒng)下搭建的,所以首先需要在pc上搭建好嵌入式Linux的環(huán)境,然后才可以調試、編譯和運行應用程序。</p><p>  嵌入式Linux環(huán)境的建立</p><p>  本文選用的是FL2440開發(fā)板,飛凌公司的開發(fā)板自帶了建立嵌入式Linux環(huán)境所需要的開發(fā)包,依次將boot-loade

50、r,kernel,yaffs文件系統(tǒng)下載到開發(fā)板上對開發(fā)板。</p><p>  Usb攝像頭驅動和網卡驅動的移植</p><p>  將開發(fā)板自帶的有線網卡驅動源代碼以及在網上將萬能usb攝像頭驅動程序源代碼gspca webcam drivers下載下來,gspca webcam drivers 是linux下攝像頭支持的最廣泛的一個驅動,  這是由一個法

51、國醫(yī)生(http://mxhaard.free.fr/)所設計編寫的開源驅動,針對FL2440開發(fā)板修改后,把它們放在相應的內核目錄下,修改相應的Kconfig,Makefile和編譯器,內核選項等修改后,通過make menuconfig命令進入內核配置界面,選擇模塊的方式,重新編譯內核,最終得到它們相應的驅動(.ko文件)。亦可用驅動補丁直接將gspca驅動加進內核中,此方法較簡單。</p><p>  基于

52、V4L的視頻采集程序</p><p>  視頻采集是整個視頻采集模塊的核心。Video4Linux(簡稱V4L)是Linux專門針對視頻設備提供的應用程序接口,是Linux對視頻設備的內核級驅動。通過它可以執(zhí)行打開、讀寫及關閉等操作。視頻采集程序的流程如圖2-3所示。</p><p>  圖2-3 視頻采集流程圖</p><p><b>  網絡傳輸程序

53、</b></p><p>  本文選用的是基于802.3x的以太局域網,可支持高達54Mbps的速率,而FL2440選用的以太網卡,可支持高達100Mbps的數據流。采用套接字編程,初步利用利用TCP/IP協(xié)議基于線程對數據進行無線傳輸。整體程序分為服務器端和客戶端。通信流程如圖2-4所示。</p><p>  圖2-4 網絡傳輸流程圖</p><p>

54、;  在服務端,利用pthread_create()創(chuàng)建server_th線程,使用socket()創(chuàng)建流式套接字,用bind()函數綁定端地址與和套接字,用listen()將剛創(chuàng)建的套接字轉化到監(jiān)聽模式下,提醒內核應接受來自客戶端的連接請求。而此時,服務器的狀態(tài)從close轉換到了listen監(jiān)聽狀態(tài)。</p><p>  在客戶端PC,創(chuàng)建socket(),使用connect()函數連接服務器端。當TCP的三

55、次握手完成后,服務器端采集程序將圖像數據從圖像緩沖區(qū)映射到網絡傳輸緩沖區(qū),最后將圖像數據發(fā)送給客戶端程序。客戶端程序通過接收圖像,把數據存放在數據緩沖區(qū)中,對其處理后,顯示在監(jiān)控PC上。</p><p>  3嵌入式Arm-Linux交叉開發(fā)環(huán)境的配置</p><p>  3.1 交叉開發(fā)環(huán)境概述</p><p>  嵌入式系統(tǒng)的開發(fā)環(huán)境和通用計算機是大不相同的,從

56、硬件資源上說它有很大的局限性,比如存儲空間小,處理器頻率低,沒有鍵盤和鼠標等設備,這限制了已有的開發(fā)工具的在其上的使用。除此之外,硬件資源的局限性會給嵌入式軟件帶來一定的約束,比如內存的使用。經過的嵌入式開發(fā)人員的長期探索,提出了一中方便和有效的開發(fā)模式,即宿主機--目標板交叉開發(fā)環(huán)境模式。</p><p>  宿主機--目標板交叉開發(fā)環(huán)境模式主要有兩部分組成:一是宿主機,就是平時使用的桌面計算機。二是目標板,指

57、的是嵌入式開發(fā)板。通過交叉開發(fā)環(huán)境的方式,在宿主機上利用已有的成熟的開發(fā)工具,專門針對目標板定制一套系統(tǒng),包括引導程序,內核,文件系統(tǒng),然后下載目標板上測試執(zhí)行,最后利用宿主機上的調試工具對目標板上運行的程序進行遠程調試。</p><p>  Linux系統(tǒng)作為一款非常優(yōu)秀的開源操作系統(tǒng),使用了大量的GNU軟件,包括shell、glibc、gcc、gdb等,還有強大的程序,比如vim和emacs。</p&g

58、t;<p>  通常,宿主機和目標板的連接方式有四種,分別是串口、以太網接口、usb接口和JATG接口。在本開發(fā)板中,使用串口和usb接口連接的方式來進行調試和測試工作。</p><p>  3.2 GNU工具鏈</p><p>  3.2.1 交叉編譯工具鏈</p><p>  交叉編譯工具鏈是一個由編譯器、鏈接器和解釋器組成的集成開發(fā)環(huán)境。和本地編

59、譯類似,交叉編譯的過程也是由編譯、鏈接等階段組成,源程序通過交叉編譯器編譯生成目標模塊,并由交叉鏈接器最后鏈接成可在目標平臺上執(zhí)行得代碼。</p><p>  交叉編譯工具鏈主要包括:</p><p><b>  標準庫</b></p><p><b>  編譯器 </b></p><p><

60、b>  鏈接器</b></p><p><b>  匯編器</b></p><p><b> ?、?調試器</b></p><p>  3.2.2 交叉編譯相關工具</p><p><b>  ⑴ glibc庫</b></p><p>

61、  glibc 是gnu發(fā)布的libc庫,也即c運行庫。glibc是linux系統(tǒng)中最底層的api(應用程序開發(fā)接口), 幾乎其它任何的運行庫都會依賴于glibc。</p><p><b> ?、?gcc編譯器</b></p><p>  Gcc是一個跨平臺的編譯器,它是GNU Compiler Collection的縮寫,目前被許多unix/li

62、nux系統(tǒng)作為默認的編譯器。Gcc最初被命名為GNU C Compiler,后來,隨著支持的編譯語言越來越多,編程更加強大的GNU Compiler Collection。目前,gcc已經被移植到多種處理器架構上,并且在商業(yè)、專利和開源軟件商廣泛使用。</p><p>  Gcc編譯器編譯的過程一般分為四個階段,分別為預處理、編譯、匯編和鏈接。在linux shell中對gcc提供了強大的命令支持,在實際編程中可

63、以靈活運用。</p><p>  binutils開發(fā)工具包</p><p>  Binutils是一組開發(fā)工具包,包括鏈接器、匯編器和其他用于目標文件和檔案的工具。Binutils中的不少工具和gcc相似,binutils工具包是嵌入式系統(tǒng)開發(fā)中必須掌握的,主要包括addr2line、ar、as、c++filt、gprof、ld、nm、objcopy、objdump、ranlib、rea

64、delf、size、 strings、strip、libiberty、libbfd和libopcodes。</p><p><b>  gdb調試器</b></p><p>  GDB全名是Gnu Debugger,是GNU C自帶的調試工具,它是一款非常強大的調試器,功能上可以與visual studio 媲美,它支持多種硬件平臺,目前支持的主要調試語言有c/c++

65、、java等</p><p>  KDEVELOP IDE</p><p>  KDevelop的是一個自由,開放源碼的Linux,Solaris和FreeBSD的IDE(集成開發(fā)環(huán)境),Max OS X和其他Unix系統(tǒng)。它是一個功能全面,可擴展的IDE,可以使用C / C++和其他編程語言的插件,功能非常強大,可以媲美VC++ IDE。本畢業(yè)設計的軟件編程都是用Kdevelop IDE

66、進行編譯調試的。</p><p>  linux shell簡介</p><p>  linux 有多個版本的shell,一般默認的是bash shell。Shell中文的意思是外殼,實際上是操作系統(tǒng)內核和用戶進行交互的接口,shell和windows下面的dos命令行非常相似。常用的命令有l(wèi)s,cd,rm,cp,mv,du,man,mount等。</p><p>

67、  3.2.3 交叉編譯的構建</p><p>  交叉編譯的過程本身并不復雜,完成交叉編工具鏈的制作卻是比較困難的,網上又有很多交叉編譯的構建方法可以提供參考。制作交叉編譯工具鏈之前,需要明確目標平臺,本平臺的嵌入式開發(fā)是在arm平臺下,所以選擇交叉編譯工具為arm-linux-gcc,arm-linux-gdb等。</p><p>  對于本平臺的所開發(fā)的系統(tǒng),直接選用網上配置好的交叉

68、編譯工具鏈,雖然不夠靈活,已經滿足本系統(tǒng)的開發(fā)需求。</p><p>  3.3 系統(tǒng)硬件平臺配置</p><p>  FL2440硬件平臺的主要配置介紹:</p><p> ?、?S3C2440A處理器,主頻400MHz,可倍頻至533MHz;</p><p>  64M字節(jié)SDRAM,可擴展到256M ;</p><p

69、>  4M NOR Flash,256M字節(jié)NAND Flash;</p><p>  12MHz系統(tǒng)外部時鐘源;32.768KHz的RTC時鐘源;</p><p>  支持3.3V或5V電壓供電;</p><p>  兩個三線串口,一個TTL串口;</p><p>  一個100M網口,采用DM9000AE,帶聯(lián)接和傳輸指示燈;<

70、;/p><p>  四個USB HOST接口;一個USB Device接口;</p><p>  3.3.1 ARM9處理器介紹</p><p>  本論文從應用領域、設計需求和開發(fā)的難易程度等因素進行考慮,最終選用三星公司的嵌入式微處理器S3C2440。下面分別介紹ARM處理器的優(yōu)點和具用ARM9內核的S3C2440的特點。</p><p> 

71、 ARM處理器以其完整的體系結構發(fā)展系列,以及極小的體積、極低的功耗、極低的成本和極高的性能,并能及時根據嵌入對象的不同進行功能上的擴展的優(yōu)勢,從眾多種類的嵌入式微處理器中脫穎而出?;贏RM技術的微處理器占據了32位RISC微處理器75%以上的市場份額,ARM技術正在逐步滲入到我們生活的各個方面。</p><p>  采用RISC架構的ARM微處理器一般具有如下特點:</p><p> 

72、?。?)支持Thumb (16位)/ARM (32位)雙指令集,能很好的兼容8位/16位器件;</p><p> ?。?)大量使用寄存器,指令執(zhí)行速度更快;</p><p> ?。?)加載存儲結構,數據處理的操作只針對寄存器的內容,而不直接對存儲器進行操作;</p><p> ?。?)簡單的尋址模式,所有加載和存儲的地址都只由寄存器的內容和指令域決定,執(zhí)行效率高;&

73、lt;/p><p>  3.3.2 USB攝像頭原理</p><p>  攝像頭(CAMERA)作為一種視頻輸入設備,在過去被廣泛的運用于視頻會議、遠程醫(yī)療及實時監(jiān)控等方面。近年來,互聯(lián)網技術的發(fā)展,圖像傳感器技術的成熟,使得攝像頭的圖像質量得到明顯改善,同時攝像頭的價格也大幅度下降。攝像頭在人們的日常生活中扮演著越來越重要的角色。</p><p>  攝像頭分為數字攝

74、像頭和模擬攝像頭兩大類。模擬攝像頭可以將視頻采集設備產生的模擬視頻信號轉換成數字信號,進而將其儲存在計算機里。模擬攝像頭捕捉到的視頻信號必須經過特定的視頻捕捉卡將模擬信號轉換成數字信號,并加以壓縮后才可以轉換到計算機上運用。數字攝像頭可以直接捕捉影像,然后通過串、并口或者 USB接口傳到計算機里?,F在市場上的攝像頭主要以數字攝像頭為主,而數字攝像頭中又以接口簡單的USB數字攝像頭為主,以下主要介紹USB數字攝像頭。</p>

75、<p>  USB數字攝像頭的工作原理為:景物通過鏡頭(LENS)生成的光學圖像投射到圖像傳感器表面上,然后轉為電信號,經過A/D(模數轉換)轉換后變?yōu)閿底謭D像信號,再送到數字信號處理芯片DSP中加工處理,將其轉化為特定的圖像格式,如JPEG格式,再通過USB接口傳輸到處理器中處理,實現圖像顯示存儲或編碼傳輸。</p><p>  USB數字攝像頭的結構框圖如圖3-1所示。</p>&l

76、t;p>  圖3-1 USB數字攝像頭的結構框圖</p><p>  在組成攝像頭的所有重要部件當中,最為核心的兩個部件是圖像傳感器芯片和DSP芯片。</p><p>  圖像傳感器(SENSOR)是一種半導體芯片,其表面包含有幾十萬到幾百萬的光電二極管。光電二極管受到光照射時,就會產生電荷。它可以分為CCD(charge couple device)和CMOS(complemen

77、tary metal oxide semiconductor)兩類,它們的性能將直接決定攝像頭的最大分辨率和圖像的質量。CCD的優(yōu)點是靈敏度高,噪音小,信噪比大,但是生產工藝復雜、成本高、功耗高。CMOS的優(yōu)點是集成度高、功耗低(不到CCD的1/3)、成本低,但是噪音比較大、靈敏度較低、對光源要求高。從成本考慮,市場上大多還是采用CMOS的圖像傳感器,各廠商通過采用影像光源自動增益補償技術,自動亮度、白平衡控制技術,色飽和度、對比度、邊

78、緣增強以及伽馬矯正等先進的影像控制技術,完全可以達到與CCD攝像頭相媲美的效果。</p><p>  數字信號處理芯片DSP一般包括這三個模塊:鏡像信號處理器ISP(image signal processor),JPEG圖像解碼器(JPEG encoder),USB設備控制器(USB device controller),主要功能是通過一系列復雜的數學算法運算,對數字圖像信號進行優(yōu)化處理(如壓縮編碼),并把處理

79、后的信號通過USB等接口傳到PC等設備。DSP芯片類型的不同將直接影響圖片格式的差異。</p><p>  目前主要有國內的中星微,臺灣的松翰、凌越和凌陽這些企業(yè)生產攝像頭的DSP芯片。雖然市場上攝像頭種類繁多,但絕大部分采用了以上公司的DSP芯片。特別是國內的中星微,憑借其產品良好的兼容性、較高的性價比和中國政府的大力支持,很快占領了攝像頭DSP芯片市場的大半壁江山。如今中星微電子的“星光”系列數字多媒體芯片成

80、功占據了全球計算機圖像輸入芯片市場60%的市場份額,更占據國內市場的90%。這是具有我國自主知識產權的集成電路芯片第一次在一個重要應用領域占到領先地位。本論文中采用的正是中星微系列芯片的USB攝像頭zc301。</p><p>  USB攝像頭的圖像格式主要有以下幾種:JPEG格式、YUV格式和第三格式。中星微的zc301p和松翰的sn9c105采用的是JPEG格式;凌陽的spca506和spca508采用YUV

81、格式;松翰的 sn9c101和凌陽的spca56la采用第三格式。第三格式是指廠家用自己的圖像壓縮算法對RGB數據壓縮后得到的圖片格式。同一種圖像格式的攝像頭由于采用芯片型號的不同,捕獲的圖像數據流可能也會存在微小的差異。有些芯片會在JPEG圖像數據前加一定長度的頭部,如中星微的zco301p;有些則沒有,如松翰的sn9c105。有些YUV格式的芯片采用YYUV的數據流格式,而有些則采用YUVY數據流格式。表2-1列出了一些主要芯片的圖

82、像格式。</p><p>  表3-1 主流DSP芯片及其圖像格式</p><p>  4 Linux USB驅動程序</p><p>  4.1 Linux驅動程序</p><p>  4.1.1設備驅動的簡介</p><p>  驅動程序本質上是硬件和應用程序之間的中間層。驅動程序工作在內核空間,應用程序一般運行于

83、用戶空間(32位Linux操作系統(tǒng)一般把內存地址的0~3g空間作為用戶空間,3~4G空間作為內核空間)。Linux下驅動程序和dos或windows下的區(qū)別很大。設備驅動程序是作為內核與機器硬件之間的接口,而系統(tǒng)調用則是內核和應用程序的接口。設備驅動為應用程序屏蔽了硬件的細節(jié),硬件設備對于應用程序來說只是一個設備文件,應用程序可以像操作普通程序一樣對硬件設備進行操作。[5]設備驅動是內核的一部分,一般完成以下功能:</p>

84、<p>  設備的初始化和釋放。</p><p>  把數據從內核傳送到硬件和從硬件讀取數據到內核。</p><p>  讀取應用程序傳送給設備文件的數據和回送應用程序的請求的數據。這需要在用戶空間、內核空間、總線以及外設之間傳送數據。</p><p>  檢測和處理設備出現的錯誤。[6]</p><p>  Linux設備驅動的

85、特點是可以以模塊的形式加載各種設備驅動,因此允許驅動的開發(fā)人員隨著內核版本的更新,在最新版本的內核上對各種新的硬件進行設備驅動的編寫和開發(fā),這對嵌入式系統(tǒng)非常重要,因為嵌入式設備往往具有大量獨有的外設,開發(fā)人員需要把主要的精力放在設備驅動方面。</p><p><b>  設備的分類</b></p><p>  Linux支持三種硬件設備:塊設備、字符設備、網絡設備。

86、字符設備是指那些無緩沖可以直接進行讀寫的設備,如系統(tǒng)的串口通信設備。塊設備則只能以塊為單位進行讀寫,一般塊大小是512和1024 Byte,塊設備的存取是通過buffer和cache進行并且可以隨機訪問,一般通過文件系統(tǒng)來訪問塊設備,只有塊設備可以安裝文件系統(tǒng)。塊設備主要針對慢速設備,一般采用緩存技術,支持數據的隨即讀寫,典型的塊設備是硬盤和cd-rom等。對于用戶來說,塊設備和字符設備的訪問接口都是一樣的,都是一組基于文件的系統(tǒng)的調用

87、,如read、write等,實際上它們的細節(jié)區(qū)別僅在內核和驅動程序的軟件接口上。</p><p>  Linux操作系統(tǒng)中的網絡設備的實現方法不同于字符設備和塊設備,它面對的上一層是網絡協(xié)議層,而不是字符型和塊設備所面向的文件系統(tǒng)層。</p><p><b>  設備文件</b></p><p>  從用戶的角度,在使用不同的設備時,需要使用不

88、同的操作方法,是非常麻煩的。用戶一般希望能用同樣的應用程序接口和命令來訪問設備和普通文件。</p><p>  Linux抽象了對硬件的處理,所有的設備都看做文件:它們可以使用和操作普通文件相同的系統(tǒng)調用接口來完成打開、讀寫、關閉和I/O控制等,而驅動程序的本質就是將這些系統(tǒng)調用接口函數具體實現。Linux中的所有外圍和內部硬件設備都用特殊的設備文件來表示。[7]</p><p>  由于

89、linux引入的設備文件的概念,linux為文件和設備提供了統(tǒng)一的接口。對用戶來說,設備文件和普通文件沒有區(qū)別。</p><p><b>  主設備號和次設備號</b></p><p>  Linux為每個設備分配了一個主設備號和一個次設備號;主設備號標識具體設備的實例。有同一個設備驅動程序控制的所有設備都具有相同的主設備號。次設備號主要用來區(qū)分具有相同主設備號且由相

90、同設備驅動控制的不同設備。設備文件的主設備號必須與設備驅動程序在登陸該設備時申請的主設備號一致,否則設備驅動程序將無法被用戶程序訪問到。所有已經加載(即注冊)的硬件設備的主設備號能夠從文件系統(tǒng)中/proc/devices文件中得到。</p><p>  當應用程序通過系統(tǒng)調用對某個設備文件操作時,linux內核會根據設備文件的設備類型和主設備號調用對應的驅動程序,并從用戶態(tài)轉換到內核態(tài),在由驅動程序找到對應的次設

91、備號,最終完成對硬件的操作。</p><p>  linux驅動程序代碼的分布</p><p>  所有的linux設備驅動源代碼都放在drivers目錄下。</p><p>  4.1.2設備驅動程序結構</p><p>  Linux驅動程序與外界的接口可以分成三部分:</p><p>  ⑴驅動程序與操作系統(tǒng)內核

92、的接口。只是通過include/linux/fs.h中的file_operations數據結構來完成的,下面會介紹這個數據結構。</p><p>  驅動程序與系統(tǒng)引導的接口。這部分利用驅動程序對設備進行初始化。</p><p>  驅動程序與設備的接口。這部分描述了驅動程序如何與設備進行交互。</p><p>  這與具體的設備密切相關。[8]</p>

93、<p>  按照功能劃分,linux設備驅動程序的代碼結構大致劃分為以下幾個部分:驅動程序的注冊與注銷、設備的打開與釋放、設備的讀寫操作、設備的控制操作、設備的中斷與輪詢處理。</p><p>  1. 驅動程序的注冊和注銷</p><p>  往系統(tǒng)注冊一個設備驅動需要賦予設備一個主設備號,通過驅動程序初始化時調用定義在fs/devices.c中的register_chrd

94、ev()函數或者fs/block_dev.c中的register_blkdev()函數來完成。而關閉字符或者塊設備,需要通過使用unregister_chrdev()或unregister_blkdev()函數注銷設備,并同時釋放分配得到的主設備號。</p><p>  2. 設備的打開與釋放</p><p>  通過調用定義在include/linux/fs.h中的file_operat

95、ions中的open()函數來完成的硬件設備的打開,本操作是驅動程序用來完成初始化工作的。以下是file_operations的數據結構定義:</p><p>  struct file_operations {</p><p>  struct module *owner;</p><p>  loff_t( *llseek) (struct file *,l

96、off_t,int);</p><p>  ssize_ t( *read) (struct file *,size_t,loff_t *);</p><p>  ssize t( *write) (struct file *,const char *,size_t,loff_t *);</p><p>  int( *readdir) (struct file *

97、,void *,filldir_t *);</p><p>  unsigned int( *poll) (struct file *,struct poll_table_struct *);</p><p>  int( *ioctl) (struct inode *,struct file *,unsigned int,unsigned long);</p><p&

98、gt;  int( *mmap) (struct file *,struct vm_ area_struct *);</p><p>  int( *open) (struct inode *,struct file *);</p><p>  int( *flush) (struct file *);</p><p>  int( *release) (struc

99、t inode *,struct file *);</p><p>  int( *fsync) (struct file *,struct dentry *,int);</p><p>  int( *fasync) (int,struct file *,int);</p><p>  int( *lock) (struct file *,int,struct f

100、ile_lock *);</p><p>  ssize_t( *readv) (struct file *,const struct iovec *,unsigned long,loff_t *);</p><p>  ssize_ t( *writev) (struct file *,const struct iovec *,unsigned long,loff_t *);</p

101、><p>  ssize_ t ( *sendpage) (struct file *,struct page *,int,size_t,loff_t *,int);</p><p>  unsigned long( *get_unmapped_area) (struct file *,unsigned long,unsigned long,unsigned long,unsigned lon

102、g);</p><p>  int (*check_flags) (int);</p><p><b>  }</b></p><p>  當應用程序對設備文件進行諸如open、close、read、write等操作時,linux內核將通過file_operations結構訪問驅動程序提供的函數。如應用程序對設備文件執(zhí)行讀操作時,內核調用fil

103、e_operations結構中的read函數。</p><p>  一般在驅動程序中,open()需要完成如下工作:首先檢查設備的相關錯誤,如設備尚未準備就緒等;對于第一次打開的設備,則需要對硬件設備初始化;識別次設備號;若有必要的話需更新讀寫操作的當前位置f_ops指針;對file->private_data里的數據進行分配和填寫;引用計數值增加一。</p><p>  同樣,一般

104、通過調用file_operations結構中函數release()來完成釋放設備,這個方法一般等同于close(),作用正好與open()相反,通常需要完成一下工作:使用計數減一,釋放file->private_data中分配的內存;如果被釋放設備是最后一個,則設備關閉。</p><p><b>  3.設備的讀寫操作</b></p><p>  讀寫字符設備的

105、操作使用函數read()和write()。對于塊設備,使用函數block_read()和block_write()來對數據進行讀寫。</p><p><b>  設備的控制操作</b></p><p>  除了設備的讀和寫以外,有時應用程序需對硬件設備進行控制,這時需要函數ioctl()來完成。Ioctl()與具體的設備對象關系密切,需要結合具體的設備來分析。<

106、/p><p>  設備的輪詢與中斷操作</p><p>  當設備執(zhí)行某個命令時,設備驅動可以從輪詢或者中斷中選擇一種以判斷設備是否已經完成了此命令。</p><p>  對于不支持中斷的設備,讀寫時需要輪流查詢設備狀態(tài),以便決定是否技術進行數據傳輸。輪詢方式意味著需經常對設備的狀態(tài)進行讀取,直到設備狀態(tài)表明請求已經完成為止。如果設備驅動程序被連接進入內核,輪詢方式會帶

107、來災難性的后果:cpu將無所事事,直到設備完成此請求。輪詢方式最好的方法就是通過內核定時器定期對設備的狀態(tài)進行查詢,使內核周期性調用設備驅動中的某個例程來完成檢查設備狀態(tài)。輪詢方式比較消耗內核資源。</p><p>  中斷是一種更有效的方法,如果硬件支持中斷則可以按照中斷的方式進行操作。讓硬件在需要的時候會向內核發(fā)出中斷請求信號,內核負責把信號傳遞給對應的設備驅動程序。[9]此過程由內核中設備驅動注冊的中斷來協(xié)

108、助完成。系統(tǒng)記錄下中斷處理程序中的地址和中斷號。在系統(tǒng)的proc/interrupts文件中可以看到驅動程序對應的中斷號和類型。</p><p>  在驅動初始化一般已經完成對中斷資源的請求。系統(tǒng)中某些中斷時固定的,大多數中斷需要在啟動時進行動態(tài)分配。設備驅動所控制的中斷號(IRQ)必須在取得對此中斷的所有權之前找到。</p><p>  體系結構決定了如何將中斷發(fā)送給cpu,在大多數體系

109、結構中,中斷用特殊模式發(fā)送,并且會阻止系統(tǒng)其他中斷的產生。驅動程序在中斷處理過程中做得越少越好,這樣linux內核能夠很快從中斷狀態(tài)返回。為了在接收中斷后能夠完成更多的工作,設備驅動還需要能夠使用內核的底層處理例程,或者任務隊列來對之后需要調用的那些任務例程進行排隊。</p><p>  4.1.3 linux設備模型</p><p><b>  1. 設備模型概要</b&

110、gt;</p><p>  Linux內核設備模型與具體的設備驅動編程是無關的,但是對理解linux下的設備驅動程序中設備在底層的實現至關重要。</p><p>  由于各種熱插拔設備特別是usb設備的大量使用,內核需要處理在系統(tǒng)運行時設備的動態(tài)插入和拔除,以及設備間復雜的依賴關系。為此,linux2.6之后引進了新的內核設備模型。設備模型提供了獨立的機制表示設備,并表示其在系統(tǒng)中的拓撲結

111、構。這樣做的優(yōu)點是:代碼重復最?。惶峁┤缫糜嫈颠@樣的統(tǒng)一機制;列舉系統(tǒng)中所有的設備,觀察其狀態(tài),查看其連接總線。用樹的形式將全部設備結構完整、有效的展現出來,包括所有總線和內部連接;將設備與對應驅動聯(lián)系起來;將設備按照類型進行分類;從樹的葉子向根的方向依次遍歷,確保以正確的順序關閉各個設備的電源。[10]</p><p>  設備模型設計的初衷是為了節(jié)能,有助于電源管理。通過建立表示系統(tǒng)設備拓撲關系的樹結構,能

溫馨提示

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

評論

0/150

提交評論