1. 程式人生 > >驅動的定義、分類、安全性

驅動的定義、分類、安全性

以下內容源嵌入式課程的學習,如有侵權,請告知刪除。

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)學會總結、記錄,這會有助於理解