驱动的定义、分类、安全性
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                驱动的定义、分类、安全性
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                以下內容源嵌入式課程的學習,如有侵權,請告知刪除。
 
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)學會總結、記錄,這會有助于理解
 
總結
以上是生活随笔為你收集整理的驱动的定义、分类、安全性的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 宏定义函数container_of的解释
- 下一篇: 让DEVCpp支持C11
