用driverworks开发PCI驱动程序2
vc++60中开发驱动程序的配置方法
VC++6.0中开发驱动程序的配置方法注意:如果你的电脑中没有安装VC++6.0等软件的话,请先安装 VC++ 6.0 ,再安装DDK,最后安装DriverStudio。
安装顺序一定不要搞错哟。
一、首先创建一个你的驱动工程文件目录。
这个目录下用来放置你的各个驱动工程文件夹。
(比如我在D盘创建了一个D:\PCI9052DVP\PCI9052DRV文件夹作为我的驱动工程文件目录)。
二、然后添加1个用户环境变量,DDKROOT,他的值应该是你所安装DDK的根目录。
(比如在安装DDK时安装到了E:\WINDDK\3790.1830,那么 DDKROOT的值应该为E:\WINDDK\3790.1830)。
添加用户环境变量后电脑需要重启。
如果没有这个用户环境变量,将不会编译任何一个文件。
三、编写一个MakeDrvr.bat批处理文件,如下(可直接copy,不用修改)。
MakeDrvr.bat应该放在工程目录下面D:\PCI9052DVP\PCI9052DRV。
@echo offif "%1"=="" goto usageif "%3"=="" goto usageif not exist %1\bin\setenv.bat goto usagecall %1\bin\setenv %1 %4%2cd %3build -b -w %5 %6 %7 %8 %9goto exit:usageecho usage MakeDrvr DDK_dir Driver_Drive Driver_Dir free/checked [build_options]echo eg MakeDrvr %%DDKROOT%% F: %%WDMWorkshop%% free -cef:exit四、建立一个Makefile工程下面我将要建立一个PCI9052DRV的工程。
Vxworks下PCI设备驱动程序的设计与实现
Vxworks下PCI设备驱动程序的设计与实现摘要:VxWorks在嵌入式军工产品中的应用越来越广泛。
本文详细描述了在VxWorks操作系统下PCI总线驱动程序的设计与实现过程。
关键词:VxWorks PCI驱动中断1.引言VxWorks是一种运行在嵌入式设备上的高性能、可裁减性的嵌入式实时操作系统,是专门为实时嵌入式系统设计开发的操作系统,其良好的可靠性和卓越的实时性被广泛地应用在军事、航空、航天等高精尖技术及实时性要求极高的领域中。
本文详细讨论了工程实践中在VxWorks操作系统下,对基于PCI 总线设备驱动程序的设计与开发过程,具有较强的通用性。
2.系统概要本系统主要包括三种模块的驱动:开关量板驱动,A/D板驱动以及串口板驱动,其结构框图如图2-1所示:图2-1 系统结构框图系统通过这三种模块的驱动程序来完成对系统相应功能的实现。
3.程序设计开发驱动程序的首要任务就是确定访问设备的地址。
VxWorks 系统上电后POST软件会依次扫描系统中所有的PCI设备,并为它们分配相映的地址。
所以针对PC1总线结构设备的驱动程序主要开发步骤即:确定设备的PCI配置信息、确定设备的内部存储器、寄存器基地址及中断号、设备初始化、中断服务程序以及对设备的具体读写操作等。
每个PCI设备具有三种物理空间:存储器空间、1/O空间和配置空间。
配置空间是长度为256字节的一段连续的空间,其中前64字节为Header(头标),其余192字节为设备相关信息,在64字节的Header中,前16字节的定义是确定的,后48字节的具体含义因设备而异。
驱动程序首先要找到所有驱动的板卡,确定对它的访问方式是内存映射还是I/O映射,这样驱动程序就可以直接使用这些地址进行操作。
4.驱动实现VxWorks下PCI设备驱动程序实现的过程可以概括为:调用系统函数查找到相应的设备,然后查询硬件设备上的资源信息,包括内存空间基地址、I/O空间基地址、中断向量等资源,如果有中断需要挂接中断服务程序,最后实现读写操作。
PCI驱动开发手册
Linux2.6内核PCI驱动程序开发一,PCI相关数据结构说明1.1struct pci_driver这个数据结构在文件/linux/pci.h里,这是Linux内核版本2.4之后为新型的PCI设备驱动程序所添加的,其中最主要的是用于识别设备的id_table结构,以及用于检测设备的函数probe( )和卸载设备的函数remove( )。
struct pci_driver {struct list_head node;char *name;const struct pci_device_id *id_table;int (*probe) (struct pci_dev *dev, const struct pci_device_id *id);void (*remove) (struct pci_dev *dev);int (*save_state) (struct pci_dev *dev, u32 state);int (*suspend)(struct pci_dev *dev, u32 state);int (*resume) (struct pci_dev *dev);int (*enable_wake) (struct pci_dev *dev, u32 state, int enable);};为创建一个正确的struct pci_driver 结构, 只有4个字段需要被初始化:name,id_table,probe和remove。
其中id_table初始化可以用到宏PCI_DEVICE(VENDOR_ID,DEVICE_ID),VENDOR_ID 和DEVICE_ID分别为设备和厂商编号,由板卡生产厂家指定。
Static const struct pci_device_id mypci[] ={{PCI_DEVICE(VENDOR_ID,DEVICE_ID)},{}};1.2pci_dev这个数据结构也在文件include/linux/pci.h里,它详细描述了一个PCI设备几乎所有的硬件信息,包括厂商ID、设备ID、各种资源等。
一、如何编写LinuxPCI驱动程序
⼀、如何编写LinuxPCI驱动程序PCI的世界是⼴阔的,充满了(⼤部分令⼈不快的)惊喜。
由于每个CPU体系结构实现不同的芯⽚集,并且PCI设备有不同的需求(“特性”),因此Linux内核中的PCI⽀持并不像⼈们希望的那么简单。
这篇简短的⽂章介绍⽤于PCI设备驱动程序的Linux APIs。
1.1 PCI驱动程序结构PCI驱动程序通过pci_register_driver()在系统中"发现"PCI设备。
事实上,恰恰相反。
当PCI通⽤代码发现⼀个新设备时,具有匹配“描述”的驱动程序将被通知。
详情如下。
pci_register_driver()将设备的⼤部分探测留给PCI层,并⽀持在线插⼊/删除设备[因此在单个驱动程序中⽀持热插拔PCI、CardBus和Express-Card]。
pci_register_driver()调⽤需要传⼊⼀个函数指针表,从⽽指⽰驱动程序的更⾼⼀级结构体。
⼀旦驱动程序知道了⼀个PCI设备并获得了所有权,驱动程序通常需要执⾏以下初始化:启⽤设备请求MMIO / IOP资源设置DMA掩码⼤⼩(⽤于⼀致性DMA和流式DMA)分配和初始化共享控制数据(pci_allocate_coherent())访问设备配置空间(如果需要)注册IRQ处理程序(request_irq())初始化non-PCI(即LAN/SCSI/等芯⽚部分)启⽤DMA /处理引擎当使⽤设备完成时,可能需要卸载模块,驱动程序需要采取以下步骤:禁⽌设备产⽣irq释放IRQ (free_irq())停⽌所有DMA活动释放DMA缓冲区(包括流式DMA和⼀致性DMA)从其他⼦系统注销(例如scsi或netdev)释放MMIO / IOP资源禁⽤该设备下⾯⼏节将介绍这些主题中的⼤部分。
其余部分请查看LDD3或<linux/pci.h>。
如果PCI⼦系统没有配置(没有设置CONFIG_PCI),下⾯描述的⼤多数PCI函数都被定义为内联函数,要么完全空,要么只是返回⼀个适当的错误代码,以避免在驱动程序中出现⼤量ifdefs。
Windows平台下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。
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 件设 备开发的人员必须面临 的问题 。 由于设 备驱动程序需要 与操作 系统低层 进行 交互 , 因此不 同的操作 系统 底层 结构有着不同 的设备驱动程序模 型。微软公
利用WinDriver开发PCI设备驱动程序
P) 04Mo E L N ) 195_ D — O G 【
EdI n f Px 0 4 R a L n = d t l9 5 ed o g aa
E d I n f E u nd S b
WD C rR gse0, ad e i r 负责选定设备 , t 且对该设备的项 目注册 和资源分配。具体完成三个功 能:1映射设备的物理 空间,使之 () 能够被杨 模 式的进程和用户模式的应用程序所访 问; ) ( 检查所 2 需存储器或 I O 资源先前是否被注册过 , / 以防设备冲突。 所有 操 作 结 束 后 , 关 闭 程 序 要 完 成 对 设 备 释 放 , 在
F nc i n P x9 5 Re dLo ( u to l 0 4 a ng hPi 9 5 As x 0 4
Px I - ND E,ad S aeA nee ,d fe sL n ) 】9 4 HA L d rp c s( P x 0 4完戚 ,其中调用 了下面两个 函数 l 9 5 一 o eh l 9 5 )
WD
,
_
对上述 函数稍加修改可完成对字节和单字的读写。 在程序中
通过me p 函数来访 问内存地址 , l9 5 _ e d i B ok mc y 在Px 04 R a Wr e lc t
—
C rUn ei e , WD— ad gs r0 相对应 ad rgs r0 与 t C rRei e t
删 除注册 的项 目并释放资源。
WD
—
C oe0 , WD OEn 0 相对应 , ls 与 _!  ̄ 删除驱动程序的
用DriverWorks开发PCI设备的WDM驱动程序
【 (X e一 B t R m ii (= ) i p fr> ye e a n ) =0 f s n g
p fr > e iae ; X e- T r n t0 m
m
—
/ 查传输 对象 中是否还有 要传输 的字节数 目 / 检
f/ , 如果所 有 的数 据传输 已完成 ,则 调用T r nt( e mia ) e 函数 ,终止 D 传输 ,释放适 配器 资源 MA
d )设 置D 传 输相关 的控制 寄存器 ,并 启动D A MA M 传输
v i odDMAD vc : trDMA( L G P d rs, L G NB ts e ie: at S U ON A d es U ON ye )
f, 面几条语 句设置 D 控 制寄存器 ,并启动 D 传 输 , 下 MA MA m IP r ag 0ot( o ot ne . dMWT ,) R u C0; / / 写传输 字节数 清零 ,MWT ( 控写传输 记数 寄存器 ) C主 m IP r a g0ot( T S , x < l) o ot ne . dI C R( l< 4) R u N 0 ; / 能写传输完 中断 ,I T S ( / 使 N C R 中断控 制状态 寄存器)
b )初始化该 D 传 输控 制对象 MA Iia 例程所做 的工作 就是创建 适配器 资源( 配器对象 、映射 寄存 器) nt t ie 适 ,初始化传输 记录 ,并调用 用户定义 的回调 函数启 动第一次 分割传输 。
s at =m t us
—
C r nT a se- I iaeI l ,rmDe ie o moyL n T ( D R a y) ur t rn fr > nt t( Md0 F o e i . vc T Me r,ik oOn ma e d ) ;
2016-2017年利用WinDriver开发PCI设备驱动程序(总结)
摘要:WinDriver是一套PCI驱动程序开发包。
它改变了传统驱动程序开发的方法与思路,极在地简化了驱动程序的编制;同时,又没有牺牲驱动程序的性能,是一套高效、快捷的PCI驱动程序开发软件包。
特别适合专业硬件人员的使用。
关键词:设备驱动程序 WinDriver PCIWinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发。
作者在实际的项目中采用了WinDr iver来开发设备驱动程序,取得了相当好的运行效果。
从目前国内的资料上来看,大多数设计人员还是在用DDK、Wtools开发设备驱动程序,因而作者觉得有必要向大家介绍与推荐这个软件。
WinDriver是一套设备驱动程序开发组件,它的目的就是方便Window s程序员快速开发出PCI/ISA设备的Wind ow s驱动程序(目前最新的版本V4.32还支持PCMCIA、USB设备的驱动程序的开发,并且除了支持Window s 9X/NT系统外,还有支持Unix、Window s CE的版本推出)。
利用WinDr iver开发设备驱动程序,不需要熟悉操作系统的内核,整个驱动程序中的所有函数都是工作在用户态下的,通过与WinDr iver的.Vxd或者.Sys文件交互来达到驱动硬件的目的。
由于是一个用户态程序,效率的高低也就成了人们选择WinDriver时关心的一个问题。
大量实践数据表明,WinDriver并没有通过牺牲系统性能来换取驱动程序的快速开发,的确是一个“像开发用户态程序那样简单,像核心态程序那样高效”[1]的开发工具。
图1是WinDriver的体系结构图。
1 WinDriver主要特征·提供了从用户层访问硬件的简单方法;·能够方便地将性能要求特别苛刻的部分通过Windr iver提供的A PI插入到核心态模式运行,提高执行效率;·对主流PCI接口芯片(A MCC、PLX、V3系列)提供了很好的支持;·可以利用常见的软件开发平台(Visual C++、Borland C++、VB4、Java、Delphi);·支持I/O、DMA、中断处理,支持PCI、ISA、EISA设备的开发;·无需DDK以及核心态程序开发的经验。
WinDriver在开发基于PLX9056芯片的PCI设备驱动程序中的应用
WinDriver 在开发基于PL X9056芯片的PCI 设备驱动程序中的应用王 磊,鲁新平,李吉成(国防科技大学A TR 国家重点实验室 湖南长沙 410073)摘 要:随着图像处理技术的发展,对图像数据的传输速率要求越来越高,PCI 总线就是一种具有高速传输速率的高性能的局部总线。
在设计自行开发的基于PCI 总线的数据传输设备时,需要开发相应的设备驱动程序。
通过对目前使用较广泛的驱动开发工具DD K 、DriverStudio 和WinDriver 的比较,WinDriver 具有适用性广、性能优良及稳定等优点。
介绍了WinDriver 的主要特点、结构和开发步骤。
结合实践中开发的数据接收PCI 插卡介绍了利用WinDriver 开发PCI 设备驱动程序的方法。
关键词:WinDriver ;PCI 局部总线;设备驱动;A PI中图分类号:TP391 文献标识码:B 文章编号:1004373X (2006)1807703Application of WinDriver in Developing PCI Device Driver B ased on PL X 9056WAN G Lei ,L U Xinping ,L I Jicheng(A TR State Key Lab ,National University of Defence Technology ,Changsha ,410073,China )Abstract :Handle the technical development along with the image disposing ,more and more high request to the baud rateof the image data.PCI bus is a kind of local bus of the high performance which has the high speed baud rate.The relevant de 2vice driver need to be developed in the designing of data transmission devices ,which is based on PCI local paring with DD K ,DriverStudio and WinDriver ,which used extensively currently in developing driver ,the WinDriver has the applicability widely ,the f unction is good and stable.This paper introduces the WinDriver main characteristics ,structure and the develop 2ment steps.According to a data incepting PCI device developed in practice ,a method of developing PCI device driver using WinDriver is introduced.K eywords :WinDriver ;PCI local bus ;device driver ;A PI收稿日期:200605111 引 言PCI 总线是一种高性能、与CPU 无关的32位地址数据复用的总线,他支持突发传输、即插即用、电源管理等功能,不但能满足现在的应用需要,而且能够适用未来的需求。
基于NI-VISA的PCI板卡驱动程序开发
基于NI-VISA的PCI板卡驱动程序开发张艳华科0引言驱动程序是计算机与设备通讯的特殊程序,操作系统只有通过这个接口,才能控制硬件设备的工作并实时、准确的将信息传递给主机。
PCI总线是PC机广泛采用的外设总线架构,在构建基于PC的信息处理系统中,常常被选择为数据传输通道。
传统的PCI设备驱动程序开发平台有WDM、VC、Linux等,但在这种平台上进行驱动程序的开发,需要设计人员熟知操作系统的内核结构,且操作起来比较繁琐,对缺少驱动开发经验者显得比较困难。
本文介绍一种简单、快速的PCI接口驱动程序开发方法。
使用NI-VISA的Driver Wizard 向导可以方便的生成具有产生中断功能的驱动程序,在NI Labwindows/CVI环境下,可对中断事件进行检测和处理。
1基于NI-VISA的驱动程序1.1NI-VISA概述NI-VISA(Virtual Instrument Software Architecture,以下简称为"VISA")是美国国家仪器NI(National1nstrLlrnent)公司开发的一种用来与各种仪器总线进行通信的高级应用编程接口。
VISA总线I/0软件是一个综合软件包,它不受平台、总线和环境的限制,可用来对USB、GPIB、串口、VXI、PXI和以太网系统进行配置、编程和调试。
VISA是虚拟仪器系统I/O接口软件,基于自底向上结构模型的VISA创造了一个统一形式的I/O控制函数集,并且对于初学者来说这些函数集是简单易用的。
1.2基于VISA的驱动程序开发架构“驱动程序”通常是指安装于操作系统上,供应用程序调用以操作硬件设备的一组函数。
驱动程序提供面向应用程序的API接口函数,把应用程序对API函数的调用翻译成硬件可以理解的底层寄存器操作。
驱动程序封装了具体的硬件操作,软件设计者不需要了解具体的操作细节就可以开发基于硬件的应用程序。
基于VISA的驱动又称为“仪器驱动”,这是由于VISA广泛应用于虚拟仪器的开发。
利用WinDriver开发PCI设备驱动程序
《自动化技术与应用》2007年第26卷第11期Techniques of Automation & Applications | 119 经验交流Technical Communications1 引言在保护模式的操作系统Windows下开发程序是在应用程序级,即“用户模式”下进行,不能直接访问硬件。
而通常的可视化开发工具(VC、VB等)都是工作在“用户模式”下的。
在这样的系统中,硬件的访问只限于操作系统通过设备驱动程序访问。
设备驱动程序开发选用WinDriver驱动程序开发工具来实现。
WinDriver是一套设备驱动程序开发组件,通过WinDriver提供的函数库来与内核连接,开发设备驱动程序,实现与Win-dows 底层的通信。
2 VB 设计驱动程序利用WinDriver的开发向导WinDriver6.23,生成基于VB下的框架程序,程序主要有***_diag.bas、 ***_lib.bas 、windrvr.bas等文件。
这些文件包括系统内部所用数据结构的定义、访问硬件的函数库,可实现对PCI设备的操作。
***_diag.bas类模块.是该设备诊断程序 ,在程序中使用了文件***_lib.bas中的库函数 ,可以对设备进行实际的诊断操作。
***_lib.bas类模块.是一个库文件 ,其中定义了访问所有收稿日期:2007-04-23利用WinDriver 开发PCI 设备驱动程序冯 莉, 叶 超(中国工程物理研究院流体物理研究所,四川 绵阳 621900)摘 要: WinDriver6.23提供了基于VB开发PCI设备驱动程序的函数库,利用这些库函数 ,可以很方便地在VB开发环境下以用户模式编写PCI设备驱动程序 ,扩充VB功能 ,极大地节省开发时间。
文中阐述用VB调用WinDriver的库函数实现PCI设备驱动程序开发的过程,并给出了关键函数的解释。
关键词: WinDriver; 设备驱动程序; VB中图分类号:TP311.52 文献标识码:B 文章编号:1003-7241(2007)11-0119-03Development of the PCI Device Driver by Using WinDriverFENG Li, YE Chao(Institute of Fluid Physics, CAEP Mianyang 621900 china)Abstract: WinDriver6.23 provides Dll of PCI device drivers in VB. Using the Dll, we can easily develop PCI device drivers withuser’s mode in VB and expand VB functions. The paper presents the development steps of PCI device drivers based on the Dll in VB, and gives explanation of the key functions.Keyword: WinDriver; device drivers ;VBPCI设备资源所需的库函数 ,包括存储器读写、I/O 读写、配置寄存器操作、EEPROM 操作、中断处理、DMA 处理等。
PCI传输卡的WDM驱动程序设计.
PCI传输卡的WDM驱动程序设计2008-01-20摘要:介绍了在Windows2000操作系统下,使用DriverStudio软件编写符合WDM模式的PCI数据传输卡驱动程序,并详细分析了一个应用实例。
关键词:PCI总线设备驱动程序 WDM模式 DriverStudioPCI总线规范是为提高微机总线的数据传输速度而制定的一种局部总线标准。
在设计自行开发的基于PCI总线的数据传输设备时,需要开发相应的`设备驱动程序。
通常开发PCI设备驱动程序有多种模式,在Windows2000环境下,主要采用WDM模式。
本文针对自行开发的基于PCI总线的CCD视频信号传输控制卡,编写了符合WDM模式的驱动程序。
1WDM模式驱动程序1.1WDM模式(WindowsDriverModel)Windows2000对驱动程序的编写不再基于以往的Win3.x和Win9x下的VxD(虚拟设备驱动程序)结构,而是基于一种新的驱动模型――WDM(WindowsDriverModel)。
WDM为Windows98/2000/XP操作系统的设备驱动程序的设计提供了统一的框架。
WDM来源于WindowsNT的分层32位设备驱动程序模型(layered32-bitdevicedrivermodel)。
它支持更多的特性,如即插即用(PnP)、电源管理、WMI和NT事件。
1.2设备驱动程序设备驱动程序是操作系统的一个组成部分,它由I/O管理器(I/OManager)管理和调动。
Windows2000操作系统下的I/O管理器功能描述如图1所示。
I/O管理器每收到一个来自用户应用程序的请求就创建一个I/O请求包(IRP)的数据结构,并将其作为参数传递给驱动程序。
驱动程序通过识别IRP中的物理设备对象(PDO)来区别是发送给哪一个设备。
IRP结构中存放请求的类型、用户缓冲区的首地址、用户请求数据的长度等信息。
驱动程序处理完这个请求后,在该结构中填入处理结果的有关信息,调用IoCompleteRequest将其返回给I/O管理器,用户应用程序的请求随即返回。
PCI 在WIN98NT 环境下驱动程序的开发
PCI在WIN98/NT环境下驱动程序的开发蔡 勇摘要: 本文简要介绍了编写PCI驱动程序的一般过程、Windows环境下驱动程序的种类和现在比较流行的几种PCI驱动程序的开发环境,并详细介绍了PCI在WIN98/NT环境下驱动程序的开发方法。
关键词:驱动程序 PCI VtoolsD DDK一.概述随着IT行业日新月异的飞速发展,PCI总线以其不可比拟的优势逐渐取代ISA总线成为占主导地位的总线类型,ISA总线逐渐会完成其历史使命而退出历史舞台。
在工业控制及军品测试领域中,市场上现有的PCI板卡类型还不能满足许多应用的要求。
例如ARINC-429总线MIL-1553B总线等的PCI板卡就要做硬件专门设计,而对应驱动程序的开发就成为使用这些板卡的关键之一。
本文简要介绍了编写PCI驱动程序的一般过程、Windows环境下驱动程序的种类和现在比较流行的几种PCI驱动程序的开发环境,并详细介绍了PCI在WIN98/NT环境下驱动程序的开发方法。
二.PCI驱动程序开发的一般过程从广义上来说,设备驱动程序就是控制硬件设备的一组函数。
PCI驱动程序的开发,就是取得PCI板卡所占用的各种资源(内存、端口、中断和DMA等),并提供给用户一条可以访问这些资源的途径。
对于所有的PCI板卡,基本上都可以用下面的方法来开发驱动程序。
2.1取得PCI板卡所占用的资源。
无论是ISA板卡还是PCI板卡,用户要使用它,就必须能访问它所占用的各种资源。
对于ISA板卡,它所占用的资源是定死的,可以直接访问;而PCI板卡是即插即用的,它占用的所有资源都是由系统分配的,要想访问这些资源,就必须先取得这些资源。
2.2建立起上层应用程序和底层驱动程序之间的映射关系。
因为在WIN98和NT等操作系统下,各种资源的访问对用户来讲是透明的,用户不能在上层应用程序里直接访问硬件资源,只能靠底层驱动程序来访问它。
因此用户要实现对板卡的控制,就必须在应用程序和底层驱动程序之间架起一座桥梁,来实现应用程序和驱动程序之间的联系。
DriverWorks开发PCI驱动流程
DriverWorks开发PCI驱动流程Dragon2008(yachong@)第一步 DriverWorks开发环境的建立我们用NuMega DriverStudio开发WDM驱动程序,它的环境建立步骤如下:1、安装VC6.0;2、安装相应操作系统的DDK(如2000DDK、98DDK等);3、安装NuMega DriverStudio;4、运行NuMega DriverStudio下Tools下的Setup DDK and Start MSVC程序;或自己在VC IDE中手动设置BASEDIR和CPU等环境变量。
5、用VC6.0打开NuMega\Driver Studio\DriverWorks\Source\VdwLibs.dsw工程;6、设置VC6.0的Compile\Config的配置为WDM Free或Checked;7、编译VdwLibs.dsw库建立DriverWork的库文件,对Free 和Checked都要编译;8、可以开始WDM驱动程序的开发了;第二步用DriverWorks生成驱动程序框架----以胜西S5933PCI卡为例步骤1:从程序组中选择或从VC6.0的主菜单DriverStudio中选择Driver Wizard菜单项,便会弹出DriverWorks NT/WDM驱动程序的基本框架生成向导,见下图:图2—1步骤1步骤2:在Project下填入工程名,如SX5933。
在Location选择工程文件存放的目录,再点Next进入下一个对话框。
选择WDM方式,再点Next进入硬件总线选择对话框。
图2—2步骤2步骤3:在Select Hardware Bus单选框中选择PCI,并在下面的栏目中填入PCI Vendor ID(如10EB),PCI Device ID(如8376)。
这两项必须与你要访问的PCI设备的VID和DID一致。
PCI Sub system ID 和PCI Revision ID可以不填。
利用Windriver开发PCI总线设备驱动
发传输及本地 总线 和 P I C 总线 之 间的异步操 作 ; 支持 主模 式、 从模式 、 MA传输方式 , D 因其强 大 的功能可应 用于适 配
卡和嵌入式系统 中。P I0 4是一 种性 比高的 P I C 95 C 桥路 芯
调试时需要 反复 地加 载驱 动程 序 , 因此使 用起 来也 比较 繁 琐 ; nre Widix是美国 KR 1 v F h公 司推出的一种 P I 线快 C 总
速开发工具 , 以上两种开发工具相 比, 与 它具有以下的特点 :
片 , P I0 0 P I0 0等性能更 优越 。 比 C 98 、 9 5 C ・ 在使用 l_h 编译环境开发 P I 动中 , 采用 了第  ̄l i p C 驱 我们 三方开发工 具 Wi r e, 设计好 的电路板 插入 到主机 的 n i r将 Dv C 插槽 中, 动 WiD i r就可 以在其 指示下生成 一个采 PI 启 n r e, v 集卡的 A I P 的驱动框架 , 中提供 了进行 可 以进行 PO方 其 I 式读 写的函数 ed i Bok ) R aWr e l ( 函数对 9 5 片内部的寄 t c 0 4芯
摘 要: 传统 的在 wn o s idw 环境下开发 的 P I C 总线设备的驱动 , 用的大部分是 C或 C十十语 言。这里介绍利 使
用 K F eh 司的推 出的 P I R Te 公 C 驱动程序开发 包Widi r n r e 以及 P X公 司生产 的 P I v L C 桥接芯 片 9 5 , 0 4 可以在 dlh e i p
存 器进行读写。利用 Wi r e 编写 的 95 n ir Dv 0 4芯片的整 个驱
1 支持 多种软 件开发平 台: ) 可以在常见 的 M c s t i io fV . ro
PCI9052驱动程序的开发
PCI9052驱动程序的开发来源: /bcsl作者:luckw 跟贴2 条进入论坛摘要: 本文引见了编写PCI 驱动程序的一般过程、驱动程序的种类和几种PCI 驱动程序的开发环境,并细致引见了PCI 在WIN98/NT 环境下驱动程序的开发方法。
关键词:驱动程序,PCI,VtoolsD0 引言本文结合实例简要引见了编写PCI 驱动程序的一般过程和PCI驱动程序的特点,并细致引见了在WIN98 环境下开发PCI9052驱动程序的方法。
1 PCI 驱动程序开发的一般过程从广义上来说,设备驱动程序就是控制硬件设备的一组函数。
PCI 驱动程序的开发,就是取得PCI 板卡所占用的各种资源(内存、端口、中断和DMA 等),并提供给用户一条能够访问这些资源的途径。
对于所有的PCI 板卡,基本上都能够用下面的方法来开发驱动程序。
1.1 取得PCI 板卡所占用的资源无论是ISA 板卡还是PCI 板卡,用户要使用它,就必须能访问它所占用的各种资源。
对于ISA 板卡,它所占用的资源是定死的,能够间接访问;而PCI 板卡是即插即用的,它占用的所有资源都是由系统分配的,要想访问这些资源,就必须先取得这些资源。
1.2 建立起上层应用程序和底层驱动程序之间的映射关系因为在WIN98 /NT 等系统下,各种资源的访问对用户来讲是通明的,用户不能在上层应用程序里间接访问硬件资源,只能靠底层驱动程序来访问它。
因而用户要实现对板卡的控制,就必须在应用程序和底层驱动程序之间架起一座桥梁,来实现应用程序和驱动程序之间的联系。
通过这个桥梁,用户能够实现参数的传送和硬件资源的访问。
来源:/bc1.3 通过底层驱动程序实现对硬件资源的访问用户的最终目的是实现对硬件资源的间接访问,而在上层应用程序中根本就做不到这一点。
万幸的是,在开发驱动程序的环境中有能够间接访问各个资源的函数,用户能够在驱动程序中实现对所需资源的访问。
2 PCI驱动程序的特点在设想驱动程序之前,首先要对欲控制的硬件设备进行细致地分析,更需要细致了解硬件设备的特性。
基于PCI总线的D-A数据输出板驱动程序的开发
PCI9052芯片的配置寄存器分为PCI配置寄存器和局部配置寄存器,二者都可以由PCI总线和串行EEPROM访问。在PCI配置寄存器中的设备ID、制造商ID、版本号、首区类代码、类别代码、指令寄存器和状态寄存器等寄存器在所有的PCI设备中都必须实现,具体设置可参考相关资料。PCI配置寄存器提供有6个基地址寄存器(BASE0~BASE5)这些基地址都是系统中的物理地址,其中BASE0和BASE1是用来访问局部配置寄存器的基地址,BASE0是映射到内存的基地址,BASE1是映射到I/O的基地址,可用于通过内存和I/O来访问局部配置寄存器。这两个基地址可固定用于PCI9052芯片的寄存器操作。通过BASE2~BASE5四个空间最多可以访问局部端所接的4个芯片,实现4个局部地址空间(局部空间0~3)的PCI总线访问。
安装DriveStudio3.1(若为XP系统,必须安装3.2以上的版本)。
接下来,编译库文件。用VC打开库文件Program Files\Compuware\ DriverStudio\DriverWorks\source\ Vdw Libs.dsw,选择Build|Batch Build(编译|批构件),从中选择需要编译的配置(32位机选“select all i386”)。若编译无错误程序框架
从开始菜单启动Driver Wizards,选择DriverWorks Project,开始创建一个驱动程序框架。
● 填写驱动程序名称,单击next; ● 选择驱动程序类型,这里选择WDM Driver驱动程序,单击next; ● 选择WDM Function Driver,单击next; ● 选择总线类型,这里选择pci总线。填写pci Vendor ID和pci Device ID,一般可以从硬件的使用说明书中看到,没有的话可以用pciview软件得到。后两项pci Subsystem ID和pci Revision ID可以不填。单击next; ● 选择设备类的名称和文件类名称,默认即可,单击next; ● 选择需要的功能函数,本设计需要I/O读写,必须添加I/O通信函数。添加读函数PCI_DA_IOCTL_Read()和写函数PCI_DA_IOCTL_Write(),单击next; ● 选择队列方式,数据量大时选择排队,点击Next; ● 添加资源。资源分为i/o资源和内存资源。添加资源时必须对应硬件相应得基地址寄存器。选择Direct存取方式,单击next; ● 为i/o通信方式添加控制代码,若不需要i/o通信,可不添加,单击next;单击Finish,完成驱动程序框架,并自动启动vc。
用DriverStudio开发PCI总线设备驱动程序
用DriverStudio开发PCI总线设备驱动程序
杨波;柳征;姜文利
【期刊名称】《微计算机信息》
【年(卷),期】2007(023)025
【摘要】以PCI9656为例,介绍了利用DriverStudio开发PCI设备驱动程序的方法步骤,并实现了具有I/O和内存读写、中断处理和DMA传输功能的驱动程序.【总页数】3页(P279-281)
【作者】杨波;柳征;姜文利
【作者单位】410073,湖南长沙,国防科技大学电子科学与工程学院;410073,湖南长沙,国防科技大学电子科学与工程学院;410073,湖南长沙,国防科技大学电子科学与工程学院
【正文语种】中文
【中图分类】TP311
【相关文献】
1.基于WinDriver的PCI数据采集卡的设备驱动程序开发 [J], 张思博;董春;李宗帅
2.基于WinDriver的PCI数据采集卡设备驱动程序的设计 [J], 李宗帅;董春;刘颜
3.WinDriver在开发基于PLX9056芯片的PCI设备驱动程序中的应用 [J], 王磊;鲁新平;李吉成
4.利用WinDriver开发PCI设备驱动程序 [J], 冯莉;叶超
5.用DriverStudio开发PCI设备驱动程序 [J], 郑伟绩
因版权原因,仅展示原文概要,查看原文内容请购买。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2007-04-26 12:53
用driverworks 开发PCI 驱动程序
梦想工作室
个性、自由、追求
用driverworks 开发PCI 驱动程序PCI 卡WDM 驱动程序的设计与开发 (技术文档) dragonshx 2003-3-4
一. 开发环境的安装与设置。
二. 驱动程序框架的建立
三. 在WDM 驱动程序中I/0读写,内存读写,DMA 控制以及中断处理的具体实现。
四. Inf 文件的编写及应注意的几点; 五. 如何调试驱动程序
当前PCI 类型的卡在数据采集,数据处理以及其他如声卡,显卡方面的应用已经十分广泛。
而且由于PCI 桥芯片功能的不断完善,开发PCI 类型卡已经变的比较方便。
所以当前很多基于微机操作的工程开发项目都使用了PCI 类型的卡。
WDM 类型驱动程序是微软最新推出的驱动程序标准,它与操作系统的协作变得更加友好,执行效率也更高。
而且微软最新的操作系统如winxp 和win2000也只兼容这种驱动程序。
Driverstudio 是Numega 公司推出的一套开发驱动程序的完整工具包,几乎包含了开发驱动所用到的大部分工具,它不但可以用来开发虚拟设备驱动(vxd )而且也可以开发WDM(Windows Driver Model)驱动,并且还包含了一个用于调试设备驱动的
相册广场游戏
工具SOFTICE。
一.开发环境的安装与设置
目前在国内很多网站都可以下载Driverstudio,如驱动开发网(网址)等,见到的已经有2.7版本的。
软件的安装比较简单,只要按照提示一步一步进行操作即可,只是其中在安装SOFTICE时需要指出显卡的类型,如果不太清楚,一般情况下选择通用的即可,点击测试按钮,测试成功就可以继续向下安装。
用Driverstudio开发驱动程序需要其他另外两个工具软件的支持――visual c++ 和win2000 DDK。
最好是在安装Driverstudio之前先进行这两个软件的安装,因为在安装Driverstudio过程中需要指出DDK的安装位置。
安装完成以后进入\\\\NnMega\\driverstudio\\DriverWorks\\lib\\i386目录下查看,在checked和free子目录下没有任何链接库文件,在驱动程序开发中用到的一些库文件需要在安装完成后由开发人员自己编译链接形成。
具体是进入\\\\NnMega\\driver studio\\DriverWorks\\Source目录,利用vc打开VdwLibs.dsw工程文件,选择菜单build\\batch build,在弹出的对话框中,将四项全部选中,然后进行编译链接,所需要的链接库文件就已形成。
另外,在vc环境中编译和链接驱动程序工程文件时需要设置两个环境变量,点击菜单driverstudio\\driver build settings。
需要设置的项包括BASEDIR和CPU,点击edit按钮可对这两项进行设置,将BASEDIR设为DDK安装的根目录,CPU设为i386。
二.驱动程序框架的形成
利用driverstudio生成驱动程序框架和利用vc中wizard生成应用程序框架类似,只要进行必要的选择即可。
对于PCI卡驱动程序,在第三步选择硬件总线时选择PCI,填写所开发硬件卡的开发商ID和产品ID这些一般是在硬件开发时由开发人员自己设定的。
当卡插入计算机后,操作系统会通过扫描总线来检测目前计算机安装的所有总线硬件设备,并可以读出硬件的开发商ID和产品ID,通过这两个标志操作系统选择调用合适的驱动程序。
另外,在这一步中的子系统ID和修订ID可以不用填写。
在第五步中可以选择驱动程序需要具备的一些主要功能,如读、写以及其他的一些设备控制功能。
在步骤8中,可以根据pci卡需要利用的资源指定驱动程序添加的变量,如,在笔者开发的硬件卡上,共占用了两个I/O空间和两个内存空间,并可执行D MA和硬件中断,所以在该步骤的resource标签下添加两个I/O端口读取变量和两个内存读取变量,一个DMA操作变量和一个中断处理变量。
在Interface标签下,可以选择应用程序和驱动程序接口的方式:符号链接和interface接口方式。
这主要影响应用程序在打开设备获得句柄时CreateFile()函数中的名称,假设使用符号链接的方式,设备名称为MyDevice,则在Cre ateFile()函数中第一个参数为“\\\\\\\\.\\\\MyDevice”;如果使用interface接口方式,则在打开设备时首先需要定义一个Cdev iceInterfaceClass类的对象,构造函数中包含要打开设备的GUID,然后定义一个CdeviceInterface类的对象,构造函数中包含前面CdeviceInterfaceClass类的对象,然后在CreateFile()函数中通过CdeviceInterface类的对象打开设备。
在步骤九中,可以添加许多通过对设备进行实际控制的函数,例如打开设备后可以对设备进行复位,启动,清空卡上内存等操作。
后
分享到:
浏览(125)
评论(3)
转载
四. Inf 文件的编写及应注意的几点;
要实现PCI 卡的即插即用,则必须编写驱动程序的安装信息文件。
最简便的方法是利用windriver 对该PCI 卡生成inf 文件,然后打开文件将其中所有“wdpnp.sys”字符串替换为自己编写的驱动程序名,并将vendorID 和deviceID 换成所设计卡对应的ID 即可。
此时的inf 文件就已经可以使用了,至于其中更具体的信息,请参考相关的文献说明,这里就不详细说明了。
五. 如何调试驱动程序
对于驱动程序的调试,最好采用driverstudio 提供的SOFTICE 工具,它的功能比较强大,当驱动程序安装以后,对SOFTICE 进行设置,首先需要将启动模式设为系统引导(boot ),因为驱动程序在操作系统启动时就已经加载了,所以若在系统启动后再启动SOFTICE 将无法跟踪驱动程序。
在symbol loder 程序中,选择edit\\initial softice settings 菜单,在对话框的symbol 标签下添加softice 在初始化时需要装载的符号文件,在打开要调试的模块后,选择module\\settings 菜单,设置默认的源文件搜索路径,然后选择module\\load 菜单,重新装载模块就可对驱动进行跟踪调试了。
利用softice 调试时一些主要的命令包括:Ctrl +D 调出softice
File filename 调出要调试的文件 Ss ‘ ’查找单引号中的字符串
Alt +c 在命令窗口和代码窗口间切换光标 F9 设置取消断点 F10 单步调试
#技术-资料你可能也喜欢。