admin 管理员组

文章数量: 887007

       今年刚从学校毕业,来到公司后学了学画板子然后经理便给了我了一块板子,需要用到USB传输数据,让我学习一下Windows驱动程序开发并将这个USB驱动解决。当时一脸懵逼,便将开发板通过USB接口插上电脑后发现显示的未识别的设备,我记得在学校里都是在网上找一个USB转串口的驱动程序安装下来就可以通过串口助手来传输数据了,现在需要自己开发一个驱动程序,只会点单片机的我感觉难度巨大。

       接下来便是疯狂的百度搜索资料,后来发现CSDN真是个好东西,里面有很多大佬用心编辑的好文章,对于新手有着非常巨大的帮助。在此我也分享一下近一个月的Windows驱动开发之USB的学习过程,不够详细,只是学习过程,以便日后回顾及新手学习流程参考。

 

1.百度Windows驱动开发对其有个大致的了解,然后浏览相关的书籍,以下是我主要浏览的Windows驱动开发的书籍。

      《Windows7设备驱动程序开发》       下载地址:http://www.jb51/books/87699.html

      《Windows设备驱动程序WDF开发》 下载地址:https://download.csdn/download/qq_25648927/10317997

      《WDF USB驱动开发指南》              下载地址:http://www.jb51/books/234606.html

         注:现在大多数都是用WDF框架进行Windows驱动开发(WDF是对WDM更高层次的封装,降低了开发难度),不过网上面能搜到很多关于WDM框架开发的内容,可稍微了解下。

 

2.配置驱动开发环境,都是CSDN上的文章,驱动开发调试环境搭建的文章非常多,在此列出一篇较好的文章。

       大佬博客地址:https://blog.csdn/qing666888/article/details/50858272

       注:CSDN博客最下面还有很多相关的内容都可以进行参考,这过程新手需要花费大量的时间,坑也比较多,在此列出几点本人遇到的坑。

       1)最后一个步骤VS2015附加到进程失败时可参考https://blog.csdn/zhouzixin053/article/details/51289237,且VS2015一定要用管理员权限运行才能附加成功。

        2)VS2015想要生成运行于WIN7环境下的驱动程序的话不仅需要将自己工程属性页里的Driver Settings->Target OS Version设置成WIN7,还应将Driver Settings->Driver Model里的KMDF Version Minor设置成11。因为KMDF分不同的版本,支持的操作系统也不一样,设置有误的话有些API函数无法使用,编译会报未声明的错误,借用官方的编译错误提示:你可能会调用了你的生成环境中当前并不支持的 SDK 头文件中的函数。

 

3.从微软官网上下载USB-FX2的驱动程序示例代码并仔细研究里面的驱动程序(里面还包含有控制台应用程序)。

       代码示例:https://developer.microsoft/zh-cn/windows/hardware/drivers-code-samples

       详细下载地址:https://github/Microsoft/Windows-driver-samples

       注:其中的.inx文件是驱动安装信息文件,应该首先了解,将里面的VID&PID值改成与自己的设备相对应,然后将编译后生成.inf文件和.sys文件拷贝到目标计算机中并将目标计算机的强制驱动签名关掉,然后打开设备管理器进行驱动安装,如果安装不了的话可以查看Windows 安装程序日志文件进行问题排查(比如我从里面发现了WIN7系统的话还需要WdfCoinstaller01011.dll文件才能安装)。

 

4.开发出来的驱动倘若正确并安装成功后便可研究示例代码里面的控制台应用程序,驱动程序必须与应用程序进行通信,才能最终达到Windows下通过USB驱动与设备进行交互,不然驱动程序的作用便体现不出来,如何验证驱动程序里面的功能是否正常运行就靠应用程序与驱动程序间的通信了。

       参考博客:https://blog.csdn/hustd10/article/details/50589743

       注:我的开发环境是WIN10(主计算机) +VS2015 + VM虚拟机WIN10(目标计算机),一开始我目标计算机装的是WIN7系统,运行编译出来的WIN7控制台应用程序时始终找不到USB设备,但是在WIN10弄上就可以,不知道什么原因,后来便学习了下QT,在QT下使用libusb库写了个USB的界面应用程序实现了读写功能。

本文标签: 小结 入门 Windows USB