利用windriver开发PCI卡驱动程序
一、开发环境的建立
1)需要安装以下软件:
Visual
C++→Windows XP DDK→Windriver。
2)安装PCI卡:
关闭计算机,在双手释放完静电(或佩戴防静电手套)的情况下,插装开发板到任何一个PCI的插槽内并固紧;
3)PLX公司也提供了SDK软件(可以到http://www.plxtech.com/products/sdk/下下载)
4)配置系统环境变量(本编译环境为windowsXP+XP_DDK)以便于后续编译,添加DDK的环境变量。(否则编译无法通过)

二、编译过程(以下为我自己编译的PCIe卡为例)
以下介绍windriver编译驱动程序的过程:(注:编译过程在破解版windriver7.00下编译成功,试用版windriver8.01失败!)
1)正确插装开发板后,运行windriver后,在可列出的硬件设备列表中找到开发板:DeviceID
86e1

2)windriver检测到了开发板的I/O和Memory的地址映射信息

3)选择编译驱动的软件平台

4)选择windriver的编译模式(需要选择Kernal
Plugin选项来生成核心模式下的驱动程序)

5)windriver会生成一个编译的工程文件,如pex8311.wdp。最后windriver会调用VC来编译驱动程序文件。生成的工程有两个:KP_PEX83(核心模式驱动程序)和pex8311_diag(驱动程序测试控制台工程)。
成功编译后在C:\WinDriver\wizard\my_projects\kermode\objfre_winxp\i386目录下可以找到KP_PEX83.sys,这就是windriver为开发板自动生成的驱动程序。
6)创建INF文件,按向导,填写相应信息后会在C:\WinDriver下生成INF文件如:pex8311.inf。

新建一个文件夹PEX8311,把inf和sys文件拷贝过来并更名为pex8311.inf和pex8311.sys。Windriver生成的inf文件中很多是jungo公司的信息,需要逐一修改为公司的信息。
修改后的pex8311.sys文件如下:
; Generated by Shanghai 3F Electronics Co., Ltd. - http://www.3fmedical.com
*
; Installation file (.inf) for "Ultrasound PCIe Interface Board"
device
; Copyright (c) 2006 Shanghai 3F Electronics Co., Ltd
; ver0.1 2006/09/28
; Version Information
; -------------------
[Version]
Signature="$CHICAGO$" ; Represents all Windows
OSs
Provider=%3F%
; You may modify the driver version:
DriverVer=09/27/2006, 7.0.0
Class=Interface Board
ClassGuid={c671678c-82c1-43f3-d700-0049433e9a4b}
; Driver Information
; ------------------
[Manufacturer]
%Mfg%=DeviceList
[DeviceList]
" Ultrasound PCIe Interface Board " = Install ,
PCI \ VEN_10B5 & DEV_86E1 & SUBSYS _831110B5 &
REV_AA
; Installation Section
; --------------------
[Install] ; Installation script for Windows
98/Me
CopyFiles=FilesToCopy
AddReg=UpDateRegistry
Log_Config=Base1
[Base1]
IRQConfig=3,4,5,7,9,10,11,14,15
[Install.NT] ; Installation script for Windows
2000/XP/Server 2003
CopyFiles=FilesToCopy
AddReg=UpDateRegistry
[FilesToCopy]
pex8311.sys ,,,0x40 ; 0x40 ==
COPYFLG_OVERWRITE_OLDER_ONLY
[ClassInstall] ; Register a new class in Windows
98/Me
AddReg=UpDateRegistry
[ClassInstall32] ; Register a new class in
Windows 2000/XP/Server 2003
AddReg=UpDateRegistry
[UpDateRegistry]
HKR,,,,3F
HKR,,Icon,,-5
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,, pex8311.sys
[ControlFlags]
ExcludeFromSelect = * ; Remove all devices listed
in this INF file from certain user
[PreCopySection]
HKR,,NoSetupUI,,1
; Defining WinDriver6 Service
; ---------------------------
[Install.NT.Services]
Addservice=Ultrasound PCIe Interface Board, 0x00000002,
Service_Info
[Service_Info]
ServiceType =
1
; SERVICE_KERNEL_DRIVER
StartType
=
3
; SERVICE_DEMAND_START
ErrorControl =
1
; SERVICE_ERROR_NORMAL
ServiceBinary =
%10%\System32\Drivers\pex8311.sys
; Source File Information
; -----------------------
[SourceDisksFiles]
pex8311.sys=1 ; This indicates that the
pex8311.sys file is located on
[SourceDisksNames]
1="Shanghai 3F Electronics Co., Ltd Installation
Disk",,
[DestinationDirs]
DefaultDestDir=10, System32\Drivers ; The
location to which the pex8311.sys
;---------------------------------------------------------------;
[Strings]
3F="3F Electronics LTD."
Mfg="Shanghai 3F Electronics Co., Ltd"
7)修改完INF文件后就可以对开发板的驱动程序进行更新,更新驱动程序后,在设备管理器中可以查看到当前更新后的驱动程序工作状态。(系统会自动在C:\WINDOWS\inf目录下生成一个以oem为头的一个同内容文件,以便日后系统自动完成该硬件设备识别和安装)。


三、PLX SDK调试开发板
重新安装PLX
SDK的驱动,重新启动计算机后即可运行PLXMon,并可使用其所有功能,其中最重要的如下图所示,为各种寄存器数值查看功能、EERPOM在线烧写功能。(在此情况下,windriver的驱动暂时失效,需要重新安装重启后有效)。同时,该SDK提供了强大的测试功能,如DMA的本地到PCI和PCI到本地的数据传输测试,以及直从/直主模式下对内存映射空间的数据传输测试。

利用windriver调试开发板将在其它的文章单独介绍:)
后记:安装windriver8.01后,编译初时命令为:ddk_make.bat amd64 free
..\..,这时无法正常编译,改为winxp后编译通过。ddk_make.bat批处理文件在WinDriver\util目录下,具体的批处理过程可以查看,从中看出amd64和winxp的编译开关的区别。
