設備驅動程序簡介【轉】

(轉自:https://www.cnblogs.com/microxiami/p/11254081.html

更多內容請參考Linux設備驅動程序學習----目錄

1. 簡介

  Linux系統的優點是,系統內部實現細節對所有人都是公開的。Linux內核由大量複雜的代碼組成,設備驅動程序可以作爲進入Linux內核世界大門的切入口。

  設備驅動程序在Linux內核中,是一個個獨立的黑盒子,在調用內部接口時某個特定硬件做出響應,這些接口隱藏了設備的工作細節。用戶的操作通過獨立於特定驅動程序的一組標準化調用執行,將這些調用映射到作用於實際硬件的設備特有操作上,是設備驅動程序的任務。

  模塊化的特點使得Linux驅動程序的編寫非常方便簡單。

2. 設備驅動程序的作用

  設備驅動程序的作用在於提供機制,而不是提供策略。

  區分機制和策略是Unix設計背後隱含的最好思想之一。大部分編程問題都可以分成兩部分:
機制:需要提供什麼功能
策略:如何使用這些功能

我們應當儘可能做到讓驅動程序不帶策略。

  編寫驅動程序時,特別注意:編寫訪問硬件的內核代碼時,不要給用戶強加任何特定策略。因爲不同的用戶有不同的需求,驅動程序應該處理如何使硬件可用的問題,而將怎樣使用硬件的問題留給應用程序。

  驅動程序可以看作是應用程序和實際設備之間的一個軟件層。

  驅動程序設計要綜合考慮下面三個問題的因素:提供給用戶儘量多的選項、編寫驅動程序要佔用的時間、儘量保持程序簡單。

3. 內核功能劃分

根據內核完成任務的不同,內核功能分爲如下幾個部分:

進程管理

  負責創建和銷燬進程,並處理它們和外部世界之間的連接。如進程之間的通信,控制進程如何共享CPU的調度器等。

內存管理

  內存是計算機的主要資源之一,用來管理內存的策略是決定系統性能的一個關鍵因素。內核在有限的可用資源上爲每個進程創建一個虛擬地址空間。

文件系統

  Unix中的每個對象幾乎都可以當作文件來看待。內核可以在沒有結構的硬件上構造結構化的文件系統。

設備控制

  幾乎每一個系統操作最終都會映射到物理設備上。幾乎所有設備操作都由驅動程序來完成。內核必須爲系統中的每個外設嵌入相應的驅動程序。

網絡功能

  大部分網絡操作和具體進程無關,網絡功能必須由操作系統管理。系統負責在應用程序和網絡接口之間傳遞數據包,並根據網絡活動控制程序的執行。所有的路由和地址解析都由內核處理。

可裝載模塊

  Linux有個很好的特性,內核提供的特性可在運行時擴展,即系統啓動並運行時,可以以模塊的形式,向內核添加、移出功能。

4. 設備和模塊分類

Linux系統將設備分爲三種基本類型,字符設備模塊、塊設備模塊、網絡設備模塊。

字符設備

  字符設備是個能像字節流一樣被訪問的設備,類似文件。比如:字符終端(/dev/console)和串口(/dev/ttys0)

  設備文件和普通文件的唯一差別是,對普通文件的訪問可以前後移動訪問位置,而大多數字符設備是一個個只能順序訪問的數據通道。除個別例外。

塊設備

  塊設備是按照塊進行讀寫的設備,一次只能傳輸一個或多個完整的塊,一個塊一般是512字節,或2的更高次冪字節的數據。
  塊設備上能夠容納文件系統。

網絡設備

  網絡設備是一個能夠和其他主機交換數據的設備,通常,接口是個硬件設備,也可能是個純軟件設備,比如迴環接口(loopback)。
  網絡設備由內核中的網絡子系統驅動,負責發送和接收數據包。

  除了設備驅動程序外,內核中其他一些功能,不管是硬件還是軟件功能,都模塊化了。如常見的文件系統。。。

5. 安全問題

  系統中的所有安全檢查都是由內核代碼進行的,如果內核有安全漏洞,則整個系統就有安全漏洞。

  驅動程序編寫者應當儘量避免在代碼中實現安全策略。
  驅動程序編寫者應當避免由於自身原因引入安全方面的缺陷。
  任何從用戶進程得到的輸入只有經過內核嚴格驗證後才能使用。必須小心對待未初始化的內存,任何從內核中得到的內存,都必須在提供給用戶進程或者設備之前清零或者以其他方式初始化,否則可能發生信息泄露。

  Linux內核也可編譯爲不支持模塊方式,從而可以關閉任何模塊相關的安全漏洞。此時,所有需要的驅動程序必須直接編譯到內核中。

6. 版本編號

  對內核來講,偶數編號的內核版本(如2.6.x)是用於正式發行的穩定版本,而奇數編號的版本(如2.7.x)則是開發過程中的一個快照。

更多內容請參考Linux設備驅動程序學習----目錄

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章