tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
阅读:3573回复:13

[原创]这次遇到一件比较囧的事情

楼主#
更多 发布于:2008-07-15 09:54
手头有个usb转rs232的线...主板上没有com口的时候我用用
基本都是笔记本上使使..用来连接一些嵌入式设备..

以前的笔记本都是单核的..这个东西工作得还挺正常
最近换了个双核的笔记本...这东西就完全不工作了
10秒以内保证蓝给你看...
一会儿BUG_USB_CODE一会儿MULTI_IRP_COMPLETE什么什么的
我都懒得去看蓝屏信息了...

于是老办法
逆向了他驱动然后自己写一个..

这个东西他自己的驱动inf里面写着是叫huge pine
linux下面也有一个驱动..google一下就知道他用的那个ic型号ark3116
这个ic是个台湾产的...基本就是抄袭PL2303
很可惜没有datasheet...唯一一个能google到的文档也只有pinout和usb descriptor的说明

驱动本身不大..很快就逆向完了.
他自己的驱动错误太多了..不蓝屏才怪
同步错误,power处理错误,irp cancel错误,irp 排队错误..pnp remove处理错误..可以说惨不忍睹

基本了解了一下以后就开始编码
编码也很快完成了大半...于是开始调试
调试的时候才发现一个很大的问题..

据我观察..似乎这个硬件的缓存太小
如果对方很快速的发生数据包过来.硬件的缓存就很快填满了.等不到我的irp过去读就把前面的内容覆盖掉了
因为我调试用的是个checked版的xp
也许是因为checked版的判断太多导致irp的处理速度跟不上硬件传输速度(但是我觉得不应该吧..2.8G的cpu还满足不鸟一个115200的串口?!)
我换了个free版的2003就没问题.怎么试都不出这问题

这如何是好?
各位大牛有没有什么参考意见?

现在的做法是我发一个irp下去.然后就不管了
当这个被发下去的irp完成的时候,处理完了该处理的我再发第二个irp下去
如此循环

因为这是个串口而且是usb的.所以肯定硬件上是没有办法像磁盘那样一次多个irp给发过去
但是可以多发几个irp让他们在usbport上去排队.
当前一个irp被usbport完成的时候,usbport能用最短时间找到下一个送往硬件的irp
但是这里有一个问题..就是irp的先后顺序.
我的驱动在处理完成的irp的时候.他们的顺序必须要是usbport的完成顺序.不能乱
可惜目前的内核没有直接的做到这一点
退而求其次.我们可以保证送到usbport的irp排队顺序.并且记录这个顺序
当irp完成的时候按照他的记录下来的排队顺序进行处理

但是这需要我们的驱动保证每个irp直到被送到usbport都是同步的.
也就是要求我们在hold一个spinlock的情况下去调用IoCallDriver.(当然实际上spinlock这种不能递归获取的同步原语是不行的)
都知道这很危险也很难看

这东西本身没有datasheet.我也没动力去详细研究究竟是哪里的问题.
我只是知道不在我的驱动里面
我试过把irp的处理简单到不能再简单就只是dbgprint一个收到的数据大小然后就完成了
即使这样了.还是有数据丢失了..

所以这东西我也只是做了个半成品..
大部分都完成了
也可以用了...free build的2003我试过...putty没问题..其他软件没试过.估计都有问题
因为有几个功能我还没实现...我就完全匹配putty去实现的

没有实现的功能有
1.wait wake
2.pnp部分只有最基本的
3.timeout没有
4.wait on mask也没有

因为3和4的问题我想估计超级终端是用不鸟了
而且超级终端本身就很挑硬件..

半成品也放上来..
万一碰巧有跟我用同样的usb转rs232的人也同样被蓝屏郁闷到死的人
可以暂时用用我这个..
要是你心情好..还能再改改我的代码..呵呵

rar解开
source下面是源代码
bin下面是一个checked编译的驱动
ida下面是他原来自带的驱动文件和ida文件..ida是5.2版的

编译环境是2008+wdk 6001.18001
编译环境没什么特别的.也并不是完全依赖这两个版本
你要换个2003什么的也是很容易的..

 usb2com.rar
root60931
驱动大牛
驱动大牛
  • 注册日期2002-10-25
  • 最后登录2023-10-29
  • 粉丝2
  • 关注0
  • 积分1013分
  • 威望432点
  • 贡献值0点
  • 好评度311点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2008-07-15 11:06
