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), 控制,中断(interrupt),同步(Isochronous)

1)端点0默认是可以访问的,输入和输出

2)FDO的作用是把IRP引导到正确端点的管道上,把需求提给总线驱动,总线驱动分解成事务(transaction),送往总线

事务有一到多个阶段(phase),phase分令牌(token),数据和握手(ack)

3. USB数据传输方式

1)控制传输:最高优先级,最大数据64B,每个控制事务包括一个SETUP令牌,带可选的数据阶段和握手阶段,设备必须响应控制传输

2)

(usb驱动部分待续)

第10章 PCI设备驱动程序开发

1. 微机扩展插槽有:ISA(已淘汰), PCI(即插即用,不是热插拔)

PCI: 32位数据总线,速率132~264MB/s,

通用PCI总线接口:AMCC的S5933,PLX的9054。也可以用FPGA实现PCI接口

2. 开发驱动主要有3方面问题:硬件访问,中断处理,DMA传输

X86有两种地址空间:I/O地址(只有64KB),内存地址(4GB以上)

I/O映射:一个芯片的地址在I/O地址空间的范围,只能通过I/O指令来访问。

内存映射:内存指令访问

3. I/O访问

WRITE_PORT_UCHAR ,   WRITE_PORT_USHORT, WRITE_PORT_ULONG

WRITE_PORT_BUFFER_UCHAR ...

4. 存储器访问

WRITE_REGISTER_UCHAR ...

WRITE_REGISTER_BUFFER_UCHAR

5. 硬件访问编程

1) 根据配置定义地址指针,用于修改PCI9054的寄存器, MemBaseAddress0 和 IoBaseAddress0

2)EvtDevicePrepareHardware 中初始化 MemBaseAddress0

6. 中断处理

WDFINTERRUPT, 运行在DIRQL级别,处理时间尽可能短

中断服务例程是异步调用的,必须考虑其他例程和中断服务例程的共享数据的保护性访问(硬件中断自旋锁,运行在DIRQL)

WDF_INTERRUPT_CONFIG_INIT, WdfInterruptCreate

7. DMA编程对象

1) WDFDMAENABLER,用于建立一个DMA适配器,说明DMA通道的特性,  WdfDmaEnablerCreate

2) WDFDMATRANSACTION, 用于传输控制, WdfDmaTransactionCreate

启动一个DMA传输,获取传输缓冲区的物理地址和字节数,DMA传输结束后的数据处理

函数:

WdfDmaTransactionInitialize(EvtProgramDmaFunction): WdfDmaTransactionExecute后会调用EvtProgramDmaFunction

WdfDmaTransactionExecute 执行DMA传输

WdfDmaTransactionRelease 终止传输

  WdfDmaTransactionDmaCompleted 测试传输是否完成

WdfDmaTransactionDmaCompletedFinal 强行完成DMA传输

WdfDmaTransactionGetBytesTransferred 传输的总字节数

WdfDmaTransactionSetMaximumLength 设置传输的最大字节数,应小于65536

3) WDFCOMMONBUFFER,申请系统的公用缓冲区, WdfCommonBufferCreate

对于DMA操作,系统提供一个特殊的内存,物理上连续的内存,称为公用缓冲区(比较稀有,避免浪费)。

对于支持分散/聚集DMA的设备,可以不用公用缓冲区

8. DMA传输编程

DPC中,测试DMA传输完成没有,若没有,则WdfDmaTransactionExecute 继续传输

PCI9056:

#define INTCSR 0x68
#define CNTRL 0x6C
#define DMAMODE0 0x80
#define DMAPADR0 0x84
#define DMALADR0 0x88
#define DMASIZ0 0x8C
#define DMADPR0 0x90//descriptor
#define DMACSR0 0xA8//DMA通道0 命令状态寄存器
#define HPIC 0x00
#define HPIA 0x04
#define HPID 0x08

第11章 UMDF驱动程序编程入门

UMDFSample实例

是dll程序

第12章 WinDbg使用介绍

1. windbg调试:双机调试,也可以用虚拟机代替

目标机:启动时选择“启用调试程序”

主控机:winDbg中kernel debugging

windbg:debug-》break, 使主控机和目标机连接

.reload 加载符号文件

ld projectName  加载PDB文件

lm l 显示已经加载符号文件列表

2. 调试

F9 在源文件中设置断点

G  使目标机运行

F10 执行

时间: 2024-11-08 04:48:22

windows设备驱动程序WDF开发(3)的相关文章

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 设备接口 旧的命名方法

HoloLens开发手记 - 使用Windows设备控制台 Using Windows Device Portal

Windows设备控制台允许你通过Wi-Fi或USB来远程控制你的HoloLens设备.设备控制台是HoloLens上的一个Web Server,你可以通过PC的浏览器来连接到它.设备控制台包含了很多帮助你管理.调试和优化HoloLens设备的工具. 设置HoloLens以使用Windows设备控制台 Setting up HoloLens to use Windows Device Portal 打开HoloLens,并穿戴上 使用绽开手势打开开始菜单 选中设置应用,在你放置它以后会自动启动

您在基于 Windows 7 的或基于 Windows Server 2008 R2 的计算机上读取器中插入智能卡时出现错误消息:&quot;设备驱动程序软件未能成功安装&quot;

http://support.microsoft.com/kb/976832/zh-cn http://support.microsoft.com/kb/976832/zh-tw 症状 当智能卡插入智能卡阅读器后时,Windows 尝试下载并安装智能卡 minidrivers 通过插服务卡.如果自定义的加密服务提供程序未在系统上安装智能卡的驱动程序在任一预配置位置,如 Windows 更新. WSUS 或 intranet 路径不可用,在通知区域中将收到以下错误消息: 未能成功安装设备驱动程序软

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 XP Embedded 系统开发1

眼下 Windows PE(Preinstallation Environment)和 Windows XP Embedded 是能够脱离主机里的硬盘独立执行的 Windows 操作系统,Windows PE 多用于光盘启动,Windows Embedded 从 Feature Pack 2007 之后已经支持从 USB 设备(移动硬盘.Flash U 盘)执行. 从基础開始,菜鸟也能够开发出一个在 USB 移动硬盘上执行的操作系统. 一.Windows Embedded 开发资源简单介绍 Wi

字符设备驱动程序的使用

1.编译.安装驱动linux系统中,驱动程序通常采用内核模块的程序结构来进行编码,因此,编译.安装一个驱动程序,其实质就是编译.安装一个内核模块.将文件memdev.c makefile 放入虚拟机中,make 得到.ko文件cp .ko rootfs启动开发板 insmod *.ko2.创建设备文件通过字符设备文件,应用程序可以使用相应的字符设备驱动程序来控制字符设备.创建字符设备文件的方法:a.使用mkmod命令 mknod /dev/文件名 c 主设备号(将驱动和设备文件关联) 次设备号m

linux设备驱动程序该添加哪些头文件以及驱动常用头文件介绍(转)

原文链接:http://blog.chinaunix.net/uid-22609852-id-3506475.html 驱动常用头文件介绍 #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件.#include <asm/***.h> 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件.#include <mach/***.h> 是在linux-2.6.29/arch/ar

LINUX设备驱动程序笔记(二)构造和运行模块

         <一>:设置测试系统 首先准备好一个内核源码树,构造一个新内核,然后安装到自己的系统中.           <二>:HelloWorld模块 #include <linux/init.h> //定义了驱动的初始化和退出相关的函数 #include <linux/module.h> //定义了内核模块相关的函数.变量及宏 MODULE_LICENSE("Dual BSD/GPL"); //该宏告诉内核,该模块采用自由许可