基于ARM的嵌入式溫度監測系統畢業論文_第1頁
基于ARM的嵌入式溫度監測系統畢業論文_第2頁
基于ARM的嵌入式溫度監測系統畢業論文_第3頁
基于ARM的嵌入式溫度監測系統畢業論文_第4頁
基于ARM的嵌入式溫度監測系統畢業論文_第5頁
已閱讀5頁,還剩73頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、 PAGE72 / NUMPAGES78畢業設計說明書基于ARM的嵌入式溫度監測系統摘 要隨著科技的發展,嵌入式系統的發展也異常迅速,同時,嵌入式系統已經應用于各個方面,給人們的生產和生活帶來了極大的便利。目前嵌入式系統的應用已經發展到了嵌入式處理器與操作系統相結合的階段,本設計就是將ARM處理器與Linux操作系統相結合實現的。嵌入式溫度監測系統由溫度監測硬件系統和溫度監測軟件兩部分組成。其中硬件系統包括SBC2410開發套件,溫度檢測電路、信號放大電路與信號顯示終端,論文中按模塊對各部分硬件的設計進行了詳細的介紹。溫度監測軟件系統的設計過程如下,本設計首先為溫度監測系統構建Linux環境,

2、其次在Linux下編寫并加載系統驅動程序,然后編寫應用程序,編譯并下載到ARM開發板中。經過反復調試,實現了溫度監測的功能。關鍵詞:ARM;linux;核;驅動;溫度監測 Embedded Systemof Temperature Testing Based on ARMAbstractWith the development of science, embedded system develops at a fast speed. Embedded systemhas been applied to all aspects, which has brought great convenien

3、ce to peoples production and daily life.At present, the application of embedded system have been developed to the stage ofcombining embedded processor with operating system, and the design comes true based on combining the ARM processor with linux operating system. Embedded temperature measurement s

4、ystem includes temperature monitoring hardware and software systems. Hardware system includes SBC2410 system development kit, temperature detection circuit, signal amplifier circuit and signal display terminal.This paper, in detail, introducesthe hardware design according to modules. The process of

5、the design of temperature measurement software system is as follows: First,the design construct Linux environment for temperature measurement the system .Secondly, the design compiles and loads driver program in Linux; At last, the design writes, compiles and downloads the application program toARM

6、development board. After repeated debugging, the design achieves the purpose of the temperature measurement.Key words:Linux ; ARM ; Kernel ; Drivert ;Emperature measurement目 錄TOC o 1-3 h z u TOC o 1-3 h z u HYPERLINK l _Toc201155773摘要 PAGEREF _Toc201155773 h IHYPERLINK l _Toc201155775Abstract PAGERE

7、F _Toc201155775 h IIHYPERLINK l _Toc201155776第一章 嵌入式系統簡介 PAGEREF _Toc201155776 h 1HYPERLINK l _Toc2011557771.1 嵌入式系統的概念 PAGEREF _Toc201155777 h 1HYPERLINK l _Toc2011557781.2 嵌入式系統的結構 PAGEREF _Toc201155778 h 1HYPERLINK l _Toc2011557791.3 嵌入式系統與普通單片機開發的不同之處 PAGEREF _Toc201155779 h 2HYPERLINK l _Toc201

8、1557801.3.1 交叉編譯 PAGEREF _Toc201155780 h 2HYPERLINK l _Toc2011557811.3.2 交叉調試 PAGEREF _Toc201155781 h 3HYPERLINK l _Toc201155782第二章 設計用嵌入式模塊 PAGEREF _Toc201155782 h 5HYPERLINK l _Toc2011557832.1 ARM處理器 PAGEREF _Toc201155783 h 5HYPERLINK l _Toc2011557842.2 Flash模塊 PAGEREF _Toc201155784 h 5HYPERLINK l

9、 _Toc2011557852.3 SDRAM模塊 PAGEREF _Toc201155785 h 6HYPERLINK l _Toc2011557862.4 JTAG調試器 PAGEREF _Toc201155786 h 8HYPERLINK l _Toc201155787第三章 溫度監測電路設計 PAGEREF _Toc201155787 h 10HYPERLINK l _Toc2011557883.1 AD590的室溫補償電路 PAGEREF _Toc201155788 h 10HYPERLINK l _Toc2011557893.1.1 性能 PAGEREF _Toc201155789

10、 h 10HYPERLINK l _Toc2011557903.1.2 誤差校正 PAGEREF _Toc201155790 h 10HYPERLINK l _Toc2011557913.1.3 AD590的補償電路設計 PAGEREF _Toc201155791 h 11HYPERLINK l _Toc2011557923.2 熱電偶的測溫電路 PAGEREF _Toc201155792 h 12HYPERLINK l _Toc2011557933.2.1 熱電偶的測溫原理 PAGEREF _Toc201155793 h 12HYPERLINK l _Toc2011557943.2.2 熱電

