高分求解用WinDriver开发设备驱动程序问题,如果能解决问题,还可加分(分值填错了,应为500分)!!!! (100分)

  • 主题发起人 主题发起人 lw86
  • 开始时间 开始时间
L

lw86

Unregistered / Unconfirmed
GUEST, unregistred user!
目前我正在开发一个设备驱动程序,使用的开发工具是WinDriver 5.0,但遇到了许多
问题,请高手帮忙。
1.用WinDriver的向导只能生成用户程序,如何才能生成设备驱动程序?
2.用户程序如何响应驱动程序接收的中断?
如果那位高手曾使用过WinDriver开发过设备驱动程序,有此方面的经验,或能提供有
此工具开发驱动程序的资料网站(其官方网站除外),请不吝赐教。
本人E-Mail:lw86@km169.net
 
对不起,由于操作失误,将分值搞错了,应为500分,决不食言!!!!
 
请各位高手多多指教!!
up有分!!!!!
 
这个软件那有下载。。。
 
这个网站有你要找的东西:
http://www.driverdevelop.com
上那儿去问问吧。
---------------------------------------------------
WinDriver开发的驱动程序的分发

驱动开发网(http://www.driverdevelop.com)翻译(转载必须保留此行)

一、 得到一个合法的license
二、 Windows9x/me/NT/2000


第一部分:得到一个合法的license
如果你决定分发你开发的驱动程序,请获取一个合法的license,如果只是为了测试它,请
不要理会此步。(注:分发未经授权的程序会引来很大的麻烦)

第二部分:怎样在Windows 9x/Me/NT/2k中分发你的驱动
拷贝所需的vxd和sys文件到需要安装驱动的计算机
在你的安装脚本中,你必须拷贝下面的文件到你要安装驱动的计算机:

1. 对于Windows NT/2000/98/ME: 需要拷贝WINDRVR.SYS 文件到 C:/WINNT/SYSTEM32
/DRIVERS (如果windows目录不是C:/wint的话就改变)

注意: WINDRVR.SYS 可以用于 98/ME。由于 98/ME的限制, 这个文件不能被动态加载,必
须要重启机器. 如果重启机器对你来说不适宜,那可以用WINDRVR.VXD 代替(仅限于
windows 9x/me)。



2. 对于 Windows 95操作系统来说: 拷贝 WINDRVR.VXD文件到
C:/WIN95/SYSTEM/VMM32 目录。

注意: 分发你的程序时, 注意不要用旧版的覆盖新版的windrvr.sys(位于windows/system32/drivers 目录)或者windrvr.vxd (位于windows/system/vmm32目录)。 Y 你需要配置你的Install Shield 安装程序(如果你用Install Shield) 或你的 .INF 文件。比如让安装程序自动比较新旧文件的时间标记(创建日间),不要用旧的文件替换新的文件。
如果你创建好一个Windriver 的核心插件(可能是用kernelDriver开发的),拷贝这个核心插
件(你的.vxd或.sys文件)到相关的目录。

在Windows启动时加载Windriver到 设备驱动列表中。这个操作用下面的命令: ”WDREG.exe install”。为了安装WinDriver,你也可以添加WDREG的源码到你自己的安装代码中(这个源码可以在/windriver/samples/wdreg/wdreg.cpp中找到)。
If you have created a WinDriver Kernel PlugIn as well, call
如果你创建好了一个WinDriver 核心插件,需要调用 “WDREG –name [你的驱动名]
install”来安装。你也可以添加“WDREG”源码你自己的安装代码中来安装WinDrver。

USB 开发者:
拷贝 WINDRVR.SYS 和 WDPNP.SYS文件到C:/WINNT/SYSTEM32/DRIVERS (Windows 2000) 或C:/WIN98/SYSTEM32/DRIVERS (Windows 98/ME)

--------------------------------------------------------
为什么选择Windriver?

作者:[编者按:这是从别的站上找的资料,只是想让大家明白各自的长处,不是做广告。]
WinDriver 和其它设备驱动开发工具之间的比较 为什么编辑和开发者认为WinDriver是开发
设备驱动的主要工具;为什么大多数PCI芯片开发商推荐WinDriver作为设备驱动的开发工具
,下面让我们来看一下。 使用容易 无论您是一位有经验的设备驱动开发者,还是初学者,
WinDriver都会使硬件访问变成一件很容易的事。在常规开发环境下,使用WinDriver,您可
以在很短的时间内完成访问IO端口和存储区域,处理中断,执行DMA操作及访问PCI和自定义
寄存器的工作。这种易用性是通过一个非常强大的组合向导来实现的。这个向导通过一个非
常强健的API来分析硬件,自动产生驱动程序代码。您可以在用户模式下使用这个API,这样
就不需要学习操作系统的内部原理和内核API(DDK)。 "I want to thank your company
for this product and for the service I have obtained. I think we have reduced
the costs of developping the driver by a factor from 5 to 10 ! I think I have
never found a software house with so professional and available support. I
finally think that "WinDriver" is a fantastic product which allows a non-driver
specialist to write a professional driver." Ivano Pellegrini Landis & Staefa
其它工具 仅仅提供非常有限的向导,您必须手工定义板卡的来源(即使是即插即用板卡)
。其它工具都没有提供硬件分析诊断的特性。很少工具可以自动生成代码,它们仅能生成
一个空的设备驱动框架。有一些工具甚至需要您学习新的,非标准化的脚本语言。 See
the "VxD Advisor" column in the October 1999 issue of Windows Developer's
Journal for a more detailed comparison. 支持多种操作系统 用WinDriver 开发完设
备驱动程序之后,您能很容易地在所有主要的操作系统上重新编译和运行您的驱动程序。
当前的WinDriver 支持下列操作系统: · Windows 2000 · Windows NT / NT Embedded
· Windows 95 / 98 · Windows CE (all platforms) · Linux (all flavors) ·
Solaris (x86 and Sparc) · VxWorks (x86 and Power PC) 您不必学习新的操作系统内
核和DDK。即使您需要在上述所有的操作系统中运行同样的驱动程序,而您已经知道了如何
使用WinDriver工具和API在新的操作系统上开始一个工程。 其它工具 仅提供了在Windows
9x 和 NT之间可移植的代码。 最佳的性能 WinDriver 通过使用“Kernel 插入”特性,
您能创建有最佳性能的驱动程序。在实践中,这意味着一旦您在应用级(Ring 3)写入驱
动程序,您可能“降低”临界部分性能(主要包括中断控制器和IO访问例行程序)到Ring
0(Kernel模式)。但通过这种方式写入驱动程序能够获得每秒超过100,000个中断(请检
查证明书)。 “…The user thread does a kp_call to unqueue the data. By reducing
the delay between writes to the doorbell register, I was able to achieve
bursts of 100,000 interrupts per second without loosing data. When I first
read your claim that this was possible, I was skeptical. I am impressed.”
Jim Brooks Tektronix 其它工具包 也可以在用户模式下运行您的中断控制器和IO控制器。
但是它们没有提供一种机制来克服这种体系结构产生的性能限制。在用户模式下,使用其它
工具,您不能创建有最佳性能的的驱动程序,这样,您就不得不在它们上面浪费所有时间,
附加两三个月来写一个新的kernel模式驱动程序。 硬件调试能力 WinDriver I包括一个功
能强大的硬件探测器和调试器。在写入一行代码前,通过一个图形界面,硬件调试器能够对
硬件进行全面的测试。这种方式能够使您在写您的驱动程序前,校验硬件是否按照期望的那
样工作。 其它工具 没有提供这样的特性。您不得不写入没有首先经过硬件校验的程序代码
。没有方法能够把硬件问题ffer no such feature. You will have to write your code
和软件bugs 隔离开。 被主要PCI厂商推荐 WinDriver 支持所有的基于PCI / cPCI / ISA
/ USB的硬件,它不仅仅限于一些特殊的厂商和设备。同时,为那些流行的PCI bridge 芯片
装置(包括PLX, Altera, V3, Galileo, QuickLogic等),WinDriver也准备增强APIs。这
些APIs 提供了预编程方式访问资源和运算。芯片资源特性包括访问PCI bridge的寄存器,
内存和IO空间,中断控制,EEPROM 访问,突发性读写,主从DMA,这些都可应用。 这些
PCI厂商正式推荐WinDriver 作为首先设备驱动程序开发工具。 其它工具 没有提供这样的
支持。 和Kernel 模式驱动程序的集成 KRFTech's 公司的技术使您用相同的API在用户级
和内核级都访问您的硬件。使用这种有用的特性,您可以在用户模式下书写您的驱动程序
(这样避免了漫长而又艰苦的内核开发过程),然后把它移入内核级。这个特性非常有用。
当书写内核模式的驱动程序时,象NDIS或者显示驱动程序(这些驱动程序必须运行在内核模
式,而不管性能问题),可以节约时间。 其它工具 没有提供和内核模式的集成。您可以找
到内核模式下的开发和调试工具,然而它们没有一个让您能够同时保持用户级和内核级的代
码。在多数情况下,您不得不写两个单独的驱动程序—一个是原型(在用户级),另一个
(完全不同)是最终的内核模式的驱动程序。 购买前的试用 KRFTech 公司中国代理北京
恒信誉华软件技术有限公司在网站上提供了WinDriver 的30天的免费的全特性评估版。(
请看网站http://www.biaoge.com.cn/download.htm)。很容易地下栽WinDriver的副本,
用它检测您的新硬件,然后生成新硬件的的设备驱动代码。 其它工具仅提供非常有限的演
示版,或者根本不提供。 WinDriver主要特性摘要如下: · 不需要Kernel 编程和调试。 · 不需要专门的操作系统和驱动程序方面的知识。 · 功能强大的向导,帮助您进行硬件诊断和自动生成代码。 · "Kernel插入" -在内核级运行临界部分的代码来获取最佳性能。 · “KernelDriver” – run your entire WinDriver based driver code in the kernel (useful for NDIS, Display, and other standard kernel mode drivers). · 支持I/O,中断控制和访问板卡映射的存储器。 · 支持DMA,即插即用和多板处理。 · 支持C, C++, VB and Delphi。 · 同样的代码能运行于Windows 9X, NT, 2000, CE, Solaris, Linux, VxWorks 等! · 动态装载驱动程序。 · 增强支持主要的PCI芯片和IP厂商 – PLX, Altera, AMCC, Galileo, V3, PLDA及其它。 · WinDriver 调试监视器 – 当您的驱动程序正在运行时,您能监视内核模式的行为。 强大的用户基础 WinDriver被许多领导市场的公司所使用,包括Intel, IBM, NASA, Hitachi, Philips, Sony, Kodak, Rockwell, Sanyo, 3M, Xilinx, Ericsson, Siemens, Nokia, HP
 
to zw84611:
非常感谢你的解答,可问题是,如何使用Windriver的向导生成的项目来生成VxD或WDM后
缀的驱动程序(因为直接编译会生成一个命令行方式的可执行程序,后缀为EXE)?请您再
说详细一点好吗?
 
抱歉,这个我不熟,只是稍微知道一点点。
我记得它自己带了例子的,生成的是windrvr.sys,你发布时同时发布你的windrvr.sys就可以了。
这种方式只能生成windrvr.sys,好象就是对驱动API做了一个封装,好比VCL或MFC是windows api的封装一样。

另外好象用kernel driver,可以生成自己的vxd或wdm形式的驱动。
 
非常感谢zw84611:
问题我已解决,正如你前文提到的,实际上使用windriver开发设备驱动程序是不生成
自己的VXD或SYS文件的,而是直接使用其自带的windrv.sys和winpnp.sys作为通用设备驱
动程序,而使用其向导可以生成一个对通用设备驱动程序的调用,或自己按照其提供的调用
函数进行编程。也就是说,windriver可以让你在ring 3级编程调用其底层函数来实现设备
驱动程序的功能。
 
接受答案了.
 
后退
顶部