第十七篇:实例分析(2)--初探WDDM驱动学习笔记(九)

上一篇讲到, 受实际环境的限制, 没能够将这个KMDOD SAMPLE在系统中尝试运行.

先把这个问题放在一边, 到申请到了WDDM 1.2框架的Win8系统, 再回过头来进行实际运行.

但从MSND中看, Win8应该是WDDM1.2, WIN7是WDDM1.1, 可为什么我这个Win8 pro build 9200 显示的是WDDM 1.1? 难道是因为这个版本是免费的原因吗?

另外, 驱动安装不成功, 是由于WDDM 1.1的原因吗?


还是先看看这个例子代码, 到底要给大家一个什么样的例子?


 先从简单的开始,

(一)

Bbd_ddi.cpp

写过miniport驱动的工程师都知道, 系统已经帮你设计,定义好了相应的数据结构, miniport驱动所要做的工作, 就是将该与系统(PORT DRIVER)交互的数据结构根据实际情况实现, 并将函数指针填到相应的结构成员中.

http://msdn.microsoft.com/zh-cn/library/jj673962(v=vs.85).aspx

由于是KMDOD驱动,所以,这里在DriverEntry中使用的初始化函数是: 

DxgkInitializeDisplayOnlyDriver
相应的数据结构为:
KMDDOD_INITIALIZATION_DATA
大家可以看到,这些字样中都带有display only.
其实, DxgkInitialize 与 DxgkInitializeDisplayOnlyDriver的作用是相同的, 都是loads and initializes the DirectX graphics kernel subsystem (Dxgkrnl.sys).

DxgkDdiPresentDisplayOnly是针对于KMDOD的一个显示函数.
 
在这些函数中, 无论是pAdapter, 还是pDeviceContext, 都是在BddDdiAddDevice中, 将
BASIC_DISPLAY_DRIVER类的实例指针, 附给的指针变量, ppDeviceContext.
对AVSTREAM/BDA驱动熟悉的人应该知道这个规则, context中存放设备类实例的指针, 达到了驱动支持多实例的目的.
其它的内容, 不多述, 毕竟, 这个文件, 只是重定向了具体的函数执行体, 所有的函数最终,都是由BASIC_DISPLAY_DRIVER类的成员函数实现的.


(二)

Memory.cpp

这个文件, 重载了运算符new, delete.

微软的好多例子中, 使用了这样的方法, 好处在于, 省去了每次调用, ExAllocatePoolWithTag, 同时还要设置内存类型, 标签名字, 对像大小等参数.

这里的大小, 由new自动根据对象类型计算得出.

该文件同时支持了数组的实例分配化与内存回收.



(三)

Bdd_util.cpp

这个文件也非常简单, 

1. 对EDID的头与校验和的验证.

2. 包含了系统函数MmMapIoSpace, MmUnmapIoSpace的内存映射功能函数, MapFrameBuffer与UnmapFrameBuffer.

无非就是将物理内存映射到内核系统空间, 以便CPU通过这个内核空间的虚拟地址来操作内存.


(四)

BltFuncs.cpp

主要涉及到图像数据copy方面的函数, 即使不了解KMDOD的工程师,也能看明白其中的内容. 


未完, 待续.


nvidia-smi报错"NVIDIA-SMI has failed because it couldn’t communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running. This can also be happening if non-NVIDIA GPU is running as primary display, and NVIDIA GPU is in WDDM mode." \[1\]这个错误提示表明nvidia-smi无法与NVIDIA驱动程序通信。可能的原因是未安装或未运行最新的NVIDIA驱动程序,或者非NVIDIA GPU正在作为主显示器运行,而NVIDIA GPU处于WDDM模式。WDDM是Windows Display Driver Model的缩写,是一种用于Windows操作系统的图形驱动程序模型。\[2\] WDDM模式是一种图形驱动程序模式,它允许多个应用程序同时使用GPU,并提供更好的性能和稳定性。在WDDM模式下,NVIDIA GPU可能无法与nvidia-smi进行通信,导致报错。要解决这个问题,可以尝试以下几个步骤: 1. 确保已安装最新的NVIDIA驱动程序,并且驱动程序正在运行。 2. 检查系统中是否有其他非NVIDIA GPU作为主显示器运行。如果是这样,可以尝试将NVIDIA GPU设置为主显示器。 3. 如果以上步骤都没有解决问题,可以尝试重新安装NVIDIA驱动程序,并确保选择正确的驱动程序版本和适合您的操作系统的WDDM模式。 希望这些信息对您有帮助! #### 引用[.reference_title] - *1* [nvidia-smi报错,出现问题](https://blog.csdn.net/qq_38335768/article/details/125764793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* *3* [使用NVIDIA-SMI监控GPU利用率和温度](https://blog.csdn.net/qq_36017609/article/details/104296533)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值