天天看點

linux驅動學習(1)-初識驅動一、什麼是驅動二、驅動的定位三、驅動的子產品化設計四、裝置驅動分類五、驅動安全性要求

文章目錄

  • 一、什麼是驅動
  • 二、驅動的定位
  • 三、驅動的子產品化設計
    • 3.1 宏核心
    • 3.2 微核心
    • 3.3 linux
  • 四、裝置驅動分類
    • 4.1 字元裝置驅動
    • 4.2 塊裝置驅動
    • 4.3 網絡裝置驅動
  • 五、驅動安全性要求
    • 5、1 驅動與核心關聯
    • 5.2 驅動對核心的影響
    • 5.3 常見的驅動安全性問題

一、什麼是驅動

經常遇到顯示卡不行了,更新顯示卡驅動,聲霸卡不行了,更新聲霸卡驅動。從我們常識上來說,驅動就是一段代碼,用來驅使硬體進行工作的。是以也可以叫驅動程式。

狹義上來說,驅動是整個作業系統中用來操控硬體的邏輯方法的部分代碼。

二、驅動的定位

驅動相當于一個頂梁柱,站在硬體的基礎上頂起了整個作業系統的運作。

linux驅動學習(1)-初識驅動一、什麼是驅動二、驅動的定位三、驅動的子產品化設計四、裝置驅動分類五、驅動安全性要求

驅動有很多層。但是驅動是直接對硬體進行操作,驅動和上層之間可能會有一些系統的插曲,不會像圖上那樣直接。

三、驅動的子產品化設計

3.1 宏核心

簡單來說,宏是一個整體,缺一不可,就是把核心從整體上作為一個大過程實作,并同時運作在一個單獨的位址空間。所有的核心服務都在一個位址上運作,互相之間之直接調用函數,簡單高效。

類似于,寫了n個.C檔案,這些檔案中間有一些函數交叉調用。最後通過makefile自動程式設計,生成了一個可執行檔案,如過其中的一個.C檔案出現問題,那麼是不是你的可執行檔案就會出現問題,你的其餘的.c檔案因為調用了這個損壞的.c檔案的函數,是不是這些.c檔案都會出現問題,這樣就麻煩了。

但是也有好處,就是你是直接調用,很快也很節省時間。類似于一榮俱榮,一損俱損。

3.2 微核心

微核心,就是一個個單獨功能子產品化。不同的功能之間進行IPC通訊,互相之間沒有直接影響。就好像你玩英雄聯盟,和隊友開着QQ語音,你的QQ掉線了。你不能和隊友之間語音交流了,但是不影響你玩英雄聯盟,不想宏核心,你必須登入qq才能玩,不然不能玩。

3.3 linux

本質上是宏核心,但是又吸收了微核心的子產品化特性,主要是展現在靜态子產品化和動态子產品化的區分上。

什麼是靜态子產品化呢:靜态子產品化就是在核心編譯的時候可以進行裁剪,但是要改變的話需要重新開機,好像現在我們安裝一些古老的應用就要需要重新開機電腦才行。

那麼動态子產品化呢:就是核心可以不用重編譯,可以不用重新開機就行,比如現在的usb轉序列槽,插上去就可以了,不用就彈出。

linux也是,有很多個.c檔案構成。大多數檔案之間可以進行直接調用,是以這就是相當于宏核心。同時在linux上也可以安裝驅動,和解除安裝驅動,就相當于微核心。

四、裝置驅動分類

一般來說裝置驅動分三類:字元裝置驅動、塊裝置驅動、網絡裝置驅動。

4.1 字元裝置驅動

**字元裝置驅動:**軟體操作裝置時是以位元組為機關進行的。典型的如LCD、序列槽、LED、蜂鳴器、觸摸屏······

字元裝置驅動比較重要,為什麼,因為大多數裝置都是屬于字元裝置。

同時字元裝置修改也比較友善,我們可以直接找到對應的點去修改,而不用在乎其餘位置,我們以後的工作大多數都是以此來展開的。

4.2 塊裝置驅動

**塊裝置驅動:**塊裝置被軟體操作時是以塊(多個位元組構成的一個機關)為機關的。裝置的塊大小是裝置本身設計時定義好的,軟體是不能去更改的,不同裝置的塊大小可以不一樣。常見的塊裝置都是存儲類裝置,如:硬碟、NandFlash、iNand、SD····操作塊裝置時,我們必須以塊機關進行操作,将一塊的資料讀取到記憶體中去,然後在記憶體中找到相應的那個位元組資料修改之後再以一塊的資料寫入到我們的塊裝置中去。

因為塊裝置驅動修改起來比較麻煩,一個塊裡面64個位元組,其中第37個位元組我們需要把裡面的數字a改為b,那麼我們就需要把這個塊裡面的所有位元組讀出來,然後把37的a改為b,最後就把改好了的這個64個位元組寫回去。是以就比較麻煩。

4.3 網絡裝置驅動

**網絡裝置驅動:**網絡裝置,網絡裝置是專為網卡設計的驅動模型,linux中網絡裝置驅動主要目的是為了支援API中socket相關的那些函數工作。這個用得比較少。因為專用與網絡這塊,如果後續工作需要,後面再細說。

五、驅動安全性要求

5、1 驅動與核心關聯

1)你可以了解為驅動就是核心的一部分,而且驅動已經成為核心中最龐大的組成部分。

2)之前說過linux的核心有一定的宏,是以核心會直接以函數額方式調用驅動代碼。

3)驅動的動态的安裝和解除安裝都會對核心造成一定的影響(自己對核心進行改造,如果改造失敗就會造成一定的影響)

5.2 驅動對核心的影響

1)驅動的崩潰可能會導緻核心崩潰,因為linux核心有一定的微核心特性。

2)驅動的效率會對核心的效率造成影響。(驅動慢,造成讀取檔案速度慢,然後核心運作自然也就慢了)

3)驅動的漏洞會造成核心的安全洩漏。

5.3 常見的驅動安全性問題

1)指針沒有初始化。驅動大多數會使用指針,如果沒有初始化造成野指針,就會有一定影響。

2)惡意使用者程式。(大多數與緩沖區溢出)

3)緩沖區溢出。(比如果我驅動緩沖區給了50個位元組,但是資料傳入卻1000個,遠遠超出我們的緩沖區,那麼我們我們的記憶體的一些資料就可能被沖掉,是以可以加一個判斷 if(資料>緩沖區)怎麼怎麼樣)。

4)競争狀态。

後面要自己多寫代碼,自己多練習,培養一個良好的代碼習慣。

繼續閱讀