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

下載本文檔

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

文檔簡介

1、<p><b>  畢 業(yè) 設(shè) 計</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è)設(shè)計任務(wù)書</b></p><p>  題目: 基于嵌入式系統(tǒng)的圖像采集系統(tǒng) </p><p>  一、主要內(nèi)容和基本要求&

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

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

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

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

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

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

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

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

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

13、tcp/ip的圖像傳輸程序(服務(wù)器端)。</p><p>  3、在Ubuntu Linux PC上編寫客戶端,利用SDL顯示圖像。</p><p>  關(guān)鍵詞:ARM9 Linux 嵌入式 視頻監(jiān)控 USB驅(qū)動 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 課題任務(wù)與目的2</p><p>  1.1.1課題任務(wù)2</p><p>  1.1.2課題目的2</p><p>  2 總體方案設(shè)計3</p><p>  2.1系統(tǒng)的總體方案設(shè)計3</p><p><b>  2.2硬件設(shè)計3</b>&l

26、t;/p><p><b>  2.3軟件設(shè)計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 交叉編譯相關(guān)工具7</p><p>  3.2.3 交叉編譯的構(gòu)建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驅(qū)動程序1

28、4</p><p>  4.1 Linux驅(qū)動程序14</p><p>  4.1.1設(shè)備驅(qū)動的簡介14</p><p>  4.1.2設(shè)備驅(qū)動程序結(jié)構(gòu)15</p><p>  4.1.3 linux設(shè)備模型18</p><p>  4.2 Linux USB驅(qū)動22</p><p>

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

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

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

32、;/p><p>  6.2 客戶端程序49</p><p><b>  結(jié) 論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>  近年來,隨著通信、計算機技術(shù)的飛速發(fā)展,尤其是移動互聯(lián)網(wǎng)的發(fā)展和消費電子產(chǎn)品尤其是智能手機、pad上網(wǎng)本等設(shè)備的大眾化,電子產(chǎn)品的微型化和專業(yè)化成為潮流,嵌入式產(chǎn)品日漸成為IT產(chǎn)業(yè)的中流砥柱。Linux從1991年產(chǎn)生到現(xiàn)在,二十多年時間已經(jīng)發(fā)展成為功能極其強大的操作系統(tǒng);

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

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

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

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

38、t;/p><p>  實現(xiàn)嵌入式圖像采集系統(tǒng)需要作很多的硬件和軟件工作,通過本畢業(yè)設(shè)計,本人參考閱讀了大量的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 課題任務(wù)與目的</p><p><b>  1.1.1課題任務(wù)</b></p><p>  圖像采集系統(tǒng)作為一種比較通用的圖像采集裝置,在各個行業(yè)有著廣泛應(yīng)用,本題目設(shè)計以嵌入式系統(tǒng)為核心的圖像采集系統(tǒng),具有一定的通用性。</p><p><b>  基本要求:</b></p><p&g

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

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

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

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

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

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

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

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

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

49、t;/b></p><p>  程序開發(fā)環(huán)境是在ubuntu Linux系統(tǒng)下搭建的,所以首先需要在pc上搭建好嵌入式Linux的環(huán)境,然后才可以調(diào)試、編譯和運行應(yīng)用程序。</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攝像頭驅(qū)動和網(wǎng)卡驅(qū)動的移植</p><p>  將開發(fā)板自帶的有線網(wǎng)卡驅(qū)動源代碼以及在網(wǎng)上將萬能usb攝像頭驅(qū)動程序源代碼gspca webcam drivers下載下來,gspca webcam drivers 是linux下攝像頭支持的最廣泛的一個驅(qū)動,  這是由一個法

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

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

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

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

55、次握手完成后,服務(wù)器端采集程序?qū)D像數(shù)據(jù)從圖像緩沖區(qū)映射到網(wǎng)絡(luò)傳輸緩沖區(qū),最后將圖像數(shù)據(jù)發(fā)送給客戶端程序。客戶端程序通過接收圖像,把數(shù)據(jù)存放在數(shù)據(jù)緩沖區(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、硬件資源上說它有很大的局限性,比如存儲空間小,處理器頻率低,沒有鍵盤和鼠標等設(shè)備,這限制了已有的開發(fā)工具的在其上的使用。除此之外,硬件資源的局限性會給嵌入式軟件帶來一定的約束,比如內(nèi)存的使用。經(jīng)過的嵌入式開發(fā)人員的長期探索,提出了一中方便和有效的開發(fā)模式,即宿主機--目標板交叉開發(fā)環(huán)境模式。</p><p>  宿主機--目標板交叉開發(fā)環(huán)境模式主要有兩部分組成:一是宿主機,就是平時使用的桌面計算機。二是目標板,指

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

58、t;<p>  通常,宿主機和目標板的連接方式有四種,分別是串口、以太網(wǎng)接口、usb接口和JATG接口。在本開發(fā)板中,使用串口和usb接口連接的方式來進行調(diào)試和測試工作。</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>  ⑸ 調(diào)試器</b></p><p>  3.2.2 交叉編譯相關(guān)工具</p><p><b> ?、?glibc庫</b></p><p>

61、  glibc 是gnu發(fā)布的libc庫,也即c運行庫。glibc是linux系統(tǒng)中最底層的api(應(yīng)用程序開發(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已經(jīng)被移植到多種處理器架構(gòu)上,并且在商業(yè)、專利和開源軟件商廣泛使用。</p><p>  Gcc編譯器編譯的過程一般分為四個階段,分別為預(yù)處理、編譯、匯編和鏈接。在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調(diào)試器</b></p><p>  GDB全名是Gnu Debugger,是GNU C自帶的調(diào)試工具,它是一款非常強大的調(diào)試器,功能上可以與visual studio 媲美,它支持多種硬件平臺,目前支持的主要調(diào)試語言有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è)設(shè)計的軟件編程都是用Kdevelop IDE

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

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

68、編譯工具鏈,雖然不夠靈活,已經(jīng)滿足本系統(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網(wǎng)口,采用DM9000AE,帶聯(lián)接和傳輸指示燈;<

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

95、ions中的open()函數(shù)來完成的硬件設(shè)備的打開,本操作是驅(qū)動程序用來完成初始化工作的。以下是file_operations的數(shù)據(jù)結(jié)構(gòu)定義:</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>  當應(yīng)用程序?qū)υO(shè)備文件進行諸如open、close、read、write等操作時,linux內(nèi)核將通過file_operations結(jié)構(gòu)訪問驅(qū)動程序提供的函數(shù)。如應(yīng)用程序?qū)υO(shè)備文件執(zhí)行讀操作時,內(nèi)核調(diào)用fil

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論