《Linux裝置驅動開發詳解(第2版)》——第1章Linux裝置驅動概述及開發環境構建1.1裝置驅動的作用

非同步社群發表於2017-05-02

本節書摘來自非同步社群《Linux 裝置驅動開發詳解(第2版)》一書中的第1章,第1.1節,作者:宋寶華著,更多章節內容可以訪問雲棲社群“非同步社群”公眾號檢視

第1章 Linux裝置驅動概述及開發環境構建

1.1 裝置驅動的作用

Linux 裝置驅動開發詳解(第2版)
任何一個計算機系統的運轉都是系統中軟硬體共同努力的結果,沒有硬體的軟體是空中樓閣,而沒有軟體的硬體則只是一堆廢鐵。硬體是底層基礎,是所有軟體得以執行的平臺,程式碼最終會落實為硬體上的組合邏輯與時序邏輯。軟體則實現了具體應用,它按照各種不同的業務需求而設計,完成了使用者的最終訴求。硬體較固定,軟體則很靈活,可以適應各種複雜多變的應用。可以說,計算機系統的軟硬體互相成就了對方。

但是,軟硬體之間同樣存在著悖論,那就是軟體和硬體不應該互相滲透入對方的領地。為儘可能快速地完成設計,應用軟體工程師不想也不必關心硬體,而硬體工程師也難有足夠的閒暇和能力來顧及軟體。譬如,應用軟體工程師在呼叫套接字傳送和接收資料包的時候,不必關心網路卡上的中斷、暫存器、儲存空間、I/O埠、片選以及其他任何硬體詞彙;在使用printf()函式輸出資訊的時候,他不用知道底層究竟是怎樣把相應的資訊輸出到螢幕或者串列埠。

也就是說,應用軟體工程師需要看到一個沒有硬體的純粹的軟體世界,硬體必須被透明地呈現給他。誰來實現硬體對應用軟體工程師的隱形?這個光榮而艱鉅的任務就落在了驅動工程師的頭上。

對裝置驅動最通俗的解釋就是“驅使硬體裝置行動”。驅動與底層硬體直接打交道,按照硬體裝置的具體工作方式,讀寫裝置的暫存器,完成裝置的輪詢、中斷處理、DMA通訊,進行實體記憶體向虛擬記憶體的對映等,最終讓通訊裝置能收發資料,讓顯示裝置能顯示文字和畫面,讓儲存裝置能記錄檔案和資料。

由此可見,裝置驅動充當了硬體和應用軟體之間的紐帶,它使得應用軟體只需要呼叫系統軟體的應用程式設計介面(API)就可讓硬體去完成要求的工作。在系統中沒有作業系統的情況下,工程師可以根據硬體裝置的特點自行定義介面,如對串列埠定義SerialSend()、SerialRecv(),對LED定義LightOn()、LightOff(),對Flash定義FlashWrite()、FlashRead()等。而在有作業系統的情況下,驅動的架構則由相應的作業系統定義,驅動工程師必須按照相應的架構設計驅動,這樣,驅動才能良好地整合入作業系統的核心。

驅動程式溝通著硬體和應用軟體,而驅動工程師則溝通著硬體工程師和應用軟體工程師。目前,隨著通訊、電子行業的迅速發展,全世界每天都會有大量的新晶片被生產,大量的新電路板被設計,也因此,會有大量裝置驅動需要開發。這些驅動,或執行在簡單的單任務環境,或執行在VxWorks、Linux、Windows等多工作業系統環境,發揮著不可替代的作用。


相關文章