- Linux設備驅動開發詳解:基于最新的Linux4.0內核
- 宋寶華
- 975字
- 2018-12-31 20:25:12
1.1 設備驅動的作用
任何一個計算機系統的運轉都是系統中軟硬件共同努力的結果,沒有硬件的軟件是空中樓閣,而沒有軟件的硬件則只是一堆廢鐵。硬件是底層基礎,是所有軟件得以運行的平臺,代碼最終會落實為硬件上的組合邏輯與時序邏輯;軟件則實現了具體應用,它按照各種不同的業務需求而設計,并完成用戶的最終訴求。硬件較固定,軟件則很靈活,可以適應各種復雜多變的應用。因此,計算機系統的軟硬件相互成就了對方。
但是,軟硬件之間同樣存在著悖論,那就是軟件和硬件不應該互相滲透入對方的領地。為盡可能快速地完成設計,應用軟件工程師不想也不必關心硬件,而硬件工程師也難有足夠的閑暇和能力來顧及軟件。譬如,應用軟件工程師在調用套接字發送和接收數據包的時候,不必關心網卡上的中斷、寄存器、存儲空間、I/O端口、片選以及其他任何硬件詞匯;在使用printf()函數輸出信息的時候,他不用知道底層究竟是怎樣把相應的信息輸出到屏幕或者串口。
也就是說,應用軟件工程師需要看到一個沒有硬件的純粹的軟件世界,硬件必須透明地呈現給他。誰來實現硬件對應用軟件工程師的隱形?這個光榮而艱巨的任務就落在了驅動工程師的頭上。
對設備驅動最通俗的解釋就是“驅使硬件設備行動”。驅動與底層硬件直接打交道,按照硬件設備的具體工作方式,讀寫設備的寄存器,完成設備的輪詢、中斷處理、DMA通信,進行物理內存向虛擬內存的映射等,最終讓通信設備能收發數據,讓顯示設備能顯示文字和畫面,讓存儲設備能記錄文件和數據。
由此可見,設備驅動充當了硬件和應用軟件之間的紐帶,應用軟件時只需要調用系統軟件的應用編程接口(API)就可讓硬件去完成要求的工作。在系統沒有操作系統的情況下,工程師可以根據硬件設備的特點自行定義接口,如對串口定義SerialSend()、SerialRecv(),對LED定義LightOn()、LightOff(),對Flash定義FlashWr()、FlashRd()等。而在有操作系統的情況下,驅動的架構則由相應的操作系統定義,驅動工程師必須按照相應的架構設計驅動,這樣,驅動才能良好地整合入操作系統的內核中。
驅動程序負責硬件和應用軟件之間的溝通,而驅動工程師則負責硬件工程師和應用軟件工程師之間的溝通。目前,隨著通信、電子行業的迅速發展,全世界每天都會生產大量新芯片,設計大量新電路板,也因此,會有大量設備驅動需要開發。這些驅動或運行在簡單的單任務環境中,或運行在VxWorks、Linux、Windows等多任務操作系統環境中,它們發揮著不可替代的作用。
- Linux設備驅動開發詳解(第2版)
- 樂學Windows操作系統
- Modern Web Testing with TestCafe
- Containerization with LXC
- 鴻蒙生態:開啟萬物互聯的智慧新時代
- Windows Phone 7.5 Data Cookbook
- 數據中心系統工程及應用
- Instant Optimizing Embedded Systems using Busybox
- 網絡操作系統管理與應用(第三版)
- Windows 7中文版從入門到精通(修訂版)
- Microsoft Operations Management Suite Cookbook
- Linux系統安全基礎:二進制代碼安全性分析基礎與實踐
- iOS 8開發指南
- Linux系統最佳實踐工具:命令行技術
- Learning BeagleBone