天天看點

《Linux裝置驅動開發詳解 A》一一1.1 裝置驅動的作用

本節書摘來華章計算機出版社《linux裝置驅動開發詳解 a》一書中的第1章,第1.1節,作者:宋寶華 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。1

任何一個計算機系統的運轉都是系統中軟硬體共同努力的結果,沒有硬體的軟體是空中樓閣,而沒有軟體的硬體則隻是一堆廢鐵。硬體是底層基礎,是所有軟體得以運作的平台,代碼最終會落實為硬體上的組合邏輯與時序邏輯;軟體則實作了具體應用,它按照各種不同的業務需求而設計,并完成使用者的最終訴求。硬體較固定,軟體則很靈活,可以适應各種複雜多變的應用。是以,計算機系統的軟硬體互相成就了對方。

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

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

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

由此可見,裝置驅動充當了硬體和應用軟體之間的紐帶,應用軟體時隻需要調用系統軟體的應用程式設計接口(api)就可讓硬體去完成要求的工作。在系統沒有作業系統的情況下,工程師可以根據硬體裝置的特點自行定義接口,如對序列槽定義serialsend()、serialrecv(),對led定義lighton()、lightoff(),對flash定義flashwr()、flashrd()等。而在有作業系統的情況下,驅動的架構則由相應的作業系統定義,驅動工程師必須按照相應的架構設計驅動,這樣,驅動才能良好地整合入作業系統的核心中。

驅動程式負責硬體和應用軟體之間的溝通,而驅動工程師則負責硬體工程師和應用軟體工程師之間的溝通。目前,随着通信、電子行業的迅速發展,全世界每天都會生産大量新晶片,設計大量新電路闆,也是以,會有大量裝置驅動需要開發。這些驅動或運作在簡單的單任務環境中,或運作在vxworks、linux、windows等多任務作業系統環境中,它們發揮着不可替代的作用。

繼續閱讀