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

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完成

readFile, writeFile,

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

时间: 2024-10-29 19:08:42

windows 2000/xp WDM设备驱动程序开发 (2)的相关文章

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

0. 参考文献 <windows WDM 设备驱动程序开发指南><programming the microsoft windows driver model> <windows 2000驱动程序开发大全> 使用driverworks工具(driverStudio),而没有用DDK,因为更快捷 1. WDM驱动 例程 页故障:软件级别中断,运行在DISPATCH_LEVEL上: 所以访问DISPATCH_LEVEL的代码需运行在非分页内存 1.3 设备接口 旧的命名方法

Linux 设备驱动程序 -- 开发环境的搭建

目录 VMPlayer, Ubuntu 14.04的下载安装 Ubuntu 系统的配置 (1) Ubuntu系统源的更新 (2) 编译器安装 (3) 编辑器vim安装 (4) SSH服务器安装配置 (5) Samba服务器配置安装 Linux源码下载编译以及安装 第一个设备驱动程序Hello World 1. VMPlayer, Ubuntu 14.04 下载安装

Linux下PCI设备驱动程序开发 --- PCI驱动程序实现(三)

三.PCI驱动程序实现 1. 关键数据结构 PCI设备上有三种地址空间:PCI的I/O空间.PCI的存储空间和PCI的配置空间.CPU可以访问PCI设备上的所有地址空间,其中I/O空间和存储空间提供给设备驱动程序使用,而配置空间则由Linux内核中的PCI初始化代码使用.内核在启动时负责对所有PCI设备进行初始化,配置好所有的PCI设备,包括中断号以及I/O基址,并在文件/proc/pci中列出所有找到的PCI设备,以及这些设备的参数和属性. Linux驱动程序通常使用结构(struct)来表示

windows设备驱动程序WDF开发(3)

第8章 KMDF过滤器驱动程序 1. 管理设备的主功能为功能驱动FDO, 过滤器驱动位于FDO的上层或下层 WdfFdoInitSetFilter // 声明这个一个过滤驱动 2. 安装要修改FDO的inf文件 FilterSample实例 第9章 USB设备开发 1. USB2.0 最快480Mb/s, UBS3.0速度 5.0Gbps (500MB/s) 2. USB设备有一到多个配置 每个配置有一到多个接口 每个接口有一到多个端点,端点是通信管道的终点, 有四种:批量(bulk), 控制,

USB设备驱动开发之远程访问USB设备(一)

By Fanxiushu 2016 05-15  转载或引用本文,请注明原始作者. 使用过vmware的人都应该知道,vmware虚拟机有这样的一个功能, 当在宿主机上插入一个USB设备的时候,通过设置,可以在vmware的虚拟机系统里边能访问到这个USB设备, 而且访问这个USB设备,就跟真的把这个USB设备插入到这个虚拟系统中一样,跟真实的几乎没任何区别. 再看一种情况,假设有两台机器C和S,C 机器是你正在使用的机器, S机器在远端,你只能通过远程控制S. S机器的配置和功能都很强大,大部

linux 字符设备驱动开发详解

一.设备的分类及特点 1.字符设备 字符设备是面向数据流的设备,没有请求缓冲区,对设备的存取只能按顺序按字节的存取而不能随机访问.    Linux下的大多设备都是字符设备.应用程序是通过字符设备节点来访问字符设备的.通常至少需要实现 open, close, read, 和 write 等系统调用.    设备节点一般都由mknod命令都创建在/dev目录下,包含了设备的类型.主/次设备号以及设备的访问权限控制等,如:crw-rw----  1 root  root 4, 64 Feb 18

《Linux设备驱动开发具体解释(第3版)》(即《Linux设备驱动开发具体解释:基于最新的Linux 4.0内核》)网购链接

<Linux设备驱动开发具体解释:基于最新的Linux 4.0内核> china-pub   spm=a1z10.3-b.w4011-10017777404.30.kvceXB&id=521111707813&rn=4cf013961288ab7c4dfd2016aeb21fa8&abbucket=5">天猫     dangdang   京东 China-pub 8月新书销售榜 推荐序一 技术日新月异,产业斗转星移,滚滚红尘,消逝的事物太多,新事物的诞

《Linux设备驱动开发详解:基于最新的Linux 4.0内核》china-pub预售

<Linux设备驱动开发详解:基于最新的Linux 4.0内核>china-pub今日上线进入预售阶段: http://product.china-pub.com/4733972 推荐序一 技术日新月异,产业斗转星移,滚滚红尘,消逝的事物太多,新事物的诞生也更迅猛.众多新生事物如灿烂烟花,转瞬即逝.当我们仰望星空时,在浩如烟海的专业名词中寻找,赫然发现,Linux的生命力之旺盛顽强,斗志之昂扬雄壮,令人称奇.它正以摧枯拉朽之势迅速占领包括服务器.云计算.消费电子.工业控制.仪器仪表.导航娱乐等

[转]解析Winndows 2000/XP物理内存管理

物理内存是相对比较紧张的资源,合理利用将是一个操作系统的性能的关键.Windows 2000/XP内部使用一个称为页框数据库(Page Frame Database)的结构用于描述物理内存的状态.本文将从这一结构入手详述Windows物理内存的组织与管理. Windows将物理内存按PAGE_SIZE(在x86上,为0x1000字节,即4K)为单位,将其划分,每一单元在页框数据库中均有一项描述其状态及用途等.页框数据库实际上是由这些描述每一页情况结构的数组.页框数据库由内核变量MmPfnData