LINUX設備驅動程序筆記(一)設備驅動程序簡單介紹


<一>:設備驅動程序的作用

       從一個角度看,設備驅動程序的作用在於提供機制,而不是策略。

在編寫驅動程序時,程序猿應該特別注意以下這個基本概念:編寫訪問硬件的內核代碼時,不要給用戶強加不論什么特定策略。由於不同的用戶有不同的需求,驅動程序應該處理如何使硬件可用的問題。而將如何使用硬件的問題留給上層應用程序。

       從還有一個角度來看驅動程序。它還能夠看作是應用程序和實際設備之間的一個軟件層。

       總的來說,驅動程序設計主要還是綜合考慮以下三個方面的因素:提供給用戶盡量多的選項、編寫驅動程序要占用的時間以及盡量保持程序簡單而不至於錯誤叢生。

 

<二>:內核功能划分

       Unix系統支持多進程並發執行。每一個進程都請求系統資源。內核負責處理全部這些請求,依據內核完畢任務的不同,可將內核功能分為例如以下幾部分:

       1.進程管理:負責創建和銷魂進程。並處理它們和外部世界之間的連接。內核進程管理活動就是在單個或多個CPU上實現了多個進程的抽象。

 

       2.內存管理:內存是計算機的主要資源之中的一個,用來管理內存的策略是決定系統系能的一個關鍵因素。

 

       3.文件系統:內核在沒有結構的硬件上構造結構化的文件系統。而文件抽象在整個系統中廣泛使用。

 

       4.設備控制:差點兒每個系統操作終於都會映射到物理設備上。

 

       5.網絡功能:網絡功能也必須由操作系統來管理,系統負責在應用程序和網絡接口之間傳遞數據包,並依據網絡活動控制程序的運行。另外。全部的路由和地址解析問題都由內核處理。

 

       可裝載模塊:Linux有一個非常好的特性:內核提供的特性可在執行時進行擴展。可在執行時加入到內核的代碼被稱為“模塊”。

Linux內核支持幾種模塊類型。包含但不限於設備驅動程序。

每一個模塊由目標代碼組成,能夠使用insmod程序將模塊連接到正在執行的內核,也能夠使用rmmod程序移除連接。

 

<三>:設備和模塊的分類

        Linux系統將設備分成三個基本類型:字符設備、塊設備、網絡接口。

 

       1.字符設備:字符設備驅動程序通常至少要實現open、close、read和write系統調用。字符設備能夠通過文件系統節點來訪問。

這些設備文件和普通文件之間的唯一區別在於對普通文件的訪問能夠前后移動訪問位置。而大多數字符設備是一個僅僅能順序訪問的數據通道。

 

        2.塊設備:和字符設備類似,塊設備也是通過/dev文件夾下的文件系統節點來訪問。

塊設備上可以容納文件系統。塊設備和字符設備的差別只在於內核內部管理數據的方式,也就是內核及驅動程序之間的軟件接口。而這些不同對用戶來講是透明的。

在內核中,和字符驅動程序相比,塊驅動程序具有全然不同的接口。

        3.網絡接口:網絡接口由內核中的網絡子系統驅動。負責發送和接受數據包。但它不須要了解每項事務怎樣映射到實際傳送的數據包。網絡驅動程序不須要知道各個連接的相關信息,它僅僅要處理數據包就可以。

內核和網絡設備驅動程序間的通信,全然不同於內核和字符以及塊驅動程序之間的通信,內核調用一套和數據包傳輸相關的函數而不是read、write等。

 

       除了設備驅動程序之外。內核中其它一些功能也都模塊化了。如文件系統。

一個文件系統類型決定了怎樣在塊設備上組織數據,以表示文件夾和文件形成的樹。文件系統並非設備驅動程序,由於沒有不論什么實際物理設備同這樣的信息組織方式相關聯。相反,文件系統類型是個軟件驅動程序。它將底層數據結構映射到高層數據結構。決定文件名稱能夠多長以及在文件夾項中存儲文件的哪些信息等。

 

<四>:安全問題

        1.系統中的全部安全檢查都是由內核代碼進行的,假設內核有安全漏洞,則整個系統就會有安全漏洞。執行正式公布的內核時,僅僅有超級用戶或成為超級用戶的入侵者才干使用特權代碼。

 

       2.驅動程序編寫者應當盡量避免在代碼中實現安全策略。

安全策略問題最好在系統管理員的控制之下,在內核的高層來實現。驅動程序編寫者還應當避免因為自身原因引入安全方面的缺陷。

 

       3.不論什么從用戶進程得到的輸入僅僅有經過內核嚴格驗證后才干使用。還要小心對待未初始化的內存:不論什么從內核中得到的內存。都必須在提供給用戶進程或者設備之前清零或者以其它方式初始化。否則就可能發生信息泄露。

 

       4.應當小心使用從第三方獲得的軟件,特別是與內核相關時更是如此,這是由於源碼是開放的,每一個人都能夠改動和又一次編譯它。

 

       5.Linux內核也可編譯為不支持模塊方式。從而能夠關閉不論什么模塊相關的安全漏洞。能夠通過權能機制禁止在系統啟動后轉載內核模塊。

 

<五>:版本號編號

       1.首先,Linux系統中的每一個軟件包都有自己的發行編號,並且它們之間常常存在相互間的依賴關系。

如今差點兒全部的發行版都帶有包管理器,它在驗證滿足包之間的依賴關系后才同意升級包。遇到不論什么版本號相關的問題時,可參考內核源文件Documentation/Changes來解決。

       2.對內核來講,偶數編號的內核版本號是用於正式發行的穩定版本號。而奇數編號的版本號則

是開發過程中的一個快照。

 

<六>:許可證條款

        Linux遵循GNU通用的公共許可證(GPL),GPL同意不論什么人又一次公布甚至銷售由GPL條款保護的產品,前提是產品接受者可以獲得源代碼並擁有相同的權利。

假設想閱讀這個許可證原文,可以在系統的內核源代碼樹頂層文件夾中的COPYING文件里找到它。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM