2020年4月份的时候换的工作,从事了以前一直想干但永远没有长期干的Windows驱动开发,以前像偶尔搞搞PCIE等设备驱动,感觉还挺有意思的。后来又做了一些内核的服务性驱动,不过2020年的这次机会是搞USB驱动。其实对我来说吧,只要是Windows驱动,至于干什么类型的,我已经不再乎了。因为再也不像以前那样,天天在扯淡,搞一些觉地没有意义的东西,就像去排接线盒的故障,分析硬件电路的问题,搞搞工艺,和客户谈谈需求。。。
讲道理,进公司的时候对USB的了解和大家差不多的,最多知道一个BUSHOUND抓包工具。 其它也就不清楚了。还记得面试的时候人家问我懂UVC么,我给人家扯YUV,现在想起来那个尴尬啊,不过确实代表了自己当时的水平。
入职后,痛苦的学习期。从USB规范到UVC规范,后来的UAC规范,HID报告描述符,BOT规范,甚至USB3.2的规范,学习一直在学习,一直在翻译。白天上班,晚上回家学习规范。
后来自己实现怕学的忘了,也就弄了一个USB网站,用来记录自己学习USB的过程,知识总结,调试记录等。半年的时候,发现竟有很多人加我QQ,索性建个群,人越来越多。自己也在群里给大家回答问题,大家相互讨论,学习真的是很快。特别是有人问题的问题,自己通过学习,帮助解决,发现自己的USB知识得到了很大的提升。
2021年五一,闲的没事干,就干脆独立弄个域名www.usbzh.com,建立了一个USB中文网 - USB技术开发交流,将自己以前的文章全搞过来,整理分类,方便自己,也能方便别人,简直不要太开心。
慢慢的文章也写了一些,为了解决实际工作中的问题,需要仔细的研究USB规范,自己就想了一个方法,就是通过WINDOWS驱动虚拟USB设备,所以说干就干。现在看来确实不错,自己的知道得到了很大的加强,也能帮助解决很多问题。自己这一年多虚拟出的USB设备包括:虚拟UVC摄像头,虚拟USB麦克风,虚拟扬声器,USB键盘,鼠标,触摸屏,虚拟U盘。当然为了提高自己平时的工作效率,自己也搞了很多USB的分析工具,像报告描述符分析工具,UVC扩展单元分析工具,后来了为再方便些,就弄了一些在线的工具,如USB标准请求等描述符分析工具,URB在线分析工具,UVC摄像头数据协商格式在线分析工具等。。。
呃,,,其实说真的,搞USB只是工作需要,或者是个意外,我真实的还是对系统驱动开发感兴趣。所以我又把我的魔抓伸向了Windows内核,开发看ReactOS关于USB的实现代码,像USBCCGP.sys,usbhid.sys,hidclass.sys,hid.dll,parser.sys等驱动的源代码,也解密了很多未解之迷:如你知道为什么HID报告描述符在Windows下获取时会比HID描述符中大于64字节:Windows获取HID报告描述符长度比实际长度大64字节 - USB中文网,这种结合ReactOS的源代码,并逆向一些东西,简单就是快乐的来源。
最后贴一张图吧,是百度关于USB中文网的后统计,虽然今天USB中文网的访问趋势虽然达不到,但看着还是心情不错的。所以我也就写了这篇文章,以示得瑟。