工作记录——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()函数进行了更新,只需要三个参数,由此发生错误。

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

  1. 【豆瓣电影】2019/11/21/Python搜索豆瓣电影(Top100)爬虫+D3.js词云(票房和豆瓣评分)实现

    [豆瓣电影爬虫]2019/11/21/Python豆瓣电影爬虫+D3.js WordCloud 1.目标 今天临时需要将100部票房最高的电影[from艺恩网:如图1],找到对应的豆瓣评分,制作D3词 ...

  2. 【每日早报】2019/11/21

    ✦ 阿里将香港IPO发行价定为176港元/股,拟筹资约880亿港元 ✦ 拼多多Q3财报:营收75.14亿元,平台年活跃买家数达5.363亿 ✦ 滴滴顺风车3地试运营,用户乘车需先完成安全任务及人脸认证 ...

  3. 周老师每日提问②(2019/11/21)

    文章目录 提问 回答 总结 提问 讨论以下反常积分的敛散性: ∫ 0 + ∞ ln ⁡ ( x + 1 ) x k d x \int_0^{+\infty}\frac{\ln(x+1)}{x^k}dx ...

  4. 5.21工作记录(修改页面跳转,去掉多余的js;增加图片清除功能)

    导出的war包给测试却发现还是以前的效果,虽然代码都没有问题,而且本地我这里是没有任何问题但是改了的东西在那边未生效 网上说是因为缓存没清干净,然后我去删了本地的全部代码重新导入 删项目重新导的时候发 ...

  5. 275、Java基础51 - 数字与字符串【格式化输出】 2019.11.21

    0.目录 1.格式化输出 2.printf和format 3.换行符 4.总长度,左对齐,补0,千位分隔符,小数点位数,本地化表达 5.练习:黄鹤 6.参考链接 1.格式化输出 如果不使用格式化输出, ...

  6. Android应用开发最强原创知识体系(更新至2019.11.21)

    Android应用开发最强原创知识体系 标签: 知识体系 为了方便大家的阅读以及自己的知识体系的建立,特意来写出这个引导文章.以前我是遇到什么写什么,想到什么写什么,从2016年开始我将围绕这个知识体 ...

  7. CFA课程打卡-2019.11.21

    学习时长:72分钟 学习内容:今天学习的内容是经济学基础.学习了如何做出决策的四大原理,原理一:人们面临权衡取舍.意思就是资源的稀缺,经济学研究的就是稀缺资源的有效配置问题.原理二:某种东西的成本就是 ...

  8. C++工作笔记-32位和64位程序的区别

    原文地址: https://blog.csdn.net/nma_123456/article/details/45077345 文章结尾有对此博文的修正和补充! 由于操作系统内存分配的不同,导致软件开 ...

  9. Windows驱动——利用WinDriver开发PCI设备驱动程序

    摘要 WinDriver是Jungo公司出版的一个设备驱动程序开发组件,它可以大大加速PCI设备驱动程序的开发.作者在实际的项目中采用了WinDriver来开发设备驱动程序,取得了相当好的运行效果.从 ...

  10. 工作备忘录的生成(链表)

    题目: 每天都要处理很多事务,为了更好地安排工作,希望在每天开始工作前,根据工作记录,生成工作备忘录.首先输入工作记录数(大于0的一个整数),再逐条输入各条工作记录,每条工作记录包括:工作名,开始时间 ...

最新文章

  1. zabbix监控nginx,PHP-FPM,ELK报警
  2. 实战|对某棋牌站的一次getshell
  3. wdcp安装mysql_安装wdCP,无法连接mysql,解决方法
  4. Bootstrap中的列表的使用
  5. ajax中data传参报错
  6. python数组初始化_Python科学计算库Numpy数组的初始化和基本操作
  7. 什么是冷区热区_火灾热区冷区
  8. unity3d开发微信小游戏2
  9. 灵雀云CTO陈恺:从“鸿沟理论”看云原生,哪些技术能够跨越鸿沟?
  10. 商城项目测试用例设计实战
  11. Android 图片加载框架Glide主流程源码分析
  12. 实现简单的轮播图(单张图片、多张图片)
  13. 书家必备——容易寫錯用錯的繁體字一百例
  14. 使用Rancher的RKE快速部署Kubernetes集群
  15. [转载][shell]linux常用入门命令
  16. 基于WebSocket和Redis实现Bilibili弹幕效果
  17. 手段-目的理论定性研究实践经验分享
  18. VB全局HOOK写游戏盗号木马
  19. 华为防火墙(以USG6330为例)公网直接访问问题解决
  20. 用对线阶段数据分析和预测《英雄联盟》的游戏结果

热门文章

  1. CS61A 计算机程序的构造与解释 课程介绍及课程学习总结
  2. Sql三张表的连接查询
  3. 前端代码审查工具_前端代码审查中应检查的内容
  4. vmware虚拟机桥接模式无法上网
  5. 华三数据中心SDN技术发展应用
  6. 中医电脑cac处方系统 v1.3.3.8 免费
  7. switch错误码2016-0247 无法识别SD卡解决方案(猴子也能看懂的简单命令行操作,无需格式化!)
  8. 弹性系数和线径的计算公式_弹簧弹力计算公式详解
  9. html手机表白弹窗,怎么制作抖音弹窗表白代码 制作抖音弹窗表白代码的教程
  10. oracle 时间转换 1970,oracle 中将unix/linux时间戳进行转换(转)