系统环境设置在编写USB设备驱动程序时,开发人员需要使用下列软件:
1、 Microsoft Visual C++。
2、 SDK(Software Development Kit,软件开发工具包),它是可选的。
3、 DDK(Driver Development Kit,驱动开发工具包)。
Visual C++是包含标准编译工具(编译程序和连接程序)的集成开发环境,通过正确设置,其可以用来建立内核模式的设备驱动程序。尽管其他编译工具也能完成这个工作,但大多数WDM驱动程序开发人员偏爱使用Visual C++,因为它向用户提供了一个良好的编程环境、一个方便的调试器和一些有用的工具(如rebase、guidgen等),这些都有助于驱动程序的开发。
SDK是Microsoft公司提供的软件开发工具包,它含有比Visual C++更多的工具。对于设备驱动程序的开发,它是可选的软件组件。
DDK是Microsoft公司提供的驱动开发工具包,它是开发设备驱动程序所必需的软件组件,可从微软公司的网站上年费下载得到。Windows 98使用的是Win98 DDK,其被默认安装在98DDK文件夹中;Windows 2000使用的是Win2000 DDK,其被默认安装在NTDDK文件夹中。
在DDK安装完成后,其文件夹下的BIN目录中包含一些可执行文件,如Build.exe(用于创建驱动程序)、Setenv.bat(用于设置驱动程序的构造环境),他们是建立驱动程序不可缺少的工具。如果选择的是完全安装,在其src目录中还会包含一些设备驱动程序的源代码,如对于Win98 DDK,其/98DDK/src/usb目录中包含有USB设备驱动程序的源代码;对于Win2000 DDK,这些内容放在/NTDDK/src/wdm/usb目录中。对于USB设备驱动程序,Win98 DDK和Win2000 DDK大致相同,但他们之间也存在着一些细微的差别,如SetupApi.h头文件不同,自由构造和检查构造的文件夹不同等。两者的驱动程序不能混用,即不能在Windows 98中使用Win2000 DDK编译的驱动程序,也不能在Windows 2000中使用Win98 DDK编译的驱动程序。值得注意的是,在安装DDK之前,必须先安装好Visual C++,否则载运习惯DDK的Setenv.bat工具时,他将不能正确设置构造环境。 对于Windows 98操作系统,Win98 DDK、编译工具、汇编工具等都使用附加的环境空间来存储区搜索路径,所以他可能需要增加其环境空间,方法是在C盘根目录下的Config.sys文件中添加(或修改)下面这条命令: shell=C:/command.com /p /e:4096 该命令设置Windows 98环境空间的大小为4096字节。如果在创建驱动程序时接收到“Out Of Environment Space”消息,开发人员就应该为Windows 98增加更大的环境空间。在Windows 2000操作系统中不存在这个问题。 Win98 DDK安装时,会在操作系统的“程序”文件夹下建立一个“Development Kits/Windows 98 DDK”目录,该目录包括两个可执行文件:“Free Build Environment(自由构造环境)”和“Checked Build Environment(检查构造环境)”。
对于Win2000 DDK,其相应的目录名为“Development Kits/Windows 2000 DDK”,可执行文件名与Win98 DDK相同。在创建设备驱动程序前,开发人员必须运行这两个可执行文件中的一个,它们调用DDK的Setenv.bat文件建立驱动程序的构造环境,并设置一个环境变量。其中,自由构造环境创建的是设备驱动程序的最终发布版本,他对驱动程序的源代码进行了优化,并禁止了其中的调试语句,删除了所有的调试信息,使驱动程序具有短小精炼、运行速度快且占用内存少的优点;检查构造环境用于驱动程序的调试或测试,它创建一个未经优化的调试版本,其会执行驱动程序中的调试语句,且包含所有的调试信息,他们可帮助驱动开发人员找到驱动程序中的错误。通常,所有的驱动程序都应首先在检查环境下进行调试和测试,已发现其内部隐藏的错误,当驱动程序能够在检查环境下正常运行后,开发人员需要在自由环境下重新编译该驱动程序,以得到其最优版本。 检查版本驱动程序所需要的,因为几乎所有的驱动开发人员都不能保证其开发的驱动程序可以不经调试就一次成功。即在开发过程中必须对设备驱动程序进行调试。Visual C++的调试程序不能用于内核模式代码,即不能调试设备驱动程序。但Microsoft提供了其他辅助调试工具,对于Windows 98,开发人员可以使用Wdeb386.ext和Wdeb98.exe;对于Windows 2000,开发人员可以使用WinDbg.exe系统工具。可是,这个种工具都有一个致命的缺点:需要在两台计算机之间使用才能完成其调试工作。为了克服这个缺点,驱动开发人员可以使用其它第三方制造商提供的调试工具,如Conpuware NuMega的SoftICE调试软件,他就可以与被测试的驱动程序在同一台计算机上运行。 在设置驱动程序的构造环境时,开发人员也可以不直接运行Free Build Environment或Checked Build Environment可执行文件,而是在MS-DOS提示符下,手动调用Setenv.bat批处理文件来完成同样的操作,其命令格式如下: Setenv [free | checked] 该命令的第一个参数指明DDK的安装路径(如C:/98DDK);第二个参数是可选的,指明所建立的构造环境,缺省值为“free”,即建立自由构造环境;“checked”表示建立检查构造环境。例如:在MS-DOS提示符下键入setenv C:/98DDK,则其将建立驱动程序的自由构造环境。 执行setenv命令后,计算机屏幕上会弹出一个类似于MS_DOS的命令提示窗口,在该窗口中开发人员可以使用BUILD工具创建其所编写的驱动程序,典型方法是首先进入驱动程序所在的目录,然后运行“build –c”命令。该命令将查找驱动程序的所有源文件,并执行“完全创建”(在创建驱动程序前,其将删除所有已存在的.obj文件)。在其执行完毕后,驱动程序的可执行文件就会被建立在相应的目录中(其由BUILD工具的source文件指定)。 现在可以 DDK提供的驱动程序了,以USB块传输为例,其步骤如下:
1、 建立驱动程序的构造环境。对于Windows 98,运行其任务栏的“开始/程序/Development Kits/Windows 98 DDK/Free Build Environment(或Checked Build Environment)”,一建立驱动程序的自由构造环境或检查构造环境。对于Windows 2000,需要运行其“Windows 2000 DDK”目录下的相关文件。当然也可以采用前面介绍过的手动调用方式。
2、 进入驱动程序源文件所在的目录。对于Win 98 DDK,支持USB块传输的设备驱动程序源文件被存放在其文件夹下的“src/usb/bulkusb/sys”内。假设Win 98 DDK被安装在C:/98DDK目录中,则可键入命令:“cd C:/98DDK/src/usb/bulkusb/sys”。对于Windows 2000 DDK,这些源文件北村放在其文件夹下的“src/wdm/usb/bulkusb/sys”内。
3、 使用BUILD工具编译驱动程序的源文件,以得到可执行文件。在命令提示符下键入命令:“build –c”。当该命令执行完毕后,就可以在Win 98 DDK目录下的“lib/i386/free(或checked)”内发现一个新建的BulkUsb.sys文件,他就是这个驱动程序的可执行文件。对于Win2000 DDK,该可执行文件被存放在其源文件目录下的“objfre/i386”或“objchk/i386”内,文件爱你名为BulkUsb.sys。