11、偶的測溫電路設計 PAGEREF _Toc201155794 h 14HYPERLINK l _Toc201155795第四章 溫度監測系統的Linux構建 PAGEREF _Toc201155795 h 17HYPERLINK l _Toc2011557964.1 構建交叉編譯器 PAGEREF _Toc201155796 h 17HYPERLINK l _Toc2011557974.1.1 交叉編譯器 PAGEREF _Toc201155797 h 17HYPERLINK l _Toc2011557984.1.2 設置共享文件夾,并解壓linux開發包 PAGEREF _Toc201155

12、798 h 17HYPERLINK l _Toc2011557994.1.3 安裝交叉編譯器 PAGEREF _Toc201155799 h 18HYPERLINK l _Toc2011558004.2 Linux操作系統 PAGEREF _Toc201155800 h 19HYPERLINK l _Toc2011558014.2.1 引導加載程序 PAGEREF _Toc201155801 h 20HYPERLINK l _Toc2011558024.2.2 核 PAGEREF _Toc201155802 h 21HYPERLINK l _Toc2011558034.2.3 文件系統 PAG

13、EREF _Toc201155803 h 23HYPERLINK l _Toc2011558044.3 燒寫 PAGEREF _Toc201155804 h 24HYPERLINK l _Toc2011558054.3.1 Windows下燒寫vivi PAGEREF _Toc201155805 h 24HYPERLINK l _Toc2011558064.3.2 分區格式化Flash與重新下載vivi PAGEREF _Toc201155806 h 25HYPERLINK l _Toc2011558074.3.3 燒寫linux核 PAGEREF _Toc201155807 h 27HYPE

14、RLINK l _Toc2011558084.3.4 下載文件系統 PAGEREF _Toc201155808 h 27HYPERLINK l _Toc201155809第五章 溫度監測系統的軟件編程 PAGEREF _Toc201155809 h 28HYPERLINK l _Toc2011558105.1 編寫Linux下的ADC驅動程序 PAGEREF _Toc201155810 h 28HYPERLINK l _Toc2011558115.1.1 Linux設備 PAGEREF _Toc201155811 h 29HYPERLINK l _Toc2011558125.1.2 驅動程序的

15、編寫說明 PAGEREF _Toc201155812 h 32HYPERLINK l _Toc2011558135.1.3 驅動程序編寫的具體容 PAGEREF _Toc201155813 h 34HYPERLINK l _Toc2011558145.1.4 ADC驅動程序具體函數的分析 PAGEREF _Toc201155814 h 36HYPERLINK l _Toc2011558155.1.5 ADC驅動程序的加載和刪除 PAGEREF _Toc201155815 h 39HYPERLINK l _Toc2011558165.2 編寫應用程序 PAGEREF _Toc201155816

16、h 41HYPERLINK l _Toc2011558175.2.1 線性化部分 PAGEREF _Toc201155817 h 41HYPERLINK l _Toc2011558185.2.2 A/D轉換速率的計算 PAGEREF _Toc201155818 h 44HYPERLINK l _Toc2011558195.2.3 主程序的編寫 PAGEREF _Toc201155819 h 45HYPERLINK l _Toc201155820第六章 溫度監測的調試 PAGEREF _Toc201155820 h 47HYPERLINK l _Toc2011558216.1 編譯ad驅動程序

17、PAGEREF _Toc201155821 h 47HYPERLINK l _Toc2011558226.2 運行應用程序 PAGEREF _Toc201155822 h 48HYPERLINK l _Toc2011558236.2.1 為ARM開發板更新核和文件系統 PAGEREF _Toc201155823 h 48HYPERLINK l _Toc2011558246.2.2 編譯main.c應用程序 PAGEREF _Toc201155824 h 48HYPERLINK l _Toc2011558256.2.3 運行main 主程序 PAGEREF _Toc201155825 h 49H

18、YPERLINK l _Toc201155826總結 PAGEREF _Toc201155826 h 51HYPERLINK l _Toc201155827參考文獻 PAGEREF _Toc201155827 h 52HYPERLINK l _Toc201155828附錄 PAGEREF _Toc201155828 h 54HYPERLINK l _Toc201155829附錄A:程序源代碼 PAGEREF _Toc201155829 h 54HYPERLINK l _Toc201155830附錄B:測溫原理圖 PAGEREF _Toc201155830 h 68HYPERLINK l _To

19、c201155831附錄C:ARM板電路圖 PAGEREF _Toc201155831 h 69HYPERLINK l _Toc201155832致 PAGEREF _Toc201155832 h 70嵌入式系統簡介嵌入式系統的概念嵌入式系統是不同于常見計算機系統的一種計算機系統,它不以獨立設備的物理形態出現,即它沒有一個統一的外觀,它的部件根據主體設備以與應用需要嵌入在設備的部,發揮著運算、存儲、以與控制的作用。從體系結構上看,嵌入式系統主要由嵌入式處理器、支撐硬件和嵌入式軟件組成。其中嵌入式處理器常是單片機或微控制器;支撐硬件主要包括存儲介質、通信部件和顯示部件;嵌入式軟件則包括支撐硬件的

