2019.11.21工作记录——windriver生成PCI驱动32位向64位移植

工作记录——windriver生成PCI驱动32位向64位移植

近期公司项目中分配给我的任务为现有的32位PCI卡驱动需要将其从win7操作系统转移到win10系统,原本32位的工程也要变为64位。

现有驱动程序工程为windriver10.20生成的inf文件加vs2010环境的32位测试工程,我需要将其改为win10系统下64位工程。

首先需要兼容win10系统的windriver,我使用了windriver12.21版本,工程还是用vs2010编译。

具体移植过程步骤如下:

第一步,安装PCI卡驱动:

借助windriver安装PCI卡的驱动步骤与之前一样,
第一步:打开Driver Wizard ,选择New host driver project,

第二步:在Select your device窗口中找到并选择自己要安装驱动的对应硬件(如果不确定可以在设备管理器中找到对应设备,根据设备的主线,信道数量来判断),

第三步:选中相应设备后点击右侧Generate .INF file,(下面的Automatically install the INF file在win10系统中可不点,原因在后),根据自己需求更改设置,然后点击下面的Next,选择INF文件保存路径,然后等待自动生成INF文件,

第四步:由于win10系统如果要安装驱动文件需要进行文件验证,如果该驱动的公司未在微软服务合作名单中则无法自动安装驱动文件,所以需要关闭驱动验证后再在设备管理器中安装INF文件,具体步骤直接百度“win10安装驱动”,

第五步,驱动安装完成后在设备管理器中找到Jungo选项,看看里面有没有新的Device项,有就代表驱动安装成功。

第二步,生成PCI驱动接口库:

第一步:建立ATL项目,选择动态库,

第二步:头文件中include自己需要的windriver头文件,路径为“windriver安装路径\windriver\include"

第三步:了解驱动需要实现的功能,编写调用需要的windriver接口函数,

第四步:链接到windriver接口动态库,具体方法为:在工程->项目->工程属性->VC++目录->包含目录中添加路径:windriver安装路径\windriver\include,并在工程->项目->工程属性->VC++目录->库目录中添加路径:windriver安装路径\windriver\lib\amd64,然后在工程->项目->工程属性->链接器->附加依赖项中添加项:wdapi1221.lib(此项为上面库目录中的lib项,视版本而定)。

若要直接由32位工程改为64位,则需要额外步骤,需要在工程->项目->工程属性->C/C+±>预处理器->预处理器定义中添加“KERNEL_64BIT”,并在配置管理器中将“Win32”改为“x64”。

编译成功后PCI驱动接口的动态库生成成功。

第三步,生成驱动测试工程:

驱动测试工程主要实现为调用刚刚生成的PCI驱动接口库,对设备进行开关机和读写操作,具体步骤与链接动态库步骤相同,可直接百度动态库链接和使用。

在32位向64位移植过程中出现一个问题,即在运行成功的32位工程中,改为64位时,编译成功后发生调试错误,错误为缓存区溢出。经过排查发现在开启设备的函数WDC_PciDeviceOpen()这一步运行出错,经检查发现问题:

在32位工程中使用的是windriver10.20版本的接口库wdapi1020.dll,库中WDC_PciDeviceOpen()函数定义如下:

DWORD DLLCALLCONV WDC_PciDeviceOpen(
    WDC_DEVICE_HANDLE *phDev,
    const WD_PCI_CARD_INFO *pDeviceInfo,
    const PVOID pDevCtx,
    PVOID reserved,
    const CHAR *pcKPDriverName,
    PVOID pKPOpenData);

其中函数有六个参数,而在64位工程中使用的wdapi1221dll中,函数定义如下:

DWORD DLLCALLCONV WDC_PciDeviceOpen(
    WDC_DEVICE_HANDLE *phDev,
    const WD_PCI_CARD_INFO *pDeviceInfo,
    const PVOID pDevCtx,
  );

在windriver1221版本中对WDC_PciDeviceOpen()函数进行了更新,只需要三个参数,由此发生错误。

发布了25 篇原创文章 · 获赞 6 · 访问量 1422

猜你喜欢

转载自blog.csdn.net/weixin_43948991/article/details/103185806