QXL驱动分析(一)

QXL安照windows2000显示架构编写,见下图:

QXL驱动分析(一)_第1张图片 

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初始化的时候,示例如下:

QXL驱动分析(一)_第2张图片 

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端口可以直接访问

 QXL驱动分析(一)_第3张图片

1)QXL miniport driver的入口跟所有其他驱动一样,都是 DriverEntry; 它是在装载时被I/O Manager(设备管理器)调用的;

2)DriverEntry主要做的是调用VideoPortInitialize完成初始化,而VideoPortInitialize最主要的是设置了HwFindAdapter,HwInitialize,HwStartIO等函数指针

你可能感兴趣的:(qemu-kvm,QXL)