官术网_书友最值得收藏!

1.1 設備驅動的作用

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

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

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

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

由此可見,設備驅動充當了硬件和應用軟件之間的紐帶,應用軟件時只需要調用系統軟件的應用編程接口(API)就可讓硬件去完成要求的工作。在系統沒有操作系統的情況下,工程師可以根據硬件設備的特點自行定義接口,如對串口定義SerialSend()、SerialRecv(),對LED定義LightOn()、LightOff(),對Flash定義FlashWr()、FlashRd()等。而在有操作系統的情況下,驅動的架構則由相應的操作系統定義,驅動工程師必須按照相應的架構設計驅動,這樣,驅動才能良好地整合入操作系統的內核中。

驅動程序負責硬件和應用軟件之間的溝通,而驅動工程師則負責硬件工程師和應用軟件工程師之間的溝通。目前,隨著通信、電子行業的迅速發展,全世界每天都會生產大量新芯片,設計大量新電路板,也因此,會有大量設備驅動需要開發。這些驅動或運行在簡單的單任務環境中,或運行在VxWorks、Linux、Windows等多任務操作系統環境中,它們發揮著不可替代的作用。

主站蜘蛛池模板: 乌拉特中旗| 北辰区| 喀喇沁旗| 浦县| 商水县| 南通市| 齐河县| 南丰县| 伊川县| 磐石市| 峨眉山市| 和政县| 澎湖县| 曲麻莱县| 阿鲁科尔沁旗| 高清| 尼木县| 策勒县| 聊城市| 抚州市| 玉门市| 广汉市| 黔南| 安阳市| 娄烦县| 佛教| 西昌市| 莱阳市| 德清县| 三明市| 大名县| 青岛市| 平果县| 隆德县| 湘阴县| 阿坝| 太仓市| 伊川县| 余江县| 拉萨市| 广西|