linux裝置驅動第一篇:基礎知識點

來源:互聯網
上載者:User

標籤:

首先,我們知道驅動是核心的一部分,那麼驅動在核心中到底扮演了什麼角色呢?

裝置驅動程式在核心中的角色:他們是一個個獨立的“黑盒子”,使某個特定的硬體響應一個定義良好的內部編程介面,這些介面完全隱藏了裝置的工作細節。(說白了,驅動程式除了對外提供特定的介面外,任何實現細節對應用程式都是不可見的。)使用者的操作通過一組標準化的調用執行,而這些調用獨立於特定的驅動程式。驅動程式的任務是把這些標準化調用映射到實際硬體的裝置特有操作上。

在編寫驅動程式時,程式員應該特別注意下面這個概念:編寫訪問硬體的核心代碼時,不要給使用者強加任何特定策略。這句話我的理解是,驅動只負責實現最基本的硬體功能,而誰使用此硬體,怎麼使用,一般都不做考慮。

不帶策略的驅動程式套件括一些典型的特徵:同時支援同步和非同步作業、驅動程式能夠被多次開啟、充分利用硬體特性,以及不具備用來“簡化任務”的或提供與策略相關的軟體層等。

驅動程式就是應用程式與實際硬體之間的一個軟體層,相同的硬體,不同的驅動程式可能提供不同的功能。實際的驅動程式設計要在許多要考慮的因素之間做出平衡。總的來說,驅動程式設計主要還是綜合考慮下面三個方面的因素:提供給使用者盡量多的選項、編寫驅動程式要佔用的時間以及盡量保持程式簡單而不至於錯誤叢生。

瞭解了驅動在核心中扮演的角色,我們還可以簡單瞭解下核心中包含的其他模組。一般把核心功能分成如下幾部分:進程管理、記憶體管理、檔案系統、裝置控制、網路功能。作業系統原理上面把作業系統的原理分為:處理機管理、進程管理、檔案管理、儲存管理、裝置管理、網路與通訊管理、使用者介面,其中處理機管理歸根到底其實就是進程管理。因為處理器的分配和執行都是以進程為基本單位的。而儲存管理就是說的記憶體管理。

進一步來看,電腦上有網卡,顯卡,音效卡等,還可以外接隨身碟,印表機等等外設,那麼這麼多的裝置有沒有分類呢?很明顯,根據裝置的介面,我們可以知道分為usb裝置,串口裝置,pci裝置,spi裝置,i2c裝置等等,那麼在linux核心中又有樣的劃分呢?下面所述就是linux中對所有裝置的一個分類,並描述了相互之間的簡單區別。

linux中裝置和模組的分類:

字元裝置:字元裝置是能夠像位元組流(類似檔案)一樣被訪問的裝置,有字元裝置驅動程式來實現這種特性。字元裝置驅動程式通常至少要實現open、close、read、write系統調用。字元裝置可以通過檔案系統節點來訪問,這些裝置檔案和普通檔案之間的唯一差別在於對普通檔案的訪問可以前後移動訪問位置,而大多數字元裝置是一個只能順序訪問的資料通道。一個字元裝置是一種位元組流裝置,對裝置的存取只能按順序按位元組的存取而不能隨機訪問,字元裝置沒有請求緩衝區,所有的訪問請求都是按順序執行的。但事實上現在一些進階字元裝置也可以從指定位置一次讀取一塊資料。

塊裝置:塊裝置也是通過裝置節點來訪問。塊裝置上能夠容納檔案系統。在大多數unix系統中,進行I/O操作時塊裝置每次只能傳輸一個或多個完整的塊,而每塊包含512位元組(或更2的更高次冪位元組的資料)。linux可以讓應用程式向字元裝置一樣讀寫塊裝置,允許一次傳遞任意多位元組的資料。因而,塊裝置和字元裝置的區別僅僅在於核心內部管理資料的方式,也就是核心及驅動程式之間的軟體介面,而這些不同對使用者來講是透明的。在核心中,和字元驅動程式相比,塊驅動程式具有完全不同的介面。存放裝置一 般屬於塊裝置,塊裝置有請求緩衝區,並且支援隨機訪問而不必按照順序去存取資料,比如你可以 先存取後面的資料,然後在存取前面的資料,這對字元裝置來說是不可能的。Linux下的磁碟裝置都是塊裝置,儘管在Linux下有塊裝置節點,但應用程式一般是通過檔案系統及其快取來訪問塊裝置的,而不是直接通過裝置節點來讀寫塊裝置上的資料。

網路裝置:網路裝置不同於字元裝置和塊裝置,它是面向報文的而不是面向流的,它不支援隨機訪問,也沒有請求緩衝區。由於不是面向流的裝置,因此將網路介面映射到檔案系統中的節點比較困難。核心和網路裝置驅動程式間的通訊,完全不同於核心和字元以及塊驅動程式之間的通訊,核心調用一套和資料包傳輸相關的函數而不是read,write。網路介面沒有像字元裝置和塊裝置一樣的裝置號,只有一個唯一的名字,如eth0、eth1等,而這個名字也不需要與裝置檔案節點對應。

由上大致總結下字元裝置與塊裝置的區別:1、字元裝置是面向流的,最小訪問單位是位元組;而塊裝置是面向塊的,最小訪問單位是512位元組或2的更高次冪。2、字元裝置只能順序按位元組訪問,而塊裝置可隨機訪問。3、塊裝置上可容納檔案系統,訪問形式上,字元裝置通過裝置節點訪問,而塊裝置雖然也可通過裝置節點訪問,但一般是通過檔案系統來訪問資料的。

而網路裝置沒有裝置節點是因為,網路裝置是面向報文的,很難實現相關read、write等檔案讀寫函數。所以驅動的實現也與字元裝置和塊裝置不同。


第一時間獲得部落格更新提醒,以及更多技術資訊分享,歡迎關注個人公眾平台:程式員互動聯盟(coder_online)

1.直接幫你解答linux裝置驅動疑問點

2.第一時間獲得業內十多個領域技術文章

3.針對文章內疑點提出問題,第一時間回複你,幫你耐心解答

4.讓你和原創作者成為很好的朋友,拓展自己的人脈資源

掃一掃下方二維碼或搜尋號coder_online即可關注,我們可以線上交流。


linux裝置驅動第一篇:基礎知識點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.