微軟裝置團隊為Windows驅動程式開發人員釋出,開源驅動程式模組框架(Driver Module Framework,DMF),微軟透過驅動程式模組框架,開發簡單和結構化的Windows驅動程式框架(Windows Driver Framework,WDF)驅動程式,並且讓驅動程式之間可以重複使用程式碼,不只加快開發時程,改良後的架構也解決過去單元間複雜的交互作用。

微軟在三年前重新且全面性檢視Surface產品的驅動程式,並開始嘗試以最大程度共用程式碼的方法,重新撰寫驅動程式,目的是要提高團隊的工作效率,以及增加新產品程式碼的可維護性和可擴展性。為此微軟將驅動程式中的各個功能分解為可共享的程式碼基底,而這項工作也就催生了WDF擴充DMF的誕生,DMF屬於WDF物件函式庫的一部分。

在過去典型WDF驅動程式設計中,驅動程式在裝置上下文(Context)中維護狀態,並且程式碼被分成存取裝置上下文和在單元之間相互通訊兩種,而驅動程式開發人員的工作,要確保裝置上下文存取同步,以及遵守嚴格鎖定階層架構,以避免當單元互相通訊時發生崩潰或是死結的情況。

當WDF呼叫驅動程式的時候,開發人員要讓驅動程式將工作分派給每個單元,但這過程通常很難知道通訊流程,或是維持適當地同步存取裝置上下文。如果想在另一個驅動程式中,重複使用FIFO功能程式碼,在提取程式碼前,開發人員必須要很清楚地了解單元間複雜地交互作用,否則通常都會發生錯誤。

而經過改進的架構,在WDF和每個模組中間,有一個仲裁層也就是DMF,來綁定模組並且分配WDF事件給每個模組,因此現在模組能以明確定義方式互相或是與客戶端通訊,也就是說,新架構不再像是典型架構那樣,所有模組共享裝置上下文,而是模組使用各自的裝置上下文來維護狀態。

傳統WDF和基於DMF的WDF驅動程式之間的主要區別有4點,第一點、現在WDF與DMF通訊,而DMF與驅動程式通訊。第二點,裝置上下文獨立存在於每個模組和客戶端驅動程式特定程式碼中,而每個裝置上下文僅包含該模組所需要的元素,任何模組都無法存取另一個模組的裝置上下文。

第三點、WDF回呼現在獨立存在於模組和特定客戶端程式碼,WDF呼叫客戶端驅動程式,而DMF攔截呼叫並且分派給實例化模組樹中的模組,每個模組按其適合的方式處理回呼,再由DMF分派回呼到客戶端驅動程式的回呼。第四點、特定客戶端程式碼只能與特定模組通訊,像是ACPI模組不能和FIFO模組通訊,Button只能與GPIO和FIFO模組通訊,這樣的機制可以良好的控制資料流。總結來說,每個模組現在都是獨立的單元,擁有自己的程式碼、上下文以及回呼函式,這樣的設計能讓程式碼更易於重複使用,也解決了許多舊架構存在的問題。

現在所有由微軟裝置團隊的WDF驅動程式,都使用DMF撰寫而成的,這些DMF模組也都經過仔細的測試,並且可以被重複使用或是根據新的需求擴展。DMF除了提供良好的驅動程式撰寫架構外,也提供更友善的臭蟲修復功能,當驅動程式使用模組建置時,模組中的臭蟲修復功能會自動應用。


Advertisement

更多 iThome相關內容