20、驅動程序、操作系統、支撐軟件以與應用中間件等。嵌入式系統的結構嵌入式系統一般由3個部分組成,如圖1.1所示:嵌入式系統硬件平臺、嵌入式操作系統與嵌入式系統應用。其中,嵌入式系統硬件平臺指各種嵌入式器件、設備,嵌入式操作系統是指在嵌入式硬件平臺上運行的操作系統,目前主流的嵌入式操作系統有嵌入式linux、C/OS-II等,具體應用那種嵌入式操作系統應視具體情況而定。嵌入式linux提供了完善的網絡技術支持,C/OS-II操作系統也成為實時操作系統或RTOS,使用它作為開發工具將會使實時應用程序變得相對容易。圖1.1 嵌入式系統嵌入式芯片需要必要的外圍芯片給它提供基本的工作條件。一個嵌入式芯片供電

21、系統為其供電;必須有時鐘信號系統提供時鐘信號;必須有復位系統。嵌入式芯片還需要有存儲系統。如果芯片部沒有存儲器或存儲器容量不足以滿足需求,則需要外擴存儲芯片。調試接口也是嵌入式系統不可缺少的一部分。這些嵌入式處理器運行的必要條件的電路或者芯片與嵌入式處理器一起構成了嵌入式處理器的最小系統。最小系統結構框圖如圖1.2:圖1.2 最小嵌入式系統嵌入式系統與普通單片機開發的不同之處按照軟件工程的原理,嵌入式開發軟件的一般流程為需求分析、軟件概要設計、軟件詳細設計、軟件實現和軟件測試。與一般軟件開發的區別在于軟件實現的編譯和調試兩部分。交叉編譯 由于宿主機和目標機的體系結構不同,在宿主機X86平臺上可

22、以運行的程序在目標機ARM平臺上無法運行,因此嵌入式軟件開發采用交叉編譯方式在一個平臺上生成可以在另一個平臺上執行的代碼。編譯的主要工作就是將程序轉化成該程序的CPU所能識別的機器代碼。進行交叉編譯的主機稱為宿主機,也就是普通的通用計算機,宿主機系統資源豐富,使用的方便地集成開發環境和調試工具。 程序實際運行的環境稱為目標機,也就是嵌入式系統環境。嵌入式系統的系統資源緊缺,存儲空間、處理器運行速度等很有限,并且沒有相關的編譯工具,因此,嵌入式系統的開發需要借助宿主機來編譯出目標機的執行代碼。由于編譯的過程包括編譯、等幾個階段,因此,嵌入式的交叉編譯也包括交叉編譯和交叉等過程,通常,ARM的交叉

23、編譯器為arm-elf-gcc,交叉器為arm-elf-ld,一般可執行文件是ELF格式。如圖1.3所示。交叉調試嵌入式軟件編譯和完成后即進入調試階段。調試器與被調試的程序一般運行在同一臺計算機上,調試器是一個單獨運行著的進程,它通過操作系統提供的調試接口來控制被調試的進程。在嵌入式軟件開發中的調試方式采用的是交叉調試,調試器運行在宿主機上的通用操作系統之上,被調試的進程運行在基于特定硬件平臺的嵌入式操作系統中。宿主機與目標機通過串口或者網絡進行通信。調試器可以控制、訪問被調試進程,讀取被調試進程的當前狀態,并能夠改變被調試的運行狀態。嵌入式系統的交叉調試方法主要有兩種:硬件調試和軟件調試,它

24、們共同的特點如下:調試器運行在宿主機上,而被調試的進程運行在目標機上。調試器通過串口、并口、網絡、JTAG等控制被調試進程。在目標機上,一般會具備某種形式的調試代理與調試器共同配合對目標機上的進程進行調試。這種調試代理可能是某些支持調試功能的硬件設備,也可能是某些專門的調試軟件。目標機可能是某種形式的系統仿真器,通過在宿主機上運行目標機的仿真軟件,整個調試過程可以在一臺計算機上運行。此時物理上雖然只有一臺計算機,但是邏輯上仍然存在這宿主機和目標機的區別22。設計用嵌入式模塊ARM處理器 ARM處理器當前有6個產品系列:ARM7、ARM9、ARM9E、ARM10E、ARM11和SecurCore

25、,其中ARM11是最近推出的產品。ARM7、ARM9、ARM9E、ARM10E是4個通用處理器系列。每個系列提供一套特定的性能來滿足設計者對功耗、性能、體積的需求。SecurCore是第5個產品系列,是專門為安全設備而設計的。在本設計中,我們用的是ARM9處理器。下面對ARM9進行相應的介紹。ARM9系列于1997年問世。由于采用了5級指令流水線,ARM9處理器能夠運行在比ARM7更高的時鐘頻率上,改善了處理器的整體性能;存儲器系統根據哈佛體系結構(程序和數據空間獨立的體系結構)重新設計,區分了數據總線和指令總線。ARM9系列的第一個處理器是ARM920T,包含獨立的數據指令Cache和MMU