六体投地!
好好学习,天天向上! root60931@gmail.com
killvxk
论坛版主
论坛版主
  • 注册日期2005-10-03
  • 最后登录2014-04-14
  • 粉丝3
  • 关注1
  • 积分1082分
  • 威望2003点
  • 贡献值0点
  • 好评度1693点
  • 原创分2分
  • 专家分0分
板凳#
发布于:2008-07-15 14:20
太强了~~

PS:怎么六体投地的呢?
 
没有战争就没有进步 X3工作组 为您提供最好的军火
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
地板#
发布于:2008-07-15 19:55
修改了个错...
几个stop里面忘记cancel irp了
ollydbg23
驱动牛犊
驱动牛犊
  • 注册日期2006-10-18
  • 最后登录2012-09-03
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望7点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-07-19 11:47
太牛了,我虽然不懂驱动开发。
但是确实被这个arkmicro的驱动折磨死了,基本上每次使用来连接手机,电脑都是蓝屏,郁闷死了,现在才知道,原来是双核CPU的原因,晕死,去试试你写的驱动吧,谢谢!

但是好像你的驱动,在windows xp下面,我装不上去。。郁闷。。
ollydbg23
驱动牛犊
驱动牛犊
  • 注册日期2006-10-18
  • 最后登录2012-09-03
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望7点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-07-19 12:50
似乎还是有蓝屏的问题,我显示装 arkmicro自己的驱动,然后用你的*。sys文件,替换掉,但是发现还是会蓝屏。。。郁闷!
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
6楼#
发布于:2008-07-19 22:07
装不上是个什么状况?

我这个本身是个半成品..有许多功能都没实现的...

你可以试试在bios里面关掉一个核心试试看...
别开apic
或者用单处理器版的hal.dll和ntoskrnl.exe
ollydbg23
驱动牛犊
驱动牛犊
  • 注册日期2006-10-18
  • 最后登录2012-09-03
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望7点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2008-07-22 15:37
关于安装的问题,我是这样子安装的,先安装那个2003版本的驱动,然后再用更新驱动的方式,把你的那个*.sys文件更新上去,看起来,你的文件和原版的文件大小不一样,但是似乎的确是可以用你的这个版本的。。。当然了,还是会蓝屏。。郁闷。

谢谢,估计用单核的设置,这个问题应该是可以搞定的,因为我在一台老的笔记本电脑上面,用这个USB的转换芯片,都是没有问题的,arcmicro公司感觉非常之烂,居然连提供驱动下载的地方都没有,过分!
qiweixue
驱动小牛
驱动小牛
  • 注册日期2004-07-21
  • 最后登录2011-12-19
  • 粉丝0
  • 关注0
  • 积分1006分
  • 威望274点
  • 贡献值0点
  • 好评度268点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2008-08-07 09:04
老仙,你好牛x啊 。。。。
ielts5316
驱动小牛
驱动小牛
  • 注册日期2005-05-18
  • 最后登录2018-08-27
  • 粉丝0
  • 关注0
  • 积分478分
  • 威望940点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2008-10-19 13:34
Thanks a lot.
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
10楼#
发布于:2008-10-21 11:23
被USB搞郁闷过的人 顶下大牛人
ddv74
驱动牛犊
驱动牛犊
  • 注册日期2009-03-01
  • 最后登录2009-03-01
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望11点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2009-03-01 14:56
我也被这个烂芯片的数据线搞死了.
双核居然不停蓝屏,
我只能搞虚拟机开单核凑合着.
及其不爽
ielts5316
驱动小牛
驱动小牛
  • 注册日期2005-05-18
  • 最后登录2018-08-27
  • 粉丝0
  • 关注0
  • 积分478分
  • 威望940点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
  • 社区居民
12楼#
发布于:2009-03-08 11:05
Thanks a lot.
JenyCheng
驱动小牛
驱动小牛
  • 注册日期2005-07-26
  • 最后登录2021-01-24
  • 粉丝2
  • 关注0
  • 积分57分
  • 威望646点
  • 贡献值0点
  • 好评度119点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2009-09-29 13:06
对 tiamo
我真的是没啥可说的了。

除了佩服还是佩服。。。
游客

返回顶部