版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第1章Linux驅(qū)動(dòng)開發(fā)概述設(shè)備驅(qū)動(dòng)程序是計(jì)算機(jī)硬件與應(yīng)用程序的接口,是軟件系統(tǒng)與硬件系統(tǒng)溝通的橋梁。如果沒有設(shè)備驅(qū)動(dòng)程序,那么硬件設(shè)備就只是一堆廢鐵,沒有一點(diǎn)的功能。本章將對(duì)Linux驅(qū)動(dòng)開發(fā)進(jìn)行簡(jiǎn)要的概述,使讀者理解一些常見的概念。1.1Linux設(shè)備驅(qū)動(dòng)的基本概念本節(jié)對(duì)中斷相關(guān)概念進(jìn)行了簡(jiǎn)要的分析,并對(duì)中斷進(jìn)行了分類。根據(jù)不同的中斷類型,寫中斷驅(qū)動(dòng)程序的方法也不一樣。下面將主要介紹中斷的基本概念和常見分類。1.1.1設(shè)備驅(qū)動(dòng)程序概述設(shè)備驅(qū)動(dòng)程序(DeviceDriver),簡(jiǎn)稱驅(qū)動(dòng)程序(Driver)。它是一個(gè)允許計(jì)算機(jī)軟件(ComputerSoftware)與硬件(Hardware)交互的程序。這種程序建立了一個(gè)硬件與硬件,或硬件與軟件溝通的界面。CPU經(jīng)由主板上的總線(Bus)或其它溝通子系統(tǒng)(Subsystem)與硬件形成連接,這樣的連接使得硬件設(shè)備(Device)之間的數(shù)據(jù)交換成為可能。1.1.2設(shè)備驅(qū)動(dòng)程序的作用設(shè)備驅(qū)動(dòng)程序是一種可以使計(jì)算機(jī)和設(shè)備通信的特殊程序,可以說相當(dāng)于硬件的接口。操作系統(tǒng)只有通過這個(gè)接口,才能控制硬件設(shè)備的工作。假如某設(shè)備的驅(qū)動(dòng)程序未能正確安裝,便不能正常工作。正因?yàn)檫@個(gè)原因,驅(qū)動(dòng)程序在系統(tǒng)中的所占的地位十分重要。一般當(dāng)操作系統(tǒng)安裝完畢后,首要的便是安裝硬件設(shè)備的驅(qū)動(dòng)程序。1.1.3設(shè)備驅(qū)動(dòng)的分類計(jì)算機(jī)系統(tǒng)的主要硬件由CPU、存儲(chǔ)器和外部設(shè)備組成。驅(qū)動(dòng)程序的對(duì)象一般是存儲(chǔ)器和外部設(shè)備。隨著芯片制造工藝的提高,為了節(jié)約成本,通常將很多原屬于外部設(shè)備的控制器嵌入到CPU內(nèi)部。所以現(xiàn)在驅(qū)動(dòng)程序應(yīng)該支持CPU中的嵌入控制器。Linux將這些設(shè)備分為3大類:字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備。1.2Linux操作系統(tǒng)與驅(qū)動(dòng)的關(guān)系Linux操作系統(tǒng)與設(shè)備驅(qū)動(dòng)之間的關(guān)系如圖所示。用戶空間包括應(yīng)用程序和系統(tǒng)調(diào)用兩層。應(yīng)用程序一般依賴于函數(shù)庫,而函數(shù)庫是由系統(tǒng)調(diào)用來編寫的,所以應(yīng)用程序間接地依賴于系統(tǒng)調(diào)用。1.3Linux驅(qū)動(dòng)程序開發(fā)Linux驅(qū)動(dòng)程序的開發(fā)與應(yīng)用程序的開發(fā)有很大的差別。這些差別導(dǎo)致了編寫Linux設(shè)備驅(qū)動(dòng)程序與編寫應(yīng)用程序有本質(zhì)的區(qū)別,所以對(duì)于應(yīng)用程序的設(shè)計(jì)技巧很難直接應(yīng)用在驅(qū)動(dòng)程序的開發(fā)上。本節(jié)將對(duì)Linux驅(qū)動(dòng)程序的開發(fā)進(jìn)行簡(jiǎn)要的講解。1.3.1用戶態(tài)和內(nèi)核態(tài)Linux操作系統(tǒng)分為用戶態(tài)和內(nèi)核態(tài)。用戶態(tài)處理上層的軟件工作。內(nèi)核態(tài)用來管理用戶態(tài)的程序,完成用戶態(tài)請(qǐng)求的工作。驅(qū)動(dòng)程序與底層的硬件交互,所以工作在內(nèi)核態(tài)。1.3.2模塊機(jī)制模塊是可以在運(yùn)行時(shí)加入內(nèi)核的代碼,這是Linux的一個(gè)很好的特性。這個(gè)特性使內(nèi)核可以很容易的擴(kuò)大或者縮小,一方面擴(kuò)大內(nèi)核可以增加內(nèi)核的功能,另一方面縮小內(nèi)核可以減小內(nèi)核的大小。1.3.3編寫設(shè)備驅(qū)動(dòng)程序需要了解的知識(shí)Linux操作系統(tǒng)有三四百萬行代碼,其中驅(qū)動(dòng)程序代碼就有四分之三左右。所以對(duì)于驅(qū)動(dòng)開發(fā)者來說,學(xué)習(xí)和編寫設(shè)備驅(qū)動(dòng)程序都是一個(gè)漫長的過程。在這個(gè)過程中,讀者應(yīng)該掌握如下的一些知識(shí):(1)驅(qū)動(dòng)開發(fā)人員應(yīng)該有良好的C語言基礎(chǔ)。(2)驅(qū)動(dòng)開發(fā)人員應(yīng)該有良好的硬件基礎(chǔ)。(3)驅(qū)動(dòng)開發(fā)人員應(yīng)該對(duì)Linux內(nèi)核源代碼有初步的了解。(4)驅(qū)動(dòng)開發(fā)人員應(yīng)該有多任務(wù)程序設(shè)計(jì)的能力。1.4編寫設(shè)備驅(qū)動(dòng)程序的注意事項(xiàng)大部分程序員都比較熟悉應(yīng)用程序的編寫,但是對(duì)于驅(qū)動(dòng)程序的編寫可能不是很熟悉。關(guān)于應(yīng)用程序的很多編程經(jīng)驗(yàn)不能直接的應(yīng)用于驅(qū)動(dòng)程序的編寫中來。下面給出編寫驅(qū)動(dòng)程序的一些注意事項(xiàng),希望引起讀者注意。1.4.1應(yīng)用程序開發(fā)與驅(qū)動(dòng)程序開發(fā)的差異在Linux上的程序開發(fā)一般分為兩種,一種是內(nèi)核及驅(qū)動(dòng)程序開發(fā),另一種是應(yīng)用程序開發(fā)。這兩種開發(fā)種類對(duì)應(yīng)Linux的兩種狀態(tài),分別是內(nèi)核態(tài)和用戶態(tài)。內(nèi)核態(tài)用來管理用戶態(tài)的程序,完成用戶態(tài)請(qǐng)求的工作;用戶態(tài)處理上層的軟件工作。驅(qū)動(dòng)程序與底層的硬件交互,所以工作在內(nèi)核態(tài)。1.4.2GUNC開發(fā)驅(qū)動(dòng)程序GUNC語言最開始起源于一個(gè)GUN計(jì)劃,GUN的意思是“GUNisnotUNIX”。GUN計(jì)劃開始于1984年,這個(gè)計(jì)劃的目的是開發(fā)一個(gè)類似UNIX并且軟件自由的完整操作系統(tǒng)。這個(gè)計(jì)劃一直進(jìn)行,直到Linus開發(fā)Linux操作系統(tǒng)時(shí),GNU計(jì)劃已經(jīng)開發(fā)出來了很多高質(zhì)量的自由軟件。其中就包括著名的GCC編譯器,GCC編譯器能夠編譯GUNC語言。Linus考慮到GUN計(jì)劃的自由和免費(fèi),所以選擇了GCC編譯器來編寫內(nèi)核代碼,之后的很多開發(fā)者也使用這個(gè)編譯器,所以直到現(xiàn)在,驅(qū)動(dòng)開發(fā)人員也使用GUNC語言來開放驅(qū)動(dòng)程序。1.4.3不能使用C庫來開發(fā)驅(qū)動(dòng)程序與用戶空間的應(yīng)用程序不同,內(nèi)核不能調(diào)用標(biāo)準(zhǔn)的C函數(shù)庫,主要的原因在于對(duì)于內(nèi)核來說完整的C庫太大了。一個(gè)編譯的內(nèi)核大小可以是1M左右的字節(jié),而一個(gè)標(biāo)準(zhǔn)的C語言庫大小可能操作5M字節(jié)。這對(duì)于存儲(chǔ)容量較小的嵌入式設(shè)備來說,是不實(shí)用的。缺少標(biāo)志C語言庫,并不是說驅(qū)動(dòng)程序就只能做很好的事情了。1.4.4沒有內(nèi)存保護(hù)機(jī)制當(dāng)一個(gè)用戶應(yīng)用程序由于編程錯(cuò)誤,試圖訪問一個(gè)非法的內(nèi)存空間,那么操作系統(tǒng)內(nèi)核會(huì)結(jié)束這個(gè)進(jìn)程,并返回錯(cuò)誤碼。應(yīng)用程序可以在操作系統(tǒng)內(nèi)核的幫助下,恢復(fù)過來,而且應(yīng)用程序并不會(huì)對(duì)操作系統(tǒng)內(nèi)核有太大的影響。但是如果當(dāng)操作系統(tǒng)內(nèi)核訪問了一個(gè)非法的內(nèi)存,那么就有可能蘋的諍說拇或者數(shù)據(jù)。這將導(dǎo)致內(nèi)核處于未知的狀態(tài),內(nèi)核會(huì)通過oops錯(cuò)誤給用戶一些提示,但是這些提示都是不支持,難以分析的。1.4.5小內(nèi)核棧用戶空間的程序可以從棧上分配大量的空間來存放變量,甚至用棧存放巨大的數(shù)據(jù)結(jié)構(gòu)或者數(shù)組都沒問題。之所以能這樣做是因?yàn)閼?yīng)用程序是非常駐內(nèi)存的,它們可以動(dòng)態(tài)的申請(qǐng)和釋放所有可用的內(nèi)存空間。內(nèi)核要求使用固定常駐的內(nèi)存空間,因此要求盡量少的占用常駐內(nèi)存,而盡量多的留出內(nèi)存提供給用戶程序使用。因此內(nèi)核棧的長度是固定大小的,不可動(dòng)態(tài)增長的32位機(jī)的內(nèi)核棧是8KB;64位機(jī)的內(nèi)核棧是16KB。1.4.6重視可移植性對(duì)于用戶空間的應(yīng)用程序來說,可移植性一直是一個(gè)重要的問題。一般可移植性通過兩種方式來實(shí)現(xiàn)。一種方式是定義一套可移植的API,然后對(duì)這套API在個(gè)這兩個(gè)需要移植的平臺(tái)上分別實(shí)現(xiàn)。應(yīng)用程序開發(fā)人員,只要使用這套可移植的API,就可以寫出可移植的程序。在嵌入式領(lǐng)域,比較常見的API套件是QT。另一種方式是使用類似JAVA、actionscript等可移植到很多操作系統(tǒng)上的語言。這些語言一般通過虛擬機(jī)來執(zhí)行,所以可以移植到很多平臺(tái)上。1.5Linux驅(qū)動(dòng)的發(fā)展趨勢(shì)隨著嵌入式技術(shù)的發(fā)展,使用Linux的嵌入式設(shè)備也越來越多。同樣地,工業(yè)上對(duì)Linux驅(qū)動(dòng)的開發(fā)也越來越重視。本節(jié)對(duì)Linux驅(qū)動(dòng)的發(fā)展做簡(jiǎn)要的介紹。1.5.1Linux驅(qū)動(dòng)的發(fā)展Linux和嵌入式Linux軟件在過去幾年里已經(jīng)越來越普遍的為IT業(yè)、半導(dǎo)體公司、嵌入式系統(tǒng)所認(rèn)可和接受,它已經(jīng)成為一個(gè)可以替代微軟的Windows和眾多傳統(tǒng)的RTOS的重要的操作系統(tǒng)。Linux內(nèi)核和基本組件和工具已經(jīng)是成熟的軟件,面向行業(yè),應(yīng)用和設(shè)備的嵌入式Linux工具軟件和嵌入式Linux操作系統(tǒng)平臺(tái)是未來發(fā)展的必然趨勢(shì)。符合標(biāo)準(zhǔn),遵循開放是大勢(shì)所趨,人心所向,嵌入式Linux也不例外。1.5.2驅(qū)動(dòng)的應(yīng)用計(jì)算機(jī)系統(tǒng)已經(jīng)融入到了各行各業(yè)、各個(gè)領(lǐng)域;計(jì)算機(jī)系統(tǒng)在電子產(chǎn)品中無處不在,從手機(jī)、游戲機(jī)、冰箱、電視、洗衣機(jī)等小型設(shè)備,到汽車、輪船、火車、飛機(jī)等大型設(shè)備都有它的身影。這些設(shè)備都需要驅(qū)動(dòng)程序來使之運(yùn)行,可以說驅(qū)動(dòng)程序的運(yùn)用前景是非常廣泛的。每一天都有很多驅(qū)動(dòng)程序需要去編寫,所以驅(qū)動(dòng)程序開發(fā)人員的前途是無比光明的。1.5.3相關(guān)學(xué)習(xí)資源學(xué)習(xí)Linux設(shè)備驅(qū)動(dòng)程序,單單只是學(xué)習(xí)理論是不夠的,還需要自動(dòng)動(dòng)手來寫各種設(shè)備的驅(qū)動(dòng)程序。寫驅(qū)動(dòng)程序不僅需要讀者的軟件知識(shí),還需要讀者的硬件知識(shí)。在這里,推薦一些國內(nèi)外優(yōu)秀的驅(qū)動(dòng)開發(fā)網(wǎng)站,希望讀者的學(xué)習(xí)有所幫助。(1)Linux內(nèi)核之旅網(wǎng)站:/(2)知名博客:/26540(3)Linux中國:/(4)一個(gè)不錯(cuò)的Linux中文社區(qū):/(5)csdn內(nèi)核驅(qū)動(dòng)研究社區(qū):/s/Linux_Dirver/0.html(6)Linux伊甸園:/index.php1.6小結(jié)本章首先對(duì)Linux設(shè)備驅(qū)動(dòng)程序的基本概念進(jìn)行了詳細(xì)的講述;并且講述了設(shè)備驅(qū)動(dòng)程序的作用;接著講述了設(shè)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 抑郁癥心理護(hù)理效果評(píng)估-洞察分析
- 移動(dòng)支付安全風(fēng)險(xiǎn)-洞察分析
- 新材料對(duì)制造業(yè)升級(jí)影響研究-洞察分析
- 異常行為檢測(cè)與分析-洞察分析
- 碳中和戰(zhàn)略與能源轉(zhuǎn)型-洞察分析
- 醫(yī)療衛(wèi)生人才隊(duì)伍建設(shè)-洞察分析
- 碳酸飲料行業(yè)品牌營銷策略-洞察分析
- 土地開發(fā)與政策引導(dǎo)-洞察分析
- 文物保存技術(shù)發(fā)展趨勢(shì)-洞察分析
- 關(guān)于重陽節(jié)的廣播稿(8篇)
- 【培訓(xùn)課件】建設(shè)工程施工工地消防安全管理
- 2023-2024學(xué)年江蘇省蘇州市昆山市八年級(jí)(上)期末英語試卷
- 2024屆高考語文專題復(fù)習(xí):文言文閱讀專項(xiàng)練習(xí)題匯編(含答案)
- 2024年BRC培訓(xùn)課件全面解析
- 綠色建筑概論學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 露天礦山開采施工組織方案
- GB/T 44481-2024建筑消防設(shè)施檢測(cè)技術(shù)規(guī)范
- 海灘沖浪課件教學(xué)課件
- 甲狀腺超聲超聲征象及TI-RADS分類
- 《白楊禮贊》知識(shí)清單
- 智能建造施工技術(shù) 課件 項(xiàng)目1 智能建造施工概論
評(píng)論
0/150
提交評(píng)論