26、。次處理器能夠被用在要求有虛擬存儲器支持的操作系統上。此系列的ARM922T是ARM922T的變種,只有一半大小的數據指令Cache。ARM940T包含一個更小的數據指令Cache和一個MPU。它是針對不要求運行操作系統的應用而設計的。ARM920T、ARM940T都執型v4T架構指令13。Flash模塊Flash存儲器是一種可在的系統的(In-System)進行電擦寫,掉電后信息不丟失的存儲器。它具有低功耗、大容量、擦寫速度快、可整片或分扇區在系統編程(燒寫)、擦除等特點,在體積、抗震性方面都有很大的優勢,并且可有部嵌入式算法完成對芯片的操作,因而在各種嵌入式系統中得到了廣泛的應用。作為一種

27、非易失性存儲器,Flash在系統中用于存放程序代碼、常量表以與一些在系統掉電后需要保存的用戶數據等。常用的Flash為8位或16位的數據寬度,編程電壓為單3.3V。Flash閃存是非易失性存儲器,可以對存儲器單元塊進行擦寫和再編程。任何Flash器件進行寫入操作前必須先進行擦除。Flash按結構分為NOR和NAND兩大類。NAND器件執行擦除操作十分簡單,而NOR則要求在進行擦出前,現將目標塊所有的地址都寫0。擦除NOR器件時是以64128KB的塊進行的,執行一個寫入/擦除操作的時間為15s;擦除NAND器件是以832KB的塊進行的,執行一樣的操作最多只需要4ms。執行擦除時,塊尺寸的不同進一

28、步拉大了NAND和NOR之間的差距。NOR的特點是芯片執行,這樣應用程序可以直接在Flash閃存運行,不必再把代碼讀到系統ARM中。NOR的傳輸速率很高,在14MB的小容量時具有極高的成本效益,但是很低的寫入和擦除速度大大降低了它的性能。NAND結構能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度的都很快,應用NAND的難點在于Flash的管理和需要特殊的接口。NOR主要用在代碼存儲介質中,NAND適合于數據存儲22。SDRAM模塊SDRAM與Flash不同,它不具有掉電保護數據的特性,但其存取速度大大高于Flash存儲器,且有讀/寫的屬性,因此SDRAM在系統中主要用作程序的運

29、行空間,數據與堆棧區。當系統初始化后,CPU首先從復位地址0 x0處讀取啟動代碼,在完成系統的初始化后,程序代碼一般應調入SDRAM中運行,以提高系統的運行速度,同時,系統與用戶堆棧、運行數據也都放在SDRAM中。SDRAM具有單位空間存儲容量大和價格便宜的優點,已經廣泛應用在各種嵌入式系統中。SDRAM的存儲單元可以理解為一個電容,總是傾向于放電,為不免數據丟失,必須定時刷新(充電)。因此要在系統中使用SDRAM,就要求微處理器具有刷新控制邏輯,或在系統中另外加入刷新控制邏輯電路。SDRAM是高速的動態隨機存取存儲器,它的同步接口和完全流水線的部結構使其擁有極大的數據速率,目前SDRAM時鐘

30、頻率已經達到100MHz以上。另外,它們的行列地址線共用,有行地址選通(CAS),列地址選通(RAS)信號分時控制。基本存儲單元是存芯片中存儲信息的最小單位,每個存儲單元可以存儲1bit的信息,并且有一個由行地址和列地址共同定義的唯一的地址。我們知道8bit可以組成1byte,而字節是存中最小的尋址單元。雖然存基本存儲單元具有唯一的地址,但是并不能進行獨立的尋址,這將要求存芯片有數以百計的引腳同計算機通信,顯然這是不可能的。現在存架構是處于同一列的基本存儲單元共用一條列地址線,而處于同一行的基本存儲單元共用一條行地址線,組成一個基本單元構成的矩陣框架。而這些存框架構成一個存bank,SDRAM

31、存以bank為組織,可由行列地址尋址。另外,為了保持部數據還必須進行刷新。要知道SDRAM的結構特點,就必須先了解DRAM器件的結構特點。DRAM存儲一個位的消息只需要一只晶體管,但是需要周期性的充電,才能使保存的信息不丟失,DRAM的一個存儲位單元如圖2.1所示:圖2.1只是DRAM一個基本單位的結構示意圖,電容器的狀態決定了這個DRAM單位邏輯狀態是1還是0。一個電容可以存儲一定量的電子或者電荷,一個充電的電容器被認為是邏輯上的1,而“空”的電容器則是0。但是電容被利用的這個特性也是它的缺點。因為電容器不能持久的保持存儲的電荷,所以存需要不斷定時刷新,才能保持暫存的數據。電容器可以用電流來

