PCI图像采集卡的Windows驱动程序开发

合集下载

PCI 设备Windows 通用驱动程序设计

PCI 设备Windows 通用驱动程序设计

PCI设备Windows通用驱动程序设计摘要通用高速PCI总线目标模块全面地讨论了Windows 设备驱动程序编写时所面临的主要问题及解决方案关键词经常要在机的软件中访问和控制硬件设备包括Windows95/98Windows 2000为了保证系统的安全性对应用程序访问硬件资源加以限制Windows下的驱动程序不仅仅包括物理设备的驱动程序为了简化问题本文将以撏ㄓ酶咚伲校茫勺芟吣勘昴探讨PCI设备的驱动程序设计方案它可以完成一般PCI设备驱动所需的功能Çý¶¯³ÌÐò²»»á¶ÀÁ¢µØ´æÔÚͨ¹ýÉ豸Çý¶¯³ÌÐò´Ó¶ø¿ÉÒÔʵÏÖ¶à½ø³Ì²¢ÐÐÔËÐн«µ÷ÓÃÉ豸Çý¶¯³ÌÐòµÄpc机程序称为用户程序所以大多数情况下驱动程序也不能通用一般至少要设计Windows 9X和Windows NT两个驱动程序版本同时它又推出一个新的Win32 Drivers Mode (WDM)驱动类型如USB 设备这个新的类型实际是在Windows NT的驱动模型的基础上增加了即插即用等内容先前叫Windows NT5.0´Ó³¤Ô¶µÄ½Ç¶È¿´µ«´ÓĿǰµÄÊг¡Çé¿öÀ´¿´ËùÒÔWDM在近一两年还无法替代其它类型的设备驱动0级2级和3级而用户程序运行在3级上具体的限制在不同的操作系统中是不同的Windows 95支持的驱动类型很多主要是VxD和打印机驱动两类VxD运行在Intel系统的0级上对任何I/O设备有全部访问权VxD驱动通常以放在Windows\System目录下也可以在程序运行时根据需要动态地载入但打印机驱动程序不是VxDͬWindows 95类似Kernel ModeUser Mode)之分PCI通用驱动程序要求对各种硬件资源访问开发设备驱动采用的主要开发工具是微软为设备开发者提供的软件包Device Driver Kit (DDK)±àÒëÐèÒªµÄÍ·ÎļþºÍ¿âÎļþÔÚDDK中还定义了一些设备驱动可以调用的系统底层服务中断服务可安装文件系统服务等等但Windows 95的DDK由于主要使用汇编语言描述因此VtoolsD是基于C/C++的使用和维护都较Windows DDK容易 PCI驱动程序的特点在设计驱动程序之前更需要详细了解硬件设备的特性需要了解的最主要的硬件特性包括设备的总线结构设备采用什么总线结构非常关键如ISA和PCIËùÒÔÇý¶¯³ÌÐòÉè¼ÆÒ²²»Í¬寄存器要了解设置的控制寄存器以及这些寄存器工作的特性设备错误和状态要了解如何判断设备的状态和错误信号port也就是通过CPU的IN/OUT指令进行数据读写但PCI规范不包括从属DMA的说明设备内存许多设备自身带有内存有的设备还要通过驱动程序设置设备的接口寄存器在DDK文档中有规定这是根据设备的不同而不同的但基本功能就是完成设备的初始化中断的设置如前面所说但驱动程序所要完成的工作却是相同的仅在需要的地方指出两个操作系统的不同ѰַPCI器件的资源和对PCI器件中断的服务所有软件扩展ROM码PCI BIOS规范有完整的有关PCI BIOS功能的描述[在PCI设备驱动程序的初始化过程中devicevendor indexͨ¹ýµ÷ÓÃPC IBIOS确认其存在总线号这是该器件利用总线号功能的PCI配置空间设备驱动就需要从配置空间获得硬件的参数包括所用的中断号存储器的地址存储器映射方式等读写配置空间可以调用BIOS中断1AHÔÙ¶ÔÅäÖÿռäÊý¾Ý¼Ä´æÆ÷(0CFCH)进行读写最重要的是获得基址寄存器(BADR)ϵͳ¿ÉÄÜ»á¸ù¾ÝÓ²¼þÇé¿öΪPCI设备分配新的资源而基址4是按内存方式映射的可以读对应端口的配置寄存器(Configuration Register)ÅÐ¶ÏÆä0位表示其是按内存方式设置的内存方式和I/O方式的配置寄存器的含义参见文献[如果要获得基址的大小然后读基址寄存器从第4位开始的0的数目表示基址的大小则从第2位开始的0的数目表示基址的大小查找PCI设备的工作是由HalGteBusData完成的但DDK推荐使用HaiGetBusDataOffset函数)端口操作在PC机上所以处理方法也不同它不象内存有实模式和保护模式之分在Windows 9X下而不一定非通过专门的驱动程序来完成甚至可以不用专门设计驱动程序由于PCI总线是32位的总线标准而且以前大多数C/C++编译软件都没有提供双字的函数在Windows NT下级的用户程序和用户模式驱动程序直接 使用I/O指令所以任何对I/O的操作都需要借助内核模式驱动来完成一是在驱动程序中使用IoReportResourceUsage报告资源占用PORTWRITEXXX函数读写另一种是驱动程序修改NT的I/OPermissions Map(IOPM)ÕâʱÓû§³ÌÐò²ÉÓÃͨ³£µÄI/O指令进行操作用户程序设计简单程序不能移植到非Intel的系统中±£»¤Ä£Ê½ÓëʵģʽµÄ¸ù±¾Çø±ðÔÚÓÚCPU寻址方式上的不同Windows采用了分段分页机制如图这样使应用程序产生一种错觉这样做最大的好处就是一个程序可以很容易地在物理内存容量不一样的编程人员使用虚拟存储器可以写出比任何实际配置的物理存储器都大得多的程序通过分段机制再通过分页机制线性地址被分割成页目录(Page Directory)µ±½¨Á¢Ò»¸öеÄWin32进程时并建立它自己的页目录页目录的地址也同时放入进程的现场信息中系统首先从CPU控制器CR3中读出页目录所在的地址再根据页表得到实际代码最后再根据页偏移访问特定的单元但应用程序读写的是虚拟地址从物理地址到线性地址的转换工作也是由驱动程序来完成的使用DDK的VMMCallÇý¶¯³ÌÐòµÄÄÚ´æÓ³É䲿·ÖÖ÷ÒªÊǵ÷ÓÃVxD的系统服务MapPhysToLinearPVOID MapPhysToLineag(CONST VOID * PhysAddr,DWORD nBytes,DWORD Flags);其中第一个参数PhysAddr就是要映射的内存的物理地址的起始位置Flags必须设置为0Èç¹ûÖ¸¶¨µÄÄÚ´æ²»ÄÜ´æÈ¡比如要映射物理内存ED000000H开始的4096个字节PCHAR *PointerToPage=(PCHAR)MapPhysToLinear((PVOID)OxED000000,4096,0);而将PointerToPage传递给调用驱动的用户程序而通过对这个指针的操作就可以实现对物理内存ED000000H进行读写首先调用IoReportResourceUsage请求使用设备的内存再使用MmMapIoSpace把设备的内存映射到虚拟空间调用MmUnmapIoSpace 断开设备的内存和虚拟空间的连接)中断的设置响应与调用应该在驱动程序中完成Int完成DDK还提供了响应中断事件的服务VPICD服务用来管理所有硬件中断事件对一个特定的IRQ中断源或者允许其它VxD重载中断处理函数要处理硬件中断应该从VHardwareInt继承一个类个类中在Windows NT中设备驱动首先使用HalGetInterrupuVector将与总线有关的中断向量转换为系统的中断向量×ÜÊÇÐèÒªÓÉÓû§³ÌÐòÀ´µ÷ÓÃÇý¶¯²¢ÊµÏÖÒ»¶¨µÄ¹¦Äܵõ½Ò»¸öÎļþ¾ä±úʹÓÃÈçϵÄÓï¾ä¾Í¿ÉÒÔ´ò¿ªÎļþµ÷ÓÃDeviceIoControl函数就可以同设备驱动程序交换数据了可以调用CloseHandle(hVxD)这种调用方式也是Windows NT调用设备驱动的标准方法如DPMI方式在两个操作系统下Íê³ÉÁ˶ÔÇý¶¯³ÌÐòµÄ³õ²½Éè¼Æ³ÌÐòÒ²²»Ì«ÈÝÒ×¾ßÓÐͨÓÃÐÔÔÚÓÐЩ¿ª·¢¹¤¾ßÖÐ不包括直接读写I/O端口的语句目前ActiveXDLL可以在大多数软件环境中进行调用VCL可以在Delphi和C++ Builder中使用所以也提供了C++类库方式 马卫国通用高速PCI总线目标模块的设计1999;25(1)±±¾©1997。

