1. 程式人生 > >《5.linux驅動開發-第1部分-5.1.驅動應該怎麼學》

《5.linux驅動開發-第1部分-5.1.驅動應該怎麼學》

《5.linux驅動開發-第1部分-5.1.驅動應該怎麼學》

第一部分、章節目錄
5.1.1.什麼是驅動1
5.1.2.什麼是驅動2
5.1.3.模組化設計
5.1.4.linux裝置驅動分類
5.1.5.驅動程式的安全性要求
5.1.6.驅動應該這麼學

第二部分、章節介紹
5.1.1.什麼是驅動1
本節首先講解驅動部分整個課程規劃,然後講述第1個課程的整體規劃。
5.1.2.什麼是驅動2
本節從4個層面解釋驅動的本質含義,然後詳細介紹了linux核心驅動在整個分層框架中的位置。
5.1.3.模組化設計
本節首先講解微核心和巨集核心的概念,然後講解linux核心的靜態和動態模組化設計。
5.1.4.linux裝置驅動分類
本節講述linux核心中三種主要驅動型別的特點和差異,其中重點講述的是字元裝置驅動特徵及其與塊裝置驅動的差異。
5.1.5.驅動程式的安全性要求
本節講述驅動程式和核心的關聯,從而說明驅動程式對安全性的特殊要求
5.1.6.驅動應該這麼學
本節講述本階段驅動課程學習的先決條件和本階段課程學習時的注意事項。

第三部分、隨堂記錄
5.1.1_2.什麼是驅動1_2
5.1.1.1、理解驅動的概念
(1)驅動一詞的字面意思
(2)物理上的驅動
(3)硬體中的驅動
(4)linux核心驅動。軟體層面的驅動廣義上就是指:這一段程式碼操作了硬體去動,所以這一段程式碼就叫硬體的驅動程式。(本質上是電力提供了動力,而驅動程式提供了操作邏輯方法)
狹義上驅動程式就是專指作業系統中用來操控硬體的邏輯方法部分程式碼。
5.1.1.2、linux體系架構
(1)分層思想
(2)驅動的上面是系統呼叫API
(3)驅動的下面是硬體
(4)驅動自己本身也是分層的

5.1.3.模組化設計
5.1.3.1、微核心和巨集核心
(1)巨集核心(又稱為單核心):將核心從整體上作為一個大過程實現,並同時執行在一個單獨的地址空間。所有的核心服務都在一個地址空間執行,相互之間直接呼叫函式,簡單高效。
(2)微核心:功能被劃分成獨立的過程,過程間通過IPC進行通訊。模組化程度高,一個服務失效不會影響另外一個服務。典型如windows
(3)linux:本質上是巨集核心,但是又吸收了微核心的模組化特性,提現在2個層面
5.1.3.2、靜態模組化:在編譯時實現可裁剪,特徵是想要功能裁剪改變必須重新編譯
5.1.3.3、動態模組化:zImage可以不重新編譯燒錄,甚至可以不關機重啟就實現模組的安裝和解除安裝。

5.1.4.linux裝置驅動分類
5.1.4.1、驅動分類
(1)分3類:字元裝置驅動、塊裝置驅動、網路裝置驅動
(2)分類原則:裝置本身讀寫操作的特徵差異
5.1.4.2、三類驅動程式詳細對比分析
(1)字元裝置,準確的說應該叫“位元組裝置”,軟體操作裝置時是以位元組為單位進行的。典型的如LCD、串列埠、LED、蜂鳴器、觸控式螢幕······
(2)塊裝置,塊裝置是相對於字元裝置定義的,塊裝置被軟體操作時是以塊(多個位元組構成的一個單位)為單位的。裝置的塊大小是裝置本身設計時定義好的,軟體是不能去更改的,不同裝置的塊大小可以不一樣。常見的塊裝置都是儲存類裝置,如:硬碟、NandFlash、iNand、SD····
(3)網路裝置,網路裝置是專為網絡卡設計的驅動模型,linux中網路裝置驅動主要目的是為了支援API中socket相關的那些函式工作。
5.1.4.3、為什麼字元裝置驅動最重要
(1)常見大量裝置都屬於字元裝置
(2)舉例說明非標準型別字元裝置驅動

5.1.5.驅動程式的安全性要求
5.1.5.1、驅動是核心的一部分
(1)驅動已經成為核心中最龐大的組成部分
(2)核心會直接以函式呼叫的方式呼叫驅動程式碼
(3)驅動的動態安裝和解除安裝都會“更改”核心
5.1.5.2、驅動對核心的影響
(1)驅動程式崩潰甚至會導致核心崩潰
(2)驅動的效率會影響核心的整體效率
(3)驅動的漏洞會造成核心安全漏洞
5.1.5.3、常見驅動安全性問題
(1)未初始化指標
(2)惡意使用者程式
(3)緩衝區溢位
(4)競爭狀態

5.1.6.驅動應該這麼學
5.1.6.1、先學好C語言
5.1.6.2、掌握相關預備知識
(1)硬體操作方面
(2)應用層API
5.1.6.3、驅動學習階段
(1)注重實踐,一步一步寫驅動
(2)框架思維,多考慮整體和上下層
(3)先通過簡單裝置學linux驅動框架
(4)學會總結、記錄,這會有助於理解