第二十二篇:再写Windows驱动,再玩Windbg---NET

2011年到现在,就没再怎么搞过Windows驱动了.

最近, 由于项目需要, 试着改一改一个显卡驱动(KMDOD), 从实践上证明, 我在理论上对一个驱动的架构的正确与否.(USB Display = KMDOD + AVStream).

其中, KMDOD是完成显示的部分功能, 完成其中的VidPN(Video present network), 将驱动中原来的POST物理设备转变为USB物理设备.

而AVStream之所以这样提出, 完成是由于USB Video class的启发, 要不然, 没有AVStream的Filters, Pins, Dispatch tables, Automation tables, Nodes, Methods, Properties, Events怎么实现与DShow的交互?

基于以上的理论设计, 去实现真正的USB Display设备驱动, 前期的工作量评估也是这次再次玩Windows驱动的原因.

驱动代码改写这边, 就不多说了, 工作量方面, 从DisplayLink的交流空间中了解, 他们花了10-20个人, 1-2年的时间, 来完成一个USB Display驱动.

总得一点, 无论KMDOD这个WDDM miniport中的VidPN, USB, 还是 AVStream中的Filters, Pins, 要做起来, 都不像我当初想象的那么简单.

至少, 我目前在KMDOD的改造过程中, 碰到一系列的问题, 以后再表.


关于WinDbg调试:

WinDbg是很好的调试工具, 关于这一论断, 没有任何意见.

但我的观念还停留在COM 115200 bps的"鸟枪"上, 所以, 对WinDbg的"慢"反应, 总是非常不耐烦.

目前, 我的配置是, 主机Win7 Test Mode, build 7601, 从机Win8.1 Pro Build 9600.

我是直接从Win8 Pro Build 9200直接升级到9600的, 这个升级解决了 WDDM1.1 到 WDDM1.2的更新, 否则KMDOD是不能在WDDM1.1上运行的(注意了).

在更新后:

NVIDIA Quadro NVS 285
NVIDIA Geforce 210
intel(r) q45/q43 expresschipset

只有第一块显卡不能使用KMDOD(原因等有时间再找, 反正也不是我做的产品), 另外两块, 都能正确安装且使用KMDOD的驱动.



使用COM口调试驱动:

1. 慢

2. 一大堆打印, 导致更"慢"

3. 要设置一个断点之类的操作, "慢"到后来, 让你不知道是TARGET死机了,还是说TARGET还在运行, 搞得你是要继续等呢, 还是强行重启呢?

4. 浪费时间, 一次次设置断点不成功, 最后, 代码没跟踪成功, 原因没找到,事情没办成.


所以, 不得不找别的办法来代替COM口的调试.


USB2.0

好多人没有用过USB2.0的DEBUG CABLE, 或者是根本没有见过这个GADGET.

原因, 就是:第一贵, 第二, 这玩意儿不好买, 第三, 即使买了, 有些PC也不支持USB DEBUG这个扩展功能.

结果, 我就是第三种情况, 这么贵的玩意到手了, 而且有两个(Ajays technology USB2.0 Debug Cable), 但你眼巴巴地看着, 它就是一没用的东西, 你会什么感受?

而且, 为了折腾它, 花了不少时间.

有兴越的人可以参阅:

How to Debug the Windows OS using USB

http://www.codeproject.com/Articles/132313/How-to-Debug-the-Windows-OS-using-USB

相信没有人会再去看这样的文章, 完完全全地在浪费时间.



1394:

以前使用过, 笔记本带1394口, 被调试的机器, 买一张PCI/PCIE转1394的卡, 使用起来还是比较方便的, 但目前的实际环境是, 现在的笔记本不带1394, 也没有这种PCI/PCIE转1394的卡.


USB3

Win8内核调试支持USB3了, 但需要一根A-A电缆, 没有硬件, 只好放弃.


最后, 选择了人人都能有的NET方式:

三根网线, 一个路由器, 边接到局域网 (两根网线, 加一个路由器, 不接入局域网的方式, 我没弄成功, 因为两台计算机的网卡都处于"黄点"状态;如果只有一根交叉网线, 我也没有试过, 因为没有这样的交叉网线, 也不知道能不能成功. 记得以前, WHQL-->DTM 测试的时间, 就是用的这样的一根交叉网线来测试的, 后来, 我也玩过WHCK, 但也不再用交叉网线了.)

HOST安装了最新的WINDOWS KITS 8.1, 带了最新的WINDBG, 我目前的版本是:6.3.9600.16384, 记录HOST的IP地址.

TARGET:

bcdedit /dbgsettings net hostip:xxx.xxx.xxx.xxx port:50000 key:aaa.bbb.ccc.ddd

bcdedit -debug on

如果有多个网卡:

bcdedit /set {dbgsettings} busparams bus.device.function


bus, device, function在设备管理器的property中查找.


之后, 主机设置PORT NUMBER, KEY, 等待:

Microsoft (R) Windows Debugger Version 6.3.9600.16384 X86
Copyright (c) Microsoft Corporation. All rights reserved.


Using NET for debugging
Opened WinSock 2.0
Waiting to reconnect...


重启从机, 连接成功后,如下显示:

Connected to target 10.38.188.159 on port 50000 on local IP 10.38.188.162.
Connected to Windows 8 9600 x86 compatible target at (Fri Jun 20 15:21:02.168 2014 (UTC + 8:00)), ptr64 FALSE
Kernel Debugger connection established.



