你觉得不会有什么问题,是么?你懂得底层的软件开发和PCI接口,因此编写几个来检测卡、读写寄存器和端口,建立DMA传输,可能还要处理一两个中断的函数供应用程序调用并不困难。
事实上,情况并没有那么简单。你可能需要自己手工编写一个嵌入式操作系统或者借助于一个已有操作系统,它应该能够满足你的要求。现在,你必须遵守Windows的规则。如果你不理解这些规则,那么你的设备驱动很有可能是不可靠的,甚至根本就无法工作。
如果你的公司没有开发设备驱动的经验,一个简单的选择就是把它外包有这方面经验的公司。
外包有它自己的风险和缺点。因此,当你的开发任务期限很紧时,你需要把外包的风险和自行开发的难度综合衡量。
如果外包不是你的选择,那么请在工作之前,就武装好自己。你需要理解基本的Windows驱动体系和Windows驱动模型(Windows
Driver Model,WDM),它提供了简化各种设备驱动类型的统一模型。
Windows设备开发者套件(Device Developers Kit,DDK)是你最重要的资源。它包含了技术信息、例子代码、头文件和许多其它丰富内容。
得到DDK的途径有两种。你可以向微软公司定购Windows DDK光盘,也可以从MSDN中得到它(DDK是MSDN的一部分)。
Windows驱动体系是一个非常大的课题,因此我建议你购买有关它的几本书。如果你编写的是Windows 2000和XP核心模式下的驱动,我推荐如下书籍:
如果是Windows 98/95 VxD编程,我推荐:
下面是用于简化Windows驱动开发和调试的商业库和工具套件:
除了微软网站,OSR网站也提供了许多有关驱动编程的信息和技巧。新闻组(如comp.os.ms?windows.programmer.nt.kernel?mode)同样可以提供许多技巧和建议。最后,你还可以考虑搜索一下专门讨论Windows驱动特定问题的邮件列表和邮件组。
只要有可能,你就应该支持最新的Windows 2000和Windows XP操作系统。早期Windows的设备驱动是基于较老的VxD技术的,它要求你编写、调试和测试单独的驱动。(注意:也有例外情况。例如,Windows 98支持WDM驱动的某些类,而它们可以作为Windows 2000以及后续版本的源代码。)