歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux設備驅動程序筆記

Linux設備驅動程序筆記

日期:2017/3/1 9:40:38   编辑:Linux編程

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

從一個角度看,設備驅動程序的作用在於提供機制,而不是策略。在編寫驅動程序時,程序員應該特別注意下面這個基本概念:編寫訪問硬件的內核代碼時,不要給用戶強加任何特定策略。因為不同的用戶有不同的需求,驅動程序應該處理如何使硬件可用的問題,而將怎樣使用硬件的問題留給上層應用程序。

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

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

深入Linux設備驅動程序內核機制 PDF掃描版-有書簽目錄 http://www.linuxidc.com/Linux/2013-04/83061.htm

Linux設備驅動程序(中文第三版) 2.6內核.pdf下載 http://www.linuxidc.com/Linux/2011-09/43991.htm

Linux設備驅動程序第三版學習筆記--構造和運行模塊 http://www.linuxidc.com/Linux/2011-08/41747.htm

Linux設備驅動程序學習筆記 http://www.linuxidc.com/Linux/2011-08/41747.htm

<二>:內核功能劃分

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文件中找到它。

更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-08/105689p2.htm

Copyright © Linux教程網 All Rights Reserved