32、充電;同時,電容的充放電需要一定的時間,雖然對于存基本單位中的電容來說這個時間很短,大約只有0.180.2s,但這個期間存是不能執行存取操作的。 圖2.1 DRAM的原理圖SDRAM的存儲單元的基本原理同前面提到的DRAM基本一樣,但是這些存儲單元的組織和控制與DRAM就有相當大的差別了。SDRAM是多bank 結構22。JTAG調試器JTAG是英文“Joint Test Action Group(聯合測試行為組織)”的詞頭字母的簡寫,是一種國際標準測試協議(IEEE 1149.1兼容),主要用于芯片部測試與對系統進行仿真、調試。現在多數的高級器件都支持JTAG協議,如DSP、FPGA器件等。

33、標準的JTAG接口是4線:TMS、TCK、TDI、TDO,分別為模式選擇、時鐘、數據輸入和數據輸出線。 相關JTAG引腳的定義為:TCK為測試時鐘輸入;TDI為測試數據輸入,數據通過TDI引腳輸入JTAG接口;TDO為測試數據輸出,數據通過TDO引腳從JTAG接口輸出;TMS為測試模式選擇,TMS用來設置JTAG接口處于某種特定的測試模式;TRST為測試復位,輸入引腳,低電平有效,GND。JTAG最初是用來對芯片進行測試的,基本原理是在器件部定義一個TAP(Test Access Port測試訪問口)通過專用的JTAG測試工具對進行部節點進行測試。JTAG測試允許多個器件通過JTAG接口串聯在

34、一起,形成一個JTAG鏈,能實現對各個器件分別測試。現在,JTAG接口還常用于實現ISP(In-System Programmable;在線編程),對FLASH等器件進行編程。JTAG編程方式是在線編程,傳統生產流程中先對芯片進行預編程現再裝到板上因此而改變,簡化的流程為先固定器件到電路板上,再用JTAG編程,從而大大加快工程進度。JTAG接口可對PSD芯片部的所有部件進行編程。在硬件結構上,JTAG 接口包括兩部分:JTAG 端口和控制器。與JTAG 接口兼容的器件可以是微處理器(MPU)、微控制器(MCU)、PLD、CPL、FPGA、ASIC 或其它符合IEEE1149.1 規的芯片。IE

35、EE1149.1 標準中規定對應于數字集成電路芯片的每個引腳都設有一個移位寄存單元,稱為邊界掃描單元BSC。它將JTAG 電路與核邏輯電路聯系起來,同時隔離核邏輯電路和芯片引腳。由集成電路的所有邊界掃描單元構成邊界掃描寄存器BSR。邊界掃描寄存器電路僅在進行JTAG 測試時有效,在集成電路正常工作時無效,不影響集成電路的功能。JTAG也可以實現對電路版的Flash編程。要通過JTAG接口對系統板上Flash編程,可以利用專用的硬件控制器或獨立的編程器來訪問JTAG器件實現,也可以直接用電纜線把PC機并行口與嵌入式系統的微處理器的JTAG引腳連接起來,由PC機上的程序模擬JTAG時序實現。嵌入式

36、系統的Flash芯片的地址線、數據線和控制信號線接到嵌入式系統帶JTAG接口的微處理器相應的引腳上,在對Flash編程時,PC機上運行的程序控制PC機發送指令或數據到嵌入式系統微處理器部的邊界掃描寄存器里,再把此數據或指令通過JTAG專用指令傳送到Flash,從而將代碼寫入Flash中22。溫度監測電路設計能夠把非電量轉換為電量的器件稱為傳感器,傳感器實質上是一種功能塊,其作用是將來自外界的各種信號轉換成電信號。隨著技術的不斷進步,傳感器也有了飛速的發展,體積變得越來越小,精度越來越高,功能也越來越強大。傳感器的種類繁多,在本次設計中所要用到的是溫度傳感器,要選擇適當的傳感器以滿足設計要求。溫

37、度傳感器:溫度傳感器就是把溫度信號轉換成電信號的傳感器。在本次設計中,我選用的是K型熱電偶和用于溫度補償的AD590做為測溫元件。3.1 AD590的室溫補償電路性能集成溫度傳感器AD590 是一種高阻、電流輸出型的兩端器件, 其檢測靈敏度為1 A/K。由于其部采用最新的薄膜電阻激光微調技術作最后定標, 故其具有很高的檢測精度。AD590 的特點是:(1) 兩端器件:電壓輸入,電流輸出;(2) 線性電流輸出:1A/K;(3) 較寬的檢測圍:- 55+ 155;(4) 極好的線性:在工作圍非線性誤差。在vivi模式下分區格式化Flash:在vivi模式下輸入命令: bon part 0 192K

