QXL驅動分析(一)

QXL安照windows2000顯示架構編寫,見下圖:

 

QXL實現的功能主要包含兩塊:Display Driver 和 Video Miniport。

1.  Display Driver

Display Driver以動態鏈接庫qxldd.dll的形式提供,處於內核態,主要是提供繪圖API給GDI,這樣當最上層的應用需要繪圖的時候,通過調用GDI API(gdi32.dll),GDI 調用QXL的繪圖API(qxldd.dll)達到繪圖目的。

GDI與QXL建立這種關係是在GDI初始化的時候,示例如下:

 

1)QXL Display Driver實現了DrvEnableDriver,DrvEnableDriver是任何顯卡驅動的入口點,在GDI初始化的時候會調用該API:

BOOL DrvEnableDriver(ULONG engine_version, ULONG enable_data_size, PDRVENABLEDATA enable_data)

 2)Display Driver在enable_data 裏返回了drv_calls[],drv_calls[]包含了一系列的繪圖API的函數指針,這樣在GDI需要繪製各類圖形和文字的時候就可以調用相應的API了:DrvCopyBits,DrvTextOut,DrvStrokePath,DrvFillPath 。。。 

2.  Video Miniport

處於內核模式(miniport->qxl.sys)通常處理必須和內核組件交互的操作。它的責任包括資源管理,例如硬件配置、物理設備內存映射。Miniportdriver必須針對video硬件。它要管理和displaydriver共享的資源(內存資源)

它還要處理:顯卡的模式設置交換,多種硬件類型,減少displaydriver的硬件依賴,把video寄存器映射到displaydirver的地址空間。I/O端口可以直接訪問

 

1)QXL miniport driver的入口跟所有其他驅動一樣,都是 DriverEntry; 它是在裝載時被I/O Manager(設備管理器)調用的;

2)DriverEntry主要做的是調用VideoPortInitialize完成初始化,而VideoPortInitialize最主要的是設置了HwFindAdapter,HwInitialize,HwStartIO等函數指針

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章