阅读:3669回复:13
[原创]这次遇到一件比较囧的事情
手头有个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 |
|
沙发#
发布于:2008-07-15 11:06
六体投地!
|
|
|
板凳#
发布于:2008-07-15 14:20
太强了~~
PS:怎么六体投地的呢? |
|
|
地板#
发布于:2008-07-15 19:55
修改了个错...
几个stop里面忘记cancel irp了 |
|
地下室#
发布于:2008-07-19 11:47
太牛了,我虽然不懂驱动开发。
但是确实被这个arkmicro的驱动折磨死了,基本上每次使用来连接手机,电脑都是蓝屏,郁闷死了,现在才知道,原来是双核CPU的原因,晕死,去试试你写的驱动吧,谢谢! 但是好像你的驱动,在windows xp下面,我装不上去。。郁闷。。 |
|
5楼#
发布于:2008-07-19 12:50
似乎还是有蓝屏的问题,我显示装 arkmicro自己的驱动,然后用你的*。sys文件,替换掉,但是发现还是会蓝屏。。。郁闷!
|
|
6楼#
发布于:2008-07-19 22:07
装不上是个什么状况?
我这个本身是个半成品..有许多功能都没实现的... 你可以试试在bios里面关掉一个核心试试看... 别开apic 或者用单处理器版的hal.dll和ntoskrnl.exe |
|
7楼#
发布于:2008-07-22 15:37
关于安装的问题,我是这样子安装的,先安装那个2003版本的驱动,然后再用更新驱动的方式,把你的那个*.sys文件更新上去,看起来,你的文件和原版的文件大小不一样,但是似乎的确是可以用你的这个版本的。。。当然了,还是会蓝屏。。郁闷。
谢谢,估计用单核的设置,这个问题应该是可以搞定的,因为我在一台老的笔记本电脑上面,用这个USB的转换芯片,都是没有问题的,arcmicro公司感觉非常之烂,居然连提供驱动下载的地方都没有,过分! |
|
8楼#
发布于:2008-08-07 09:04
老仙,你好牛x啊 。。。。
|
|
9楼#
发布于:2008-10-19 13:34
Thanks a lot.
|
|
10楼#
发布于:2008-10-21 11:23
被USB搞郁闷过的人 顶下大牛人
|
|
11楼#
发布于:2009-03-01 14:56
我也被这个烂芯片的数据线搞死了.
双核居然不停蓝屏, 我只能搞虚拟机开单核凑合着. 及其不爽 |
|
12楼#
发布于:2009-03-08 11:05
Thanks a lot.
|
|
13楼#
发布于:2009-09-29 13:06
对 tiamo
我真的是没啥可说的了。 除了佩服还是佩服。。。 |
|