38、 1216K對板子進行分區。說明:bon是分區命令,以上命令的意思是把Nand Flash從0開始分為三個區: 0192K:大小為192K 192K1216K:大小為1M 1216K64M: 大小為62.8M分區后需要用ARM板連接USB電纜,但是只能選擇帶電連接,千萬不要關電或者掉電,因為此時Nand Flash中已經被清空,需要再重新下載一次BIOS,如果關電或掉電,將需要使用SJF2410.exe重新燒寫ivi,并重新分區格式化Flash,此過程又需要花費幾分鐘時間。同時在windows可以看到分區顯示。(3)重新下載vivi通過dnw下載vivi有兩種方法,本設計使用方法二。方法一:接

39、上串口電纜,輸入命令:load flash vivi x,使用Serial PortTransmit下載;方法二:接上串口電纜,接上USB電纜,輸入命令:load flash vivi u,進入下載界面,板子提示等待用戶進行USB下載傳輸。此時點擊USB Port-Transmit,在彈出的打開界面中找到sbc_vivi.點擊“打開”開始下載,下載過程一閃而過,只需0.5s,因為使用USB接口下載的速度很快。下載完畢,vivi被自動燒寫到Nand Flash中。燒寫linux核通過dnw下載kernel有兩種方法,本設計使用的方法二。方法一:接上串口電纜,輸入命令:load flash ker

40、nel x,使用Serial PortTransmit下載;方法二:接上串口電纜,接上USB電纜,輸入命令:load flash kernel u,回車,板子等待用戶進行USB下載傳輸。此時點擊USB Port-Transmit,在彈出的打開界面中找到zImage_tp,下載時間比sbc_vivi稍長,約為2s。下一步應下載文件系統,重要提示:此時不能給ARM板斷電后上電或復位,不能拔下USB電纜,否則主機會出現錯誤,重新插上USB電纜時,主機將無法識別USB,也無常安裝,需要重新燒寫vivi與kernel。下載文件系統輸入:loadyaffs e root u,回車。板子等待用戶進行USB下

41、載傳輸。此時點擊USB Port-Transmit,在彈出的“打開”界面中找到root_qtopia_tp.img。點擊“打開”開始下載,此下載過程大學需要23分鐘。下載完畢,linux文件系統將會被自動燒寫到Nand Flash中。至此,linux核需要燒寫的已經完成。再重啟系統,就可以用了。溫度監測系統的軟件編程編寫Linux下的ADC驅動程序嵌入式應用對成本和實時性比較敏感,而對linux的應用要求主要體現在對硬件的驅動程序的編寫和上層應用程序的開發。嵌入式linux驅動程序的基本結構和標準的linux的結構基本一致,也支持模塊化模式,所以,大部分驅動程序編程模塊化形式,而且,要求可以在

42、不同的體系結構上安裝。linux是可以支持模塊化模式的,但由于嵌入式應用針對具體的應用,所以,一般不采用該模式,而是把驅動程序直接編譯進核之中。但是這種模式是調試驅動程序的極佳方法。系統調用是linux系統核和應用程序之間的接口,設備驅動程序是linux系統核和機器硬件之間的接口。設備驅動程序為應用程序屏蔽了硬件的細節,這樣在應用程序看來,硬件設備只是一個設備文件,因而應用程序可以像操作普通文件一樣對硬件設備進行操作。設備驅動程序是核的一部分。驅動程序的使用可以按照兩種方式編譯:一種是靜態編譯進核;另一種是編譯成核模塊義工動態加載。但對嵌入式linux系統而言,一般不能夠像桌面linux那樣靈

43、活地使用insmod/rmmod加載卸載設備驅動程序,因為常將設備驅動程序靜態編譯進核。基于設備驅動程序的功能和編譯特點,應具有的特性如下:(1)由一系列函數和數據構成,它既要與硬件設備進行通信又要遵循操作系統核提供的統一接口;(2)它要管理好用戶程序與外設之間的數據流和控制流;(3)是一個自包含組件,能夠動態地加入到操作系統或被核刪除;(4)屬于核的可定制部分,通過設備文件賴于用戶程序打交道。Linux設備設備驅動程序可分為硬件驅動程序和軟件設備驅動程序兩大類。硬件設備驅動就是通常意義的驅動,其驅動程序和物理硬件設備相連,如UART設備或IDE設備;而軟件設備驅動程序則作為低級結構間的接口,

44、或者硬件設備驅動程序和高級數據結構間的接口,如文件系統EXT3的驅動。(1)linux設備類型linux系統支持3種類型的硬件設備:字符設備(Char Device)、塊設備(Block Device)、網絡設備(Network Socket Device)。系統的串口、鍵盤、虛擬控制臺是字符設備,而RAMDISK、硬盤是塊設備,網絡設備則如網絡接口卡等。ADC驅動設備就是字符設備。字符設備字符設備能夠存儲或者傳輸不定長數據。某些字符設備可以每次傳遞一個字節,傳完每個字節后產生一個中斷;另外一些字符設備可以在部緩存數據,因此可以每次傳遞多個字節。核把字符設備看成是可順序訪問的連續字節流,它在單

