
Windows驱动
文章平均质量分 74
kaizitop
我愿意平平淡淡平平安安走完一生,踏踏实实老老实实奋斗一生,勤勤恳恳快快乐乐奉献一生!把自己的知识与众人分享,把众人的知识吸收消化,也许不能有力的推动历史的车轮,却会让我的人生变得充实而美满!
展开
-
WDM驱动程序开发之调试信息输出篇:KTrace, KDebugOnlyTrace类
class KTrace, class KDebugOnlyTrace:【Overview】 类KTrace提供了一种向调试器或Monitor工具输出调试内容的方法。这个类既支持对于integers, ASCII strings, 和Unicode strings等数据格式的printf方式的输出,也支持某些类型的C++的输出流方式的输出,待输出的数据将被缓冲,直到被输出到Monitor。翻译 2008-03-20 00:12:00 · 2497 阅读 · 4 评论 -
WDM驱动程序设计之USB总线支持类:KUsbInterface类
KUsbInterface类【Overview】KUsbInterface类抽象了一个USB接口,这个接口在USB规格说明书的第5章和第9章作了说明。一个接口是一个端点(endpoints)集合,这里的端点指的是数据的发送源和接收方。换句话说,一个接口是一个USB设备产生数据或使用数据的组件的子集(或子类)。一个给定的设备可以有若干个接口(interfaces)。包含相同端点的接口不能同时被配置。翻译 2008-05-02 22:15:00 · 995 阅读 · 0 评论 -
WDM驱动程序设计之USB总线支持类:KUsbLowerDevice类、KUsbInterface类和KUsbPipe类(综述)
USB(Universal Serial Bus)总线支持类包括三个类:KUsbLowerDevice类、KUsbInterface类和KUsbPipe类,这三个类都只能在WDM模式下使用。本文只做概要性介绍,以后三篇文章将分别介绍这三个类的封装结构。【Overview】DriverWorks支持USB客户端驱动开发,比如需要通过USB向某个设备发送请求的驱动程序。从客户端驱动的开发者角度来看,任翻译 2008-04-28 20:55:00 · 996 阅读 · 1 评论 -
WDM驱动程序设计之USB总线支持类:KUsbPipe类
KUsbPipe类【Overview】KUsbPipe类抽象了一个USB管道(pipe),这种机制在USB规格说明书的第5章和第9章有描述。一个管道是一个主机和端点(endpoint)之间的连接。每个端点是互相独立的可寻址的数据使用者或数据提供者。因此一个管道为主机和设备之间的信息交换描绘了一个独特的逻辑上下文(a logically distinct context)。在设备给定的配置下,每个管翻译 2008-05-02 23:47:00 · 1685 阅读 · 0 评论 -
WDM驱动程序设计之USB总线支持类:KUsbLowerDevice类
class KUsbLowerDevice【Overview】KUsbLowerDevice类是实现一个USB客户端驱动的核心类。它使驱动能够控制一个USB设备的默认控制管道(the default control pipe),能够配置设备,并且能够向设备传递各种控制请求和状态请求。这个类相当于USB协议栈的逻辑设备层(logical device layer),为USB和设备端点(device翻译 2008-04-29 10:34:00 · 1743 阅读 · 0 评论 -
DM642的PCI驱动编程笔记:详述DM642的PCI接口的地址映射机制
在考虑PCI地址映射问题时,需要理清两个概念:主机端虚拟地址和DSP端物理地址。 主机端虚拟地址是指在主机端进行任何操作时,编程人员提供给系统的地址,这个地址必须在系统的整个编址空间内,且如果是对某个设备进行操作,那么这个地址还必须在系统为这个设备分配的特定的一块(或不连续的几块)编址空间里。这个地址一般由一个基地址和编程人员提供的偏移地址组合而成。 DSP端物理地址是指,在D原创 2008-04-08 19:58:00 · 2718 阅读 · 2 评论 -
DM642的PCI驱动编程笔记:遍历一块内存空间的源码
我是在做WDM驱动时,为了验证DM642的DSP端究竟有没有写入相应的数据,编写了一个这样的程序,用CCS环境Load到仿真器里去遍历 ,并由此推断主机端为DM642分配的虚拟地址空间和DM642的物理地址空间之间的映射关系。 贴出这个程序并不是说这个程序有多么高深,而是提供一个思路,因为很多朋友在工作或学习中遇到类似的问题往往想不起来编这么个小程序就能解决问题。 类似原创 2008-04-05 09:31:00 · 2704 阅读 · 0 评论 -
WDM驱动程序开发之DMA数据传输:KDmaAdapter,KDmaTransfer,KCommonDmaBuffer类
KDmaAdapter类:一、Overview KDmaAdapter提供了对系统DMA适配器对象的一种抽象。像KController类一样,这个类主要是提供了串行控制一种特定资源的方法,对于这个类来说,要控制的资源就是一个DMA通道或者总线主控适配器。 这个类使一个驱动程序可以识别处一个DMA通道的特征,并且当驱动被授予控制通道(channel)的权限时请求一个回调函数的执行。(翻译 2008-03-31 14:44:00 · 2033 阅读 · 1 评论 -
DM642的PCI驱动编程笔记:缺页中断问题阐述以及与改变中断级相关的内核函数
最近在编写内核驱动时出现因缺页中断被屏蔽而导致CPU占用100%,不得不重启的现象。 SoftICE中显示的信息是:Break due to Page Fault(0Eh)...Fault=0000 现在基本搞清了这件事情。简要陈述之并介绍几个和改变中断级有关的内核函数给大家。 缺页中断,是指若要访问的单元不在内存中时,需要临时从硬盘调入一页放入内存。这种中断由于是磁盘中原创 2008-03-30 21:11:00 · 1494 阅读 · 0 评论 -
WDM驱动程序开发之内存映射:KMemory类
KMemory类:一、Overview KMemory类实现对内存描述列表(MDL)的封装。一个内存描述列表描述了一系列虚拟内存。它的成员变量包括开始地址和大小,以及内存页的物理地址集合(这个如果有的话,应该在虚地址后面)。 KMemory类对于用direct I/O方式的设备是很重要的。包括在创建一个KDevice派生类实例时传递一个DO_DIRECT_IO标志的那些设备,也包括翻译 2008-03-30 17:01:00 · 1769 阅读 · 1 评论 -
WDM驱动程序开发之IO请求(IRP):KIrp类
KIrp类:一、Overview KIrp类抽象了IRP(IO请求),这个类是设备驱动程序中操作的核心。这个类的目标是: (1)提供对IRP中各个域的存取方法。 (2)提供一些可以结合相关操作的函数 (3)提供重载操作符来使类实例以对IRP本身类似的操作来使用 IRP结构的复杂性足以使任何不熟悉它的开发人员畏惧,并且写出来的操作它的代码也是容易出错和不易阅读的。比翻译 2008-04-01 20:08:00 · 3067 阅读 · 3 评论 -
WDM驱动程序开发之读写设备存储器:KMemoryRange类
KMemoryRange类:一、Overview KMemoryRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。考虑到可移植性,所有对memory周期(memory cycle)进行译码的设备驱动程序必须用这个类对memory的位置(location)进行正确的访问(access)。KMemoryRange是KPeripheralAddress类的派生类。 一旦翻译 2008-03-28 18:58:00 · 1573 阅读 · 1 评论 -
WDM驱动程序开发之读写设备寄存器:KIoRange类
KIoRange类:一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIoRang翻译 2008-03-26 20:35:00 · 1587 阅读 · 1 评论 -
WDM驱动程序开发之PCI设备的配置空间:KPciConfiguration, KPciSlot类
KPciConfiguration, KPciSlot类:一、Overview KPciSlot类和KPciConfiguration类用于在驱动开发过程中协助支持基于PCI总线的设备。KDevice的派生类可以包含KPciConfiguration类的一个实例来存取设备配置空间的内容。为了满足这些需要,驱动编写人员需要提供PCI vendor ID和device ID给它的构造函数。这翻译 2008-03-28 16:06:00 · 1896 阅读 · 2 评论 -
WDM驱动程序开发之驱动框架篇:KDriver类
KDriver类: 一、Overview KDriver类提供了一个设备驱动程序的框架。这个类的职责包括初始化驱动程序,把I/O请求传递给它们的目标设备对象。 KDriver是一个抽象类,驱动编写人员必须写一个新的类来继承它。新的子类必须重写DriverEntry函数,这是当系统载入驱动程序时框架要调用的函数。这个派生类会有一个构造函数,但是构造函数不允许有参数。一般来说,最好不要翻译 2008-03-22 16:08:00 · 2356 阅读 · 1 评论 -
WDM驱动程序开发之设备基类篇:KDevice类
KDevice类:一、Overview 设备对象是系统驱动结构的核心。驱动程序创建符合物理和逻辑设备的设备对象,这些设备应该是I/O操作的目标。用户子系统通过文件系统控制设备对象。所有的I/O请求(IRPs)对应一个特殊的设备对象。 KDevice类的成员函数与处理设备对象的系统服务有映射关系。成员函数的集合包括:构造函数和析构函数、串行化和完成IRP的例程、底层设备的接口;其翻译 2008-03-25 08:57:00 · 2387 阅读 · 1 评论 -
WDM驱动程序开发之应用程序测试篇CreateFile,ReadFile,WriteFile,DeviceIoControl,CloseHandle.
一、*****CreateFile***** 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:控制台对象、通信资源对象、目录对象(只能打开)、磁盘设备对象、文件对象、邮槽对象、管道对象。 函数原型:HANDLE CreateFile( LPCTSTR lpFileName, // file name对象路径名 D翻译 2008-03-21 09:44:00 · 5096 阅读 · 3 评论 -
WDM驱动程序开发之设备接口篇:CDeviceInterface 和CDeviceInterfaceClass 类
CDeviceInterfaceClass,CDeviceInterface类:【在应用程序级上使用设备接口】 DriverWorks提供了这两个类用来支持设备接口在应用程序中的访问。这两个类的声明和实现在devintf.h中。 CDeviceInterfaceClass类封装了一个设备信息集合(set),这个set包含了所有关于一个具体类的设备接口信息。 应用程序可以使用一个翻译 2008-03-20 10:06:00 · 2519 阅读 · 1 评论 -
WDM驱动开发过程遇到的一些问题解决的方法集锦
1、SoftICE在机器启动时有时会出问题,Setting里选择boot,不按ESC就进不了系统,这种情况据说可能是和系统安装的虚拟光驱有冲突(高版本会有冲突),安装虚拟光驱的3.47版本没问题。导致这种问题的还有因素很多。2、编译程序时出下面错误.../driver/PCiDriverDevice.h(60) : error C2504: KDriverManagedQueueEx : ba原创 2008-05-12 15:38:00 · 1916 阅读 · 3 评论