目前, NET调试的速度明显提高了, 但我这里还是有不可以设置断点的情况, 没有找到具体原因, 



仔细观察的读者, 如何自己尝试后, 会在DEVICE MANAGER中, 看到系统多了一个网卡:

Microsoft Kernel Debug Network Adapter. 

而原来那个网卡: Intel(R) 82567LM-3 Gigabit Network Connection却出现在"传说中的黄点".


不用担心, 这个时候, 真正的物理网卡就是前者, 而后者已经不能代表这块物理网卡了.

这一点, 我已经尝试, 即你将带黄点的网卡禁止, 主机WINDBG还是可以控制从机的, "g"





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
这是书的光盘。共分为两个部分,这是第一部分。 本书由浅入深、循序渐进地介绍了Windows驱动程序的开发方法与调试技巧。本书共分23章,内容涵盖了 Windows操作系统的基本原理、NT驱动程序与WDM驱动程序的构造、驱动程序中的同步异步处理方法、驱 动程序中即插即用功能、驱动程序的各种调试技巧等。同时,还针对流行的PCI驱动程序、USB驱动程序 、虚拟串口驱动程序、摄像头驱动程序、SDIO驱动程序进行了详细的介绍,本书最大的特色在于每一节 的例子都是经过精挑细选的,具有很强的针对性。力求让读者通过亲自动手实验,掌握各类Windows驱动 程序的开发技巧,学习尽可能多的Windows底层知识。   本书适用于中、高级系统程序员,同时也可用做高校计算机专业操作系统实验课的补充教材。 原创经典,威盛一线工程师倾力打造。深入驱动核心,剖析操作系统底层运行机制,通过实例引导,快 速学习编译、安装、调试的方法。   从Windows最基本的两类驱动程序的编译、安装、调试入手讲解,非常容易上手,用实例详细讲解 PCI、USB、虚拟串口、虚拟摄像头、SDIO等驱动程序的开发,归纳了多种调试驱动程序的高级技巧,如 用WinDBG和VMWARE软件对驱动进行源码级调试,深入Windows操作系统的底层和内核,透析Windows驱动 开发的本质。 本书是作者结合教学和科研实践经验编而成的,不仅详细介绍了Windows内核原理,而且介绍了编程技 巧和应用实例,兼顾了在校研究生和工程技术人员的实际需求,对教学、生产和科研有现实的指导意义 ,是一本值得推荐的专著。              ——中国工程院院士   院士推荐   目前,电子系统设计广泛采用通用操作系统,达到降低系统的设计难度和缩短研发周期。实现操作 系统与硬件快速信息交换是电子系统设计的关键。   通用操作系统硬件驱动程序的开发,编者不仅需要精通硬件设备、计算机总线,而且需要Windows 操作系统知识以及调试技巧。学习和掌握Windows硬件驱动程序的开发是电子系统设计人员必备的能力。   本书是作者结合教学和科研实践经验编而成的,不仅详细介绍了Windows内核原理,并且介绍了编 程技巧和应用实例,兼顾了在校研究生和工程技术人员的实际需求,对教学、生产和科研有现实的指导 意义,是一本值得推荐的专著。 第1 入门 第1章 从两个最简单的驱动谈起 本章向读者呈现两个最简单的Windows驱动程序,一个是NT式的驱动程序,另一个是WDM式的驱动程序。 这两个驱动程序没有操作具体的硬件设备,只是在系统里创建了虚拟设备。在随后的章节中,它们会作 为基本驱动程序框架,被本书其他章节的驱动程序开发所复用。笔者将带领读者编代码、编译、安装 和调试程序。   1.1 DDK的安装   1.2 第一个驱动程序HelloDDK的代码分析    1.2.1 HelloDDK的头文件    1.2.2 HelloDDK的入口函数    1.2.3 创建设备例程    1.2.4 卸载驱动例程    1.2.5 默认派遣例程   1.3 HelloDDK的编译和安装    1.3.1 用DDK环境编译HelloDDK    1.3.2 用VC集成开发环境编译HelloDDK    1.3.3 HelloDDK的安装   1.4 第二个驱动程序HelloWDM的代码分析    1.4.1 HelloWDM的头文件    1.4.2 HelloWDM的入口函数    1.4.3 HelloWDM的AddDevice例程    1.4.4 HelloWDM处理PNP的回调函数    1.4.5 HelloWDM对PNP的默认处理    1.4.6 HelloWDM对IRP_MN_REMOVE_DEVICE的处理    1.4.7 HelloWDM对其他IRP的回调函数    1.4.8 HelloWDM的卸载例程   1.5 HelloWDM的编译和安装    1.5.1 用DDK编译环境编译HelloWDM    1.5.2 HelloWDM的编译过程    1.5.3 安装HelloWDM   1.6 小结  第2章 Windows操作驱动的基本概念  驱动程序被操作系统加载在内核模式下,它与Windows操作系统内核的其他组件进行密切交互。本章主 要介绍Windows操作系统内核的基本概念,同时还介绍应用程序和驱动程序之间的通信方法。   2.1 Windows操作系统概述    2.1.1 Windows家族    2.1.2 Windows特性    2.1.3 用户模式和内核模式    

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值