阅读:2994回复:12
新鲜出炉小玩意儿第三弹
这次这个是个raid卡驱动
LSI MegaRaid SCSI 320-2e 这是一个硬件raid5卡.他拥有2个scsi 320M通道.实际能在每个通道上提供250MB/s的传输速度 他使用pcie 8x接口与主机链接.向下兼容4x规范.兼容开口4x接口(封住的不行.插不进去) 卡上面的处理芯片是intel的iop333好像. 卡上带有128M DDR reg内存.并带后备电池.电池能提供72个小时的持续供电能力. 卡的介绍就到这里...知道他是一个pcie接口的raid卡就行了 LSI为这个卡准备了windows平台下的scsiport的驱动 同时还有linux下的open source的驱动 但是没有datasheet也没有programming guide 这次我弄的这个是windows平台下的storport的驱动 本来是准备开发一个mac osx下面的驱动的.. 但是mac下面的调试环境太麻烦.kernel的调试器竟然是这开中断的环境下运行的 彻底无语.更底层的调试器要求使用com口.可我的电脑没有com口. 所以先得要给osx提供1394的kernel debugger支持才行 好在osx的内核是开源的.到也是件非常容易的事情.. 这次这个小玩意儿大家也看看就好. 虽然微软反复的强调这个storport能带来多大多大的效率提升 但是在我现在的配置下面测试差距并不明显 因为我现在是4个1万5千转的scsi硬盘做的raid5 读取速度600M写入速度400M左右. 这个速度以及超过了硬盘的读写上限了.当然这个速度是在缓存的帮助下达到的 所以即使换了storport也并没有太明显的速度提升.毕竟瓶颈已经不在windows这边了 storport跟scsiport比起来就是有几个部分的变化 1.把原来的startio处理分成了两部分.把一些可以在非同步的情况下执行的代码提到了一个新的函数里面.而原来的startio里面只是处理一些必须要这同步的情况下执行的代码 2.将原来的同步模型做了更细.并把部分同步的功能交给了miniport来处理 3.放开了许多的硬性限制.比如放开了限制到一个adapter上的srb数目限制.不过这个有些无聊.raid卡嘛.又不是scsi卡.硬件的限制还是基于adapter的.而不是基于每个device的.就好比我手头这个卡.最多能同时运行126个srb.scsiport的253个数目限制够了已经.这个数目限制倒是对别的卡可能有好处.这个下面再讨论 4.为miniport提供了queue管理函数.miniport可以自己控制queue 这个东西其实很无聊的.又没有datasheet.也就是做个逆向然后做个翻译.其实有datasheet也会很无聊.无外乎就是照着datasheet读读寄存器写写寄存器. 所以我也不在这里多说什么了.都在代码里面 第一次为一个硬件写驱动.感触最大的就是做硬件也需要跟软件结合 要是硬件能为软件设计一下.驱动这边能省下不少的事情 举个例子. 我的这个raid卡.当驱动把一个srb提交给硬件的时候需要设置一个字节大小的数据来唯一的标识这个srb. 当硬件完成这个srb的时候他返回给驱动这个srb的标记 问题来了..驱动需要为每个srb生成不同的这一个字节大小的数据.生成的过程这startio里面 而硬件完成的时候驱动需要根据这个一个字节大小的数据找到那个对应的srb.这个过程在interrupt里面 这里首先需要的是同步.startio必须要获取interrupt的spin lock.然后驱动要用某种方式保证每个srb的那一个字节数据是唯一的. 如果换一种方式实现...硬件需要的不是一个字节.而是4个字节.那么我们就可以直接把srb的地址作为数据传递给硬件.这样既省掉一个生成过程又省掉一个同步.一举两得... 当然这样直接把硬件返回的数据作为一个指针使用是非常危险的.但是有办法解决的.比如这直接使用这个指针之前做一下signature一类的检查.毕竟这样做以后换来的别的东西我觉得还是值得的. 这个小玩意儿请小心使用..毕竟是我手工打造的东西.没有datasheet没有programming guide 逆向出来的东西.我自己都不是很放心 再说这东西也并不比LSI的驱动好什么 我阉割掉了很多LSI里面用的代码..主要是跟ring3部分交流用的代码 也就是说这个东西不支持LSI的那些应用程序.你不能在windows下调整你的raid配置. 所以,...windows平台就老老实实用LSI的驱动吧 2k,xp,2003的驱动都是通过windows签名的.而且还提供64位版本的 而vista就直接在安装盘里面就带得有这家伙的驱动... 源代码放上来 一样的..vs2008+wdk 6001编译 |
|
|
沙发#
发布于:2007-11-01 00:43
,大叔,你的精力超旺盛。。。
|
|
|
板凳#
发布于:2007-11-01 06:30
Tiamo老大,膜拜~~再膜拜~~再膜拜
PS:扔点影子系统之类的东西吧老大~继续膜拜~ |
|
|
地板#
发布于:2007-11-01 12:32
真正的大牛,逆向个几百K的驱动跟玩儿似的。。。
|
|
地下室#
发布于:2007-11-01 14:05
引用第2楼killvxk于2007-11-01 06:30发表的 : 如果要逆那种东西,累死人倒是真的。。。庞大的数据结构。。。复杂的细节。。。算法及良好的容错处理。。。不过相比较而言,影子也不算复杂了。。。 |
|
|
5楼#
发布于:2007-11-01 14:14
引用第4楼ProPlayboy于2007-11-01 14:05发表的 : 会吐血,再吐血~~原理理解,能写个简略的会崩溃的,要想搞好还需要再XX,再XXX |
|
|
驱动中牛
|
6楼#
发布于:2007-11-01 15:41
引用第1楼ProPlayboy于2007-11-01 00:43发表的 : 哈哈 |
驱动小牛
|
7楼#
发布于:2007-11-02 09:47
拜大仙.
|
8楼#
发布于:2007-11-03 23:37
大侠可否给个联系方式?有问题请教。
SCZHANGMIN @ 163.COM |
|
9楼#
发布于:2007-11-06 18:39
再佩服一下!哈哈牛人!
|
|
10楼#
发布于:2007-11-07 05:09
没看code.
上次的佩服还没结束,新的佩服又来了。。。。。 这才叫做HACKER精神。 论坛上其他大牛学学吧! |
|
11楼#
发布于:2008-01-24 13:47
timao教主你是吸附在牛蝇上的牛蝇~~~
|
|
12楼#
发布于:2008-05-02 08:06
不知道牛人的VS2008和WDK6001是怎么配置的啊?能教我一下吗?
|
|