windows 2000/xp WDM设备驱动程序开发 (2)

时间:2022-05-07 20:03:16

4. WDM环境  

  a  安装VC6.0;

  b  安装相应操作系统的DDK(组件一定要全选);

  c  安装DriverStudio;

  d  用VC6.0打开Compuware\Driver Studio\DriverWorks\Source\VdwLibs.dsw工程;

1)用DriverStudio的driverWizard来创建工程

创建RegSample完后编译出现错误,删掉没有的函数,然后去掉了ntstrsafe.lib 链接库

2)EzDriverInstaller (driverstudio)安装 inf

3)图标,-20是 

-5是 

注册表的HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Class 可以更改对应的图标

4) 打log, KTrace, KDebugOnlyTrace, DbgPrint

USB2.0 最高60MB/s黑色或白色接口,3.0是600MB/s蓝色, 

5. 驱动和应用的通信

5.1 打开设备 createFile(), 用GUID或符号链接

同步:FILE_ATTRIBUTE_NORMAL

异步:FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, 

关闭设备 closeHandle(), 产生 IRP_MJ_CLEANUP 和 IRP_MJ_CLOSE, 应用程序Ctrl_C强行退出和出错退出都产生这两个IRP

DeviceIoControl(), 异步调用waitForSingleObject来等待IO完成

windows 2000/xp WDM设备驱动程序开发 (2)

 

readFile, writeFile, 

windows 2000/xp WDM设备驱动程序开发 (2)

windows 2000/xp WDM设备驱动程序开发 (2)

5.2 驱动和应用通信

WDM两种方法:

1)异步完成IRP,intrdemo DS的例子,没看

2)win32事件(就是createEvent),charFilter例子,没看

6. 常见编程技术

6.1 字符串

CHAR, WCHAR, ANSI_STRING, UNICODE_STRING

KUstring类

6.2 内存

非分页内存 m_image = new(NonPagedPool) UCHAR[m_size];

KMemory类,为内存描述符表MDL提供服务,

KHeap类内存堆,比较大块

6.9 CancelSpinLock类, 全局取消自旋锁是瓶颈,CPU在等待自旋锁的时候什么也不能干。 可用IoSetCancelRoutine来代替

6.10 KSpinLock类,,可以阻塞其他线程

6.12 timerSample, FileThread

实例模仿driverMonitor来打印log

7. PNP 即插即用例程

启动、停止、删除设备, DW自动生成这三例程

8. 电源管理

9. WMI 系统管理

10. IRP串行化

1) driverworks提供了KDeviceQueue,

KDevice::QueueIrp(),irp入队; 若队列闲则调用StartIo

KDriverManagedQueueEx用于自己管理多个队列

startIoChar_Driver实例

11. WDM过滤器驱动

和普通驱动一样,都有DriverEntry,addDevice等,用设备堆栈来分层

上层驱动用于添加附加功能

下层驱动用于帮助写一个总线无关的驱动,如PCI总线、USB总线可以统一成一个总线结构的功能驱动

12 USB设备开发

设备接口暴露一个或多个端点,有四种:批量,控制,中断,同步

0号端点:默认的控制方法,

事务由一个或多个阶段组成,阶段有三种:令牌、数据、握手

(待续)

13. PCI设备驱动

xp86的IO地址有64KB,而内存地址空间4GB

KMemoryRange, KIoRange

KPciConfiguration

connect() , 把中断对象和中断服务例程连接起来

DMA传输

1)实例

a) PCI9054接口卡,采用PLX公司的PCI9054芯片,局部总线接口模式为C模式,9054局部总线信号线和FPGA芯片相连。

设备要访问的资源:前两个固定用于9054的操作寄存器;第三个为IO映射空间,用于设备访问

b) FPGA有FIFO,DMA采用块模式

c) 9054实例过程:先IO指令写32字节到FIFO,然后DMA块传输读

d) DMAsample

windows 2000/xp WDM设备驱动程序开发 (2)