Windows2000下PCI数据采集卡WDM驱动程序设计

Windows2000下PCI数据采集卡WDM驱动程序设计
种 局 部 总线 标 准 。 在设 计 自行 开 发 的基 于 P I C 总线
的数 据 传 输 设 备 时 .需 要 开 发 相 应 的设 备 驱 动 程
序 。 常 开 发 P I 备 驱 动 程 序 有 多 种 模 式 , 如 通 C设 例 VD ( x 虚拟 设 备 驱 动 程 序 )WD ( n o sD v r 、 M Wid w r e i Mo e 等 。 文 针 对基 于 P I 线 的数 据 采集 卡 . d) 本 C总 编
通 讯 作 者 简 介 : 秀 琴 (9 0 , , 肃 省 平 凉 市 人 , 究 员 , 士 苏 16 ) 女 Wid w 0 0中 的设 备 驱 动 程 序种 类 no s 0 2
维普资讯
15 52
科 学 技 术 与 T 程
④ 2 0 S iT c . nn . 0 6 c. eh E g g
Wid w 0 0 P I n o s 0 下 C 数据采集卡 WD 2 M 驱动程序设计
张 广 华 苏 秀琴 李 哲
( 国 科 学 院 西 安 光 学 精 密 机 械 研 究 所 光 电 测控 研 究室 , 安 70 6 ) 中 西 10 8
维普资讯
第 6卷
第 1 1期
20 0 6年 6月