45、個字符的基礎上接收和發送數據,數據緩沖系統。字符設備不能隨機訪問,只能一個一個字符地順序存取,也不能進行查找操作。字符設備的介質一般是傳輸介質,在對字符設備發出讀/寫請求時,實際的硬件I/O一般就緊接著發生了。塊設備塊設備的介質必須是存儲介質,存儲的是定長且可以隨機訪問的數據塊,對塊設備的I/O操作只能以塊為單位進行。對塊設備的訪問通常需要經過高速緩存做緩沖區,若用戶進程對設備的請求通過緩沖區能滿足用戶的要求,就從緩沖區返回請求的數據,如果不能,才調用請求函數來進行實際的I/O操作。塊設備的任何塊都可以隨機讀/寫,可以讀取任意位置上的整數倍塊長的數據,不必考慮它在設備的什么地方。一個文件系統要

46、安裝進入操作系統必須在塊設備上。網絡設備網絡設備與字符設備和塊設備不同,通常不把網絡設備看成普通文件,因為普通文件的容是無結構的,而網絡設備的數據流是有結構的數據包,是成塊的。但是它的塊又不是固定大小的,大到數百甚至數千字節,小到幾個字節。對網絡設備的存儲的存取卻是流式的,通過BSD Socket接口的訪問。核和網絡設備驅動程序之間的通信,與字符設備和塊設備驅動程序與核的通信數完全不一樣的,不是通過read()、write(),而是采用sk_buff數據緩沖區,調用與數據包相關的函數。網絡協議(如TCP/IP)就是建立在網絡設備驅動程序之上的應用。(2)設備節點、文件節點、設備文件Linux是

47、一種類UNIX系統,UNIX的一個基本特點是“一切皆為文件”。用戶進程也是通過一種特殊的文件來與實際的硬件打交道的,這種特殊的文件就是設備文件,系統中的設備都用一個設備文件代表。設備文件抽象了設備的處理,將所有的硬件設備都像普通文件一樣看待,也就是說硬件可以跟普通文件一樣來打開、關閉和讀/寫。對應著設備的3種類型,設備文件也分為字符型設備文件(Character)、塊型設備文件(Block)和網絡插件型設備文件(Socket)。Character型設備文件常指直接讀/寫、沒有緩沖區的字符設備,而Block設備文件常常指那些需要以塊(如512B)的方式寫入的設備,Socket(網絡插件)型設備文

48、件指的是網絡設備訪問的BSD Socket接口。設備文件都放在/dev目錄下,也就是說,對于一個設備,它可以在/dev下面存在一個對應的邏輯設備節點,這個節點以文件的形式存在單并不是普通意義上的文件,而是設備文件,更確切地說是設備節點。例如,硬盤就是用/dev/hd*來表示,/dev/had表示第一個IDE接口的主設備,/dev/hdal表示第一個硬盤上的第一個分區;而/dev/hdc表示第二個IDE接口的主設備。設備節點是通過mknod命令建立的,其中指定了主設備號和次設備號。而這個設備號是從/proc/devices文件中獲得的,所以一般是先有設備驅動程序(模塊)在核中。才有折本節點在目錄

49、中。 (3)主設備號和輔設備號Linux中的每個設備在文件系統中都至少對應一個設備文件,這個設備文件節點中記載著與特定設備建立連接所需的信息。對于Block型和Character型設備。這種信息由三部分構成:第一部分包括設備的類型,第二部分是一個“主設備號”(Major),第三部分是一個“輔(或者從)設備號”(Minor)。其中,設備類型和主設備號結合在一起就唯一地確定了設備的驅動程序與界面,因而一般對應確切的驅動程序。主設備號的主要作用就是聲明設備所使用的驅動程序。驅動程序和主設備號是一一對應的,當打開一個設備文件時,操作系統就已經知道這個設備設備所對應的驅動程序。輔設備號一般是區分驅動程序

50、的不同屬性(如不同的使用方法、不同的位置、不同的操作),標識驅動程序控制的設備實例。若不同串口使用同一個驅動程序,其主設備號一樣、輔設備號不同,輔設備號標識這是第幾個串口設備。而對于塊設備(硬盤),如/dev/hdal(block3/1)、/dev/hda2(block3/2)和/dev/hda3(block3/3)都代表著同一塊硬盤的3個分區,它們的主設備號都是3,輔設備號分別為1、2、3對于常用的設備,Linux有固定的編號。例如:創建設備文件和設備號并顯示。mknod harddiak b 3 0file /dev/had/dev/had: block special (3/0)用mkn

