本節書摘來自異步社群《linux 裝置驅動開發詳解(第2版)》一書中的第1章,第1.3節,作者:宋寶華著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
linux 裝置驅動開發詳解(第2版)
1.2節中我們看到一個幹淨利落的裝置驅動,它直接運作在硬體之上,不與任何作業系統關聯。當系統中包含作業系統後,裝置驅動會變得怎樣?
首先,無作業系統時裝置驅動的硬體操作工作仍然是必不可少的,沒有這一部分,驅動不可能與硬體打交道。
其次,我們還需要将驅動融入核心。為了實作這種融合,必須在所有裝置的驅動中設計面向作業系統核心的接口,這樣的接口由作業系統規定,對一類裝置而言結構一緻,獨立于具體的裝置。
由此可見,當系統中存在作業系統的時候,驅動變成了連接配接硬體和核心的橋梁。如圖1.4,作業系統的存在勢必要求裝置驅動附加更多的代碼和功能,把單一的“驅使硬體裝置行動”變成了作業系統内與硬體互動的子產品,它對外呈現為作業系統的api,不再給應用軟體工程師直接提供接口。

那麼我們要問,有了作業系統之後,驅動反而變得複雜,那要作業系統幹什麼?
首先,一個複雜的軟體系統需要處理多個并發的任務,沒有作業系統,想完成多任務并發是很困難的。
其次,作業系統給我們提供記憶體管理機制。一個典型的例子是,對于多數含mmu的處理器而言,windows、linux等作業系統可以讓每個程序都可以獨立地通路4gb的記憶體空間。
上述優點似乎并沒有展現在裝置驅動身上,作業系統的存在給裝置驅動究竟帶來了什麼實質的好處?
簡而言之,作業系統通過給驅動制造麻煩來達到給上層應用提供便利的目的。當驅動都按照作業系統給出的獨立于裝置的接口而設計,那麼,應用程式将可使用統一的系統調用接口來通路各種裝置。對于類unix的vxworks、linux等作業系統而言,當應用程式通過write()、read()等函數讀寫檔案就可通路各種字元裝置和塊裝置,而不論裝置的具體類型和工作方式,那将是怎樣的便利?