Vo .6 No 1 J n 2 0 1 . l u. 06
1 7 —8 5( 0 6 1 —5 1— 5 6 1—1 1 2 0 、 1—1 5 — 0
S in eTe h oo y a d E gn e n ce c c n lg n n i e r g i
中图法分类号
T 3 5 ; 文献 标 识码 P 1. 12

基于WDM模型的PCI数据采集卡驱动程序设计

基于WDM模型的PCI数据采集卡驱动程序设计
d sg e fr daa c ii o c r b e o PCI us c o d n t t prn i e f W DM d v c d v r nls e in d o t a qust n ad a d n i s b a c r i g o he i cpl o e ie r e. i i de c vie d v r o l c mplt de i e rv r o di . r u ie i r e c u d o ee vc d e la ng o tn dipac ng nd ne r t e vc i s thi a itrup s r ie.rhe n ok n a d a k g o r iv i g n p c a e f d vc d v r e ie r e wee ls dic s e Ta i g i r a o s u s d. k n PCI -02 00 da a c ii o c r a,a e a 5 4 t a qust n a d s n x mpl, i Wa u e t de eo i e t s sd o v lp h vie i e f r t e de c drv r o W ido 20 0/ n ws 0 XP. An i t i de eo m e t VC ++6. a d Drv r t di3. wee to a d n h s v lp n . 0 n i e S u o 0 r o k s d v l me af rn.Th e pe me t e u t s ow h t h de ie iv r r s e eop ntplto t e x r i n r s l s h t a t e vc dr e un we a d o l b pa e i fe e t l n c u d e lntd n di r n

Windows平台下PCI设备驱动程序的开发

Windows平台下PCI设备驱动程序的开发
Pc机总线大体可以分为三代,其代表分别是 ISA、PCI、PCI·E,速度越来越快,逐渐由并行向串行发 展。PCI总线特点是:可以进行突发式传输;总线操作 与处理器一存储器子系统操作并行;全自动配置与资 源分配,町实现即插即用;独屯于处理器,与CPU更新 换代无关,通用性好;PCI设备可以完全作为主控没备 控制总线;地址及数据奇偶校验系统更加可靠;中断是 电平触发,町以实现共享。
pDfiverO啦t一>MajorFunction[1RP_MJ_CLOSE]=
Dispatch_Close;
pDriverObject一>MajorFunction[IRP-MJ—READ]=
Dispatch—Read;
pDriverObject一>MajorFunction[IRP_MJ_WRITE]= Dispatch_Write;
万方数据
为广泛。 程序的人几函数DriverEntry中,主要的逻辑功能
是指定该驱动程序的各个功能函数的入【1:
pDriverObject一>DriverUnload=DriverUnload: pDriverObject一>MajorFunction[IRP_MJ_CREATE]=
Dispatch_Create;
户地址到PCI存储器地址的转换,这个映射在操作系 统中用一个内存描述表(MD!。)米表达,该农的内容如 图5所示‘2|。
用户模式虚拟地址 Vaddr a
物理地址 Paddr a

Vaddr n
Paddr n
图5 MDL的结构
这种情况下,应用程序访问PCI硬件地址对应的 虚拟地址时,操作系统通过访『nJ该MDL,把该虚拟地 址映射到相应的PCI存储器,达到直接访问的目的。 应川程序可以像访问系统的物理内存一样访问PCI的 硬件存储器。该过程町以这样总结:应用层虚拟地址 -+MDL映射_物理地址-+经过北桥_+对应PCI插槽 -+PcI桥芯片_【砒al地址_+板载RAM、FPGA。

PCI设备Windows通用驱动程序设计

PCI设备Windows通用驱动程序设计

PCI设备Windows通用驱动程序设计2004-5-13 10:56:55驱动开发网李海(华强电子世界网讯)本文结合“通用高速PCI总线目标模块”的驱动程序设计,全面地讨论了Windows设备(特别是PCI设备)驱动程序编写时所面临的主要问题及解决方案,并提出了封装设备驱动的方法。

关键词:PCI设备驱动程序端口内存中断封装在设计和使用PCI设备时,经常要在PC机的软件中访问和控制硬件设备,但Windows操作系统(包括Windows95/98、Windows NT、Windows 2000为了保证系统的安全性、稳定性和可移植性,对应用程序访问硬件资源加以限制,这就要求设计设备驱动程序以实现PC机的软件对PCI设备的访问。

Windows下的驱动程序不仅仅包括物理设备的驱动程序,也包括为文件系统等非物理设备编写的虚拟设备驱动程序。

为了简化问题,下面只讨论硬件物理设备的驱动程序。

本文将以撏ㄓ酶咚伲校茫勺芟吣勘昴?閿[1]的驱动设计为例,探讨PCI设备的驱动程序设计方案。

我们开发了一套通用的PCI设备驱动程序,它可以完成一般PCI设备驱动所需的功能,可以作为其它PCI设备驱动开发的框架。

1驱动程序的模式和开发工具的选择设备驱动程序是指管理某个外围设备的一段代码。

驱动程序不会独立地存在,而是操作系统的一部分。

通过设备驱动程序,多个进程可以同时使用这些资源,从而可以实现多进程并行运行。

在下文中,将调用设备驱动程序的pc机程序称为用户程序。

Windows 95和Windows NT采用的驱动程序体系不同,所以大多数情况下驱动程序也不能通用。

如果设备需要在Windows 9X/NT下使用,一般至少要设计Windows 9X和Windows NT两个驱动程序版本。

wINDOWS 98 可以兼容Windows 95的驱动程序,同时它又推出一个新的Win32 Drivers Mode (WDM)驱动类型。

Windows 98中有些设备(如USB设备)的驱动程序必须为WDM模式。

PCI-E图像采集系统的WDF驱动程序设计

PCI-E图像采集系统的WDF驱动程序设计
第 1卷 1
第 1 6期
21 0 1年 6月







Vo. 1 No 1 J n 0 1 1 1 .6 u e2 1
l7 — 1 1 ( 0 1 1- 84 0 6 1 8 5 2 1 ) 63 2 -5
S in e T c n lg n g n e ig c e c e h o o y a d En i e r n
中图法分 类号
T 998 ; N 1 .2
文献标志码

随着 计算 机和 信 息 技 术 的 飞 速发 展 , 种 图 像 各 数 据 的传 输 带 宽 需 求 也 迅 速 提 高 。 高 速 率 高 帧 频
dtn 驱 动模 型 。WD ai ) o F提 供 了面 向对 象 和 事 件 驱 动 的驱 动 程序开 发 框 架 , 大 降 低 了驱 动程 序 的开 大 发难度 。这 样 驱 动 工 程 师 就 能 专 注 于 研 发 与 硬 件设 备相关 的驱 动 程 序 , 而无 需 关 注 复 杂 的 操 作 系
统, 开发 出针对 自己设 备 的驱动 程序 。
的图像传输、 海量数据的采集处理 以及实时视频的
传输 处理 都 需 要 更 高 效 更 快 速 的 总线 技 术 作 为 支
撑 , 统 的 P I 线 已不 能满 足这 些 海 量 高 带 宽 数 传 C总 据 的传输 要求 。于是 Itl 合 多 家公 司提 出 了 P I ne联 C E pes( C. 总线 技 术 。P I xrs P I E) C— 新 一代 的总 线 E是 技术 , 以往 P IA P等传 统并 行 总线 的主 要 区别 与 C、G 是它 采 用 了点到 点 的 串行 连 接 方 式 , 每个 设 备 都 有

PCI数据采集卡的WDM驱动程序开发

PCI数据采集卡的WDM驱动程序开发
维普资讯
第2 5卷 第 8期 2 0 年 8月 06





量 技

V0.2 1 5,No 8 . Au .,2 0 g 06
F r in Elcr ncM e s rm e tTe h o o y o eg e to i a u e n c n lg
a e tt ed ie r x lie . d n t s h r ra ee pan d v
Ke wo d :P u ,W DM ,d ie ,d t c u st n y r s CIb s rv r a aa q iii . o
0 引 言
数据采集系统越来越多的应用于工业控制和测 试等领域 , 在某些特定的领域 , 人们对数据采集的要
a alb e v i l.Ac o dn ot ed sg h r ce it so h rv ro aa a q iiin s se ,t ed v l a c r igt h e in c a a t rs i f ed ie fd t c u sto y tm c t h e e- o me tme h d fd vc rv r o h ir s f id ws fm i f o e ai g s se s u i p n t o s o e ie d ie s f r t e M c o o t W n o a l o p r t y tm sn y n g W D M n e id ws2 0 a d t em an p o e so rv rp o r m n eal o eo l c u s r u d rW n o 0 0。 n h i r c s f ie r g a a dd t i c d fal o r ea e d

Windows 2000下PCI设备驱动程序开发

Windows 2000下PCI设备驱动程序开发

用, 微软公 司推 出了全新的 WD M设备驱 动模 式。详细阐述 了借 助工具软件 D i r rs用 Vsa C+ . r eWo , i l +6 0开发 P I v k u C 总线数据采集 卡的 WD 设备驱动程序的过程。 M 关键词 WD M驱 动程序 D i r rs 发工具 r eWok 开 v
Wid w 0 0下 P I 备 驱 动 程 序 开 发 no s 0 2 C 设
钱 宇 红
( 解放军电子工程学 院 安徽 合肥 2 03 ) 30 7


在 Widw no s系统下开发 的硬件 必须编 写相应 的设 备驱 动程序才能正常工作。随着 Widw 00 X no s 0 / P操作系统的广 泛运 2
THE DEVELoP E M NT CIBUS DEⅥ CE DRI oF P VER UNDER I W NDoW S 2 0 0 0
Q a u o g i Y h n n
( l t ncE gneigIstt, e i 3 0 7A hiC i ) Ee r i n i r tueHf 03 ,n u,hn co e n ni e2 a
件工作 的所 有细节 , 始初始化 IO操作 , / 处理 IO操作完成时所 /
境 下对 所开发 的硬件设 备进行控制与访 问的问题 。以往在 D S O
环境 下解 决这些问题 比较简单 , 但是在 Wi o s n w 环境下 , d 为了确
保 系统的安全 ,P C U运行 于保护模 式 , 统一管 理硬 件资源 , 因此 应用程序 代码 不能直接访 问硬件 , 而是要 通过调 用属于 内核 的 设备驱动程序 提供 的各 种服务间接地对硬件资源进行访 问。也 就是说 , Widw 环境下开 发设 备驱动程 序是 目前计算 机硬 在 nos 件设 备开发的人员必须面临 的问题 。 由于设 备驱动程序需要 与操作 系统低层 进行 交互 , 因此不 同的操作 系统 底层 结构有着不同 的设备驱动程序模 型。微软公
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

月.. 叫 . . ,
Bu d ie s v r r
图I M驱动分层和 II WD R〕 处理流程
WD M驱动程序模型是典型的分层结构, 如图 1 所示。这与 Wi o s n w 系统有一致性。对硬件的 d 访问均是通过统一的 I O请求包( P来实现的。 I ) R
一般都会实现一些自 定义的I s R 的。 P 设备中断响应例程处理实时异步事件, 对访间
硬件的性能有较大的影响。WD 驱动程序通过 M
源的分配与释放等, 处理系统发向驱动的 IP R
MT P P _N I O请求包。对于 P I C 设备来说, P P 对 N IP 的处理工作是和 P I Rs C 总线驱动程序 (C. PI
9 X 列,M C 9X系 CPES 0 系 A C 的5 X X 列,YR 的 S
C 7049 Y c94 等等。P T C 接口芯片一般实现:C 配 PI
第 3 卷(05第 6 3 20 ) 期
计算机与数字工程
中断对象, 以及初始化 D A对象。设备的端 M 口 寄存器被系统映射到 I O空间或者内存空间 中, 驱动代码通过访问 这些空间中的地址, 就 访问到实际硬件了。除 了上述的 】P处理, R 驱
第 3 卷(05第 6 3 20) 期
计算机与数字工龚艳军 朱德森 肖 力
( 华中科技大学控制科学与工程系 武汉 407) 304
摘 要
结合自 行开发的P I C 总线的图像采集卡, 讨论了一般P I C 设备驱动程序编写时所面临的主要问题及解决方案, 特别分 析了图像采集卡对驱动程序的额外要求同时提出了解决方案, 并简略的 说明了驱动程序的安装与调用问题。 关键词:C 图像采集卡 WD 设备驱动程序 共享内存 D A PI M M 中图分类号:P 1 T3
IP R 是包含了I O请求信息的数据结构。驱动程序
的 工作都是围绕 IP的处理与完成来进行 的。 R WD 的分层结构适应即插即用的要求, M 我们称之 为即插即用设备栈, 每一层代表一个驱动程序, 整
() 要了解设备产生中断的条件和使用 3中断 中断的数量, 中断提供通信的实时性的可能。 () 4数据传输机制 最常见的数据传输机制是 通过 I / O端口(o )也就是通过 C U的 I/ pr , t P N O T指令进行数据读写。还有一种用于少量数据 U 传输机制的叫MaBx信箱) io( l 机制。 另一种重要的
A s at s o h m g ba f bs e pd u e e w iu t e iu n 乡 e e li s a d t iae r o P I dvl e b o sv , d c s ky e ad v t ro tn o bt c: n r Be e o d C u e o y ls e s h r s e s s s h suo f e t dvom n o gnr P I i dir t n eay c s u t iae t i ba s cl es h eep et f e l dve e h e cl d u aot m g c un o d’ sear u to e l s e a C ec r s, e s il i s b h v p s e a rg r p pi e s f q di rad e r o tn, te bi y mnt i tlet c lg te e. r e n g te l i s ad n e i i e am n ad i f h di r v s i h e uo v s n h rf l a n l l l u s n an o l r r v K y od: , g cp r g d WD dv e e, r m m r, e w rsP I iae t i c , M, i di r sa d o D C m a un a r ec r v h e e y MA
查询 C Rs rTpIeut m e u eye tr 类型的描述符, oc n rp 就
可以获得相关中断信息并保存到设备扩展中去。 D K还提供了响应中断事件的服务例程, R的 D I S 例程。驱动初始化的时候, 把中断处理挂接到 I S R 上, 在驱动卸载时释放。由于中断处理时间宝贵, 所以一般的 I S R只做些中断处理初始化的工作, 进一步的处理将调用一个 D C过程, P 来实现 I S R 没有完成的工作。D A传输对高效数据传输十分 M 有用。一般的P I C 设备有自主的 D MA控制器, 而 不用系统提供的 D MA通道。驱动程序根据实际 需要, 在某些 IP的处理例程中使用 D R MA传输。 另外, 对硬件和内存的访问要考虑到同步问 题, 保证驱动不同的代码不同时访问同一临界资 源, 系统提供了很多机制解决这些问题, 如串行化
32 I . P 设备驱动程序的组成 C WD M驱动程序有着非常规范的编写模式, PI C 设备驱动属于功能驱动程序, 处于即插即用设 备栈的顶层。 系统和应用层对设备的访间都是通 过发送 I O请求包( P到驱动程序来完成的, I ) R 因 此, 驱动程序主要是由一组处理各种各样的 IP R 的例程构成的。图2 展示了 P I C 驱动程序的基本
传输机制是D A用于大批量数据的 M , 传输, C 但P I
规范没有 D , MA 它由碎发机制来完成类似的功能。 () 5设备内存 许多设备自 身带有内存,C PI 设备大多是采用映射的方式映射到 P C系统的内
存空间中去。
个设备栈一起才能实现对 IP的正确响应。( R 参
看上图的 IP R 处理流程) 由此可见, M模型对 WD 硬件访问的实现是多个驱动程序协作的结果。一 般的来说, 系统提供底层的总线驱动程序, 硬件驱 动程序处于驱动栈的顶层, 属于功能驱动程序。 22开发工具的选择 . 开发设备驱动采用的主要开发工具是微软为 设备 开 发者提供 的软件包 Dve ir t ei D v K c re i (D ) D K 。这个软件包包括有关设备开发的文档、 编译需要的头文件和库文件、 调试工具和程序范 例。不同版本的操作系统有不同的D K版本, D 应
3 C 设备驱动程序的一般性设计 PI
31 I . 设备硬件特点 P C 在设计驱动程序之前, 首先要对欲控制的硬件 设备的功能与工作流程进行细致地分析。P I C接 口 卡一般都是一块 P I C 接口芯片, 是主机与板上 硬件相互通信的桥, 市场上有几款, P X的 如 L
() 1驱动的人口 点和初始化模块 驱动程序的入口 点是一个名为Dirn 的 re t vE r y 函 Dirn 里面主要是注册一些驱动程序 数. re t vE r y 的回调例程, P的处理人口 I R 都是从这里查找相应 的处理例程的。应用程序或者系统模块通过该人
C as mb rT 3 l n s u e二 P 1
1 前言
如今, 图像技术已经广泛的应用于各大领域, 如工业, 医药, 纺织, 航天等等。图像技术非常丰 富, 其中获取图像是其重要的一环。各种各样的图 像采集卡已经推出市场。同时由于 P C机有着非 常丰富的图像处理能力, 所以基于P C的P I C 图像 采集卡更是其中的主流。但是由于实际需求的不 同, 要求图 像采集卡具有不同的特点, 市场上的通 用型号不能满足需要, 所以开发自己的图像采集卡
D vl m n o Wi o s vr P I ae pui C r ee p et n w D i fr I g C tr g d o f d re o C m a n a
G n Y u Z u e Xa L og n Ds i i 咧 h e n o ( et o Cn oSi c & E g ei , T Wua 407) D p. ot l ne ni en H S , hn 304 f r c e n rg U
和相应的软件是有现实意义的。
应用软件对 P I C 设备的访间。
本文将以P I C 总线采集卡为例, P I 探讨 C 设
备的驱动程序的一般设计思路, 同时针对图像采集 的特点对驱动程序提出更多的要求。
2 D V M驱动程序开发基础 W
21 M驱动模型简介 . WD 设备驱动程序是指管理某个外围设备的一段 代码。驱动程序不会独立地存在, 而是操作系统的 一部分, 与系统内核同处于内核空间。内核空间的 代码要求很严格, 出错将导致系统的崩溃。Wi n - dw 针对驱动开发不断的推出了新的方案 ,X os VD 驱动程序, T式驱动程序, N 到如今极力推荐的 WD M驱动程序模型。这使得驱动程序的编写越 来越简单化 WD M驱动程序模型, 是微软针对如今硬件的 特点、 推出的全新的驱动程序的开发模式, 增加了 系统对硬件的支持, 简化了 用户驱动程序的开发规 模和难度, 特别适合即插即用设备( P I 驱 如 C) 的
U pr edie pe f r r I r t v
置空间寄存器组, 局部总线控制力 态乃 信寄存器 伏 直 组, 中断控制状态寄存器组和 D MA状态控制寄存 器组。驱动程序最关心的 是硬件的可访问的资源。
一般硬件卡的资源包括:
f nt d vr c i n i e u o r
Lo r l r i e we fl d v r ie r
()C 设备的配置空间寄存器组 每个 P I 1P I C 设备都要实现这个寄存器组, 它是系统自动上电检 测和P P N 技术实现的基础。 () 要了解设置的控制寄存器、 2寄存器 数据 寄存器和状态寄存器, 以及这些寄存器工作的特
性。
. . .叫 . . . . . .月 月. .勺月 . . 叫 ,.. .. . . . .., .一
动也可根据实际需要定 义自己的 D VC EI I E_ O
_ O TO I s C N R L , R 来实 P
图2 M设备驱动程序基本构成 WD
现对硬件更具体的访
问, 实际设备驱动程序
系统相关的模块, P P 有 N 处理模块, 电源管理 模块, 和WMI 模块。这些模块一般的由操作系统 调用, 来实现对设备的管理。一般的用户程序不会 用到这些例程的。P P N 模块管理设备的状态和资
相关文档
最新文档