什么是驅動程序
https://baike.baidu.com/item/%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F
驅動程序一般指的是設備驅動程序(Device Driver),是一種可以使計算機和設備進行相互通信的特殊程序。相當於硬件的接口,操作系統只有通過這個接口,才能控制硬件設備的工作,假如某設備的驅動程序未能正確安裝,便不能正常工作。因此,驅動程序被比作“ 硬件的靈魂”、“硬件的主宰”、“硬件和系統之間的橋梁”等。
設備驅動程序用來將硬件本身的功能告訴操作系統,完成硬件設備電子信號與操作系統及軟件的高級編程語言之間的互相翻譯。設備驅動程序通常會占到70%以上份額的操作系統內核源碼,且設備驅動程序的更新維護往往會牽涉到超過35%的源碼修改,故而保持設備驅動程序與操作系統內核不斷變化的其余部分的一致性是操作系統內核開發的一項難題
當操作系統需要使用某個硬件時,比如:讓聲卡播放音樂,它會先發送相應指令到聲卡驅動程序,聲卡驅動程序接收到后,馬上將其翻譯成聲卡才能聽懂的電子信號命令,從而讓聲卡播放音樂。
修改版
發燒友令筆者首先就聯想到了顯卡,這是為什么呢?因為一直以來,發燒友通常都被用來形容游戲愛好者。筆者的這個想法也正好和發燒友修改版的誕生典故相符的,因為發燒友修改版的驅動最先就是出現在顯卡驅動上的,由於眾多發燒友對游戲的狂熱,對於顯卡性能的期望也就是比較高的,這時候廠商所發布的顯卡驅動就往往都不能滿足游戲愛好者的需求了,因此經修改過的以滿足游戲愛好者更多的功能性要求的顯卡驅動也就應運而生了。如今,發燒友修改版驅動又名改版 驅動,是指經修改過的驅動程序,而又不專指經修改過的驅動程序。
從理論上講,所有的硬件設備都需要安裝相應的驅動程序才能正常工作。但像CPU、內存、主板、軟驅、鍵盤、顯示器等設備卻並不需要安裝驅動程序也可以正常工作,而顯卡、聲卡、網卡等卻一定要安裝驅動程序,否則便無法正常工作。這是為什么呢?
這主要是由於這些硬件對於一台個人電腦來說是必需的,所以早期的設計人員將這些硬件列為BIOS能直接支持的硬件。換句話說,上述硬件安裝后就可以被BIOS和操作系統直接支持,不再需要安裝驅動程序。從這個角度來說,BIOS也是一種驅動程序。但是對於其他的硬件,例如:網卡,聲卡,顯卡等等 卻必須要安裝驅動程序,不然這些硬件就無法正常工作。
當然,也並非所有驅動程序都是對實際的硬件進行操作的,有的驅動程序只是輔助系統的運行,如android中的有些驅動程序提供輔助操作系統的功能,這些驅動不是linux系統的標准驅動,如ashmen,binder等。
微軟平台
為了大量減輕驅動程序開發人員的負擔,微軟不斷的改進驅動程序的開發軟件與架構,從早期復雜深晦的VxD,到Windows XP上的Windows Driver Model(以下簡稱WDM)開發架構,如今Windows Driver Foundation(以下簡稱WDF)已成為新一代的Windows平台驅動程序發展架構,這個架構大量簡化了驅動程序的開發流程,更符合面向對象的精神,此架構包含了UserMode Driver Framework 與Kernel Mode DriverFramework兩種開發模式。在開發Windows平台上的驅動程序之前,必須先安裝DDK包,支持WDM與WDF兩種架構。
Unix平台
Linux作為UNIX的一個變種,繼承了UNIX的設備管理方法,將所有的設備是具體的文件,通過文件系統層對設備進行訪問。這種設備管理方法可以很好地做到“設備無關性”,可以根據硬件外設的更新進行方便的擴展。
Linux中的設備大致可以分為三類:字符設備,塊設備,網絡設備。
字符設備沒有緩沖區,以字節為單位順序處理數據,不支持隨機讀寫。常見的字符設備如普通打印機、系統的串口、終端顯示器、嵌入式設備中的簡單按鍵、手寫板等。
塊設備是指在輸入輸出時數據處理以塊為單位的設備,一般都采用緩沖技術,支持數據的隨機讀寫。典型的塊設備有硬盤、光驅等。
字符設備和塊設備面向的上一層是文件系統層。對用戶來說,塊設備和字符設備的訪問接口都是一組基於文件的系統調用,如read, write等。
網絡設備與塊設備和字符設備不同,網絡設備面向的上一層是網絡協議層。設備文件是一個唯一的名字(如eth0),在文件系統中不存在對應的節點項。內核和網絡驅動程序之間的通信使用的是一套和數據包傳輸相關的函數,而不是簡單的讀寫操作。
每一個設備都有一對主設備號、次設備號的參數作為唯一的標識。主設備號標識設備對應的驅動程序;次設備號用來區分具體驅動程序的實例。主設備號的獲取可以通過動態分配或指定的方式。在嵌入式系統中外設較少,一般采用指定的方式。