驅動的定義、分類、安全性
阿新 • • 發佈:2019-02-13
以下內容源嵌入式課程的學習,如有侵權,請告知刪除。
1、驅動的概念
狹義上,驅動程式專指作業系統中的用來操控硬體的程式碼。
2、linux體系架構
(1)分層思想;
(2)驅動的上層是API(即應用程式呼叫API,API呼叫驅動),驅動的下層是硬體(硬體抽象為暫存器);
(3)驅動本身也是分層的。
3、微核心和巨集核心
(1)巨集核心(又稱為單核心)
- 將核心從整體上作為一個大過程(整體看做一個程式)實現,並同時執行在一個單獨的地址空間。
- 所有的核心服務都在一個地址空間執行,相互之間直接呼叫函式,簡單高效。
- 緊耦合,動一發而動全身。
(2)微核心
- 功能被劃分成獨立的過程程式(獨立的模組),過程間通過IPC(程序間通訊)進行通訊。
- 模組化程度高,一個服務失效不會影響另外一個服務。
- 典型如windows。但效率低。
(3)linux本質上是巨集核心,但是又吸收了微核心的模組化特性,提現在2個層面。
- 靜態模組化:在編譯時實現可裁剪,特徵是想要功能裁剪,改變必須重新編譯(需要關機重啟)動態模組化:
- zImage可以不重新編譯燒錄,甚至可以不關機重啟就實現模組的安裝和解除安裝,比如驅動的安裝。
4、linux裝置驅動分類
(1)驅動分類
- 字元裝置驅動、塊裝置驅動、網路裝置驅動;
- 分類原則是裝置讀寫操作的特徵差異;
(2)三類驅動程式詳細對比分析
- 字元裝置,即“位元組裝置”。軟體操作裝置時,以位元組為單位進行的。典型的如LCD、串列埠、LED、蜂鳴器、觸控式螢幕。
- 塊裝置,相對於字元裝置定義的。軟體操作裝置時,以塊(多個位元組構成的一個單位)為單位的。裝置的塊大小是裝置本身設計時定義好的,軟體不能去更改,但不同裝置的塊大小可以不一樣。常見的塊裝置都是儲存類裝置,如硬碟、NandFlash、iNand、SD。
- 網路裝置,網路裝置是專為網絡卡設計的驅動模型。linux中網路裝置驅動主要目的是為了支援API中socket相關函式的工作。
(3)為什麼字元裝置驅動最重要?
- 常見大量裝置都屬於字元裝置
5、驅動程式的安全性要求
(1)驅動是核心的一部分
- 驅動已經成為核心中最龐大的組成部分;
- 核心會直接以函式呼叫的方式呼叫驅動程式碼;
- 驅動的動態安裝和解除安裝都會“更改”核心。
(2)驅動對核心的影響
- 驅動程式崩潰甚至會導致核心崩潰;
- 驅動的效率會影響核心的整體效率;
- 驅動的漏洞會造成核心安全漏洞。
(3)常見驅動安全性問題
- 未初始化指標;
- 惡意使用者程式;
- 緩衝區溢位;
- 競爭狀態。
學習驅動要點
1、先學好C語言
2、硬體操作方面
3、應用層API
4、
(1)注重實踐,一步一步寫驅動
(2)框架思維,多考慮整體和上下層
(3)先通過簡單裝置學linux驅動框架
(4)學會總結、記錄,這會有助於理解