51、od 命令可以創建設備文件,創建時指定主設備號和輔設備號。如上例中,在當前位置創建出一個與 /dev/had 一樣的、可以訪問的第一個IDE設備主硬盤的文件(塊設備,主設備號 3,輔設備號 0),文件名叫做harddisk。用file 命令可以顯示設備文件的設備號。用命令ls l也可以顯示出設備文件21。驅動程序的編寫說明設備驅動程序是操作系統核和機器硬件之間的接口。設備驅動程序為應用程序屏蔽了硬件的細節,這樣在應用程序看來,硬件設備只是一個設備文件,應用程序可以像操作普通文件那樣對硬件設備進行操作。同時,設備驅動程序是核的一部分,它完成以下的功能:對設備初始化和釋放;把數據從核傳送到硬件和從

52、硬件讀取數據;讀取應用程序傳送給設備文件的數據和會送給應用程序請求的數據;檢測和處理設備出現的錯誤。在linux操作系統寫有字符設備和塊設備兩類主要的設備文件類型。字符設備和塊設備的主要區別是:在對字符設備發出讀寫請求時,實際的硬件I/O一般就緊接著發生了;塊設備利用一塊系統存作為緩沖區,當用戶進程對設備請求滿足用戶要求時,就返回請求的數據。塊設備是主要對針對磁盤等慢速設備設計的,一面耗費過多的CPU時間來等待。設備驅動程序的file_operations 結構:通常,一個設備驅動程序包括兩個基本的任務:驅動設備的某些函數作為系統調用執行;而某些函數則負責處理中斷(即中斷處理函數)。而file

53、_operations 結構的每一個成員的名稱都對應一個系統調用。用戶程序利用系統調用,比如在對一個設備文件進行諸如read操作時,這是對應于該設備文件的驅動程序就會執行相關的ssize_t(*read)(struct ,file* char *,size_t,loff_t*)函數。在操作系統部,外部設備的存取是通過一組固定入口點進行的,這些入口點由每個外設的驅動程序提供,由函數file_operations結構向系統進行說明,因此,便攜設備的驅動程序的主要工作是編寫子函數,并填寫file_operations 的各個域。file_operations 結構在kernel/include/li

54、nux/fs.h中可以找到。struct file_operations struct module *owner; loff_t (* llseek) (struct file* , loff_t,int); ssize_t (*read) (struct file *,char *,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) (struc

55、t 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 f

56、ile*,struct dentry*,int datasync); int(*fasync) (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

57、file*, struct page*,int,size_t ,loff_t *,int);unsigned long (*get_unmapped_area)(struct file*,unsigned long,unsigned long, unsigned long, unsigned long);#ifdef MAGIC_ROM_PTR int (*roptr) (struct file*,struct vm_area_struct *);#endif /* MAGIC_ROM_PTR*/其中主要的函數說明如下:(1) open是驅動程序用來完成設備初始化操作的,open還會增加設備計

58、數,以防止文件在關閉之前模塊被卸載出核。open主要完成以下操作:檢查設備錯誤(諸如設備未就緒或相似的硬件問題);如果是首次打開,初始化設備;標別此設備號;分配和填寫放在fileprivate_data的數據結構;增加使用計數。(2) read是用來從外部設備中讀取數據。當其為NULL指針時,將引起read系統調用放回-EINVAL(“非法參數”)。函數返回一個非負值表示成功讀取了多少字節。(3) write向外部設備發送數據。如果沒有這個函數,write系統調用程序返回一個-EINVAL。如果返回值非負,就表示成功地寫入的字節數。(4) release是設備關閉時調用這個操作。release

59、的作用正好與open相反。這個設備方法有時也稱為close函數。它應該完成以下操作:使用計數減一;釋放open分配在fileprivate_data中的存,在最后一次關閉操作時關閉設備。(5) llseek是 改變當前的讀寫指針。(6) readdir一般用于文件系統的操作。(7) poll一般用于查詢設備是否可讀可寫或處于特殊的狀態。(8) ioctl 執行設備專有的命令。(9) mmap 將設備存映射到應用程序的進程地址空間10。驅動程序編寫的具體容通過了解驅動程序的file_operation結構,用戶可以編寫出相關外部設備的驅動程序。首先,用戶在自己的驅動程序源文件定義file_ope

60、ration結構,并編寫出設備需要的各操作函數,對于設備不需要的操作函數用NULL初始化,這些操作函數將被注冊到核,當應用程序對設備相應的設備文件進行文件操作時,核會找到相應的操作函數,并進行調用。如果操作函數使用NULL,系統操作就進行默認的處理。定義并編寫完file_operation結構函數后,要定義一個初始化函數,比如函數名可device_init(),在linux初始化的時候要調用該函數,因此,該函數包括以下幾項工作:(1)對該驅動程序所使用到的硬件寄存器進行初始化,包括中斷寄存器。(2)對初始化設備相關的參數。一般來說,每個設備要定義一個設備變量,用來保存設備相關的參數。(3)注冊

溫馨提示

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

評論

0/150

提交評論