阅读:2628回复:7
请高手指教!急!!
各位大哥:
小弟在做一块视频卡,接收视频流,该视频流中包含IP包,老板要求写一驱动程序将该卡做成一个虚拟的网卡,小弟不知是做NDIS Miniport还是中间驱动?请高手指教!急!! 给点思路也行,多谢! |
|
|
沙发#
发布于:2001-06-11 22:50
莫非你的驱动程序需要让tcp.sys能够让该卡发送数据吗?
如果只是简单的需要捕获卡得到的数据,那么没有必要 这么麻烦,只要做一般的pci驱动就行了。 如果你的确需要让协议层能够通过你的卡接受和发送 数据,我想你要根据你的卡来定了。 如果你的卡的确具有很多网卡的特性,那么写一个 miniport也是可以的,不过比较麻烦,另外我估计 你的卡并非网卡。所以我猜想用imd要好实现一些, imd可以用来做一块仿真网卡,你可以直接在ddk带 的sample里面修改,不同的是,例如imd的protocol 是调用ndissend发送实际数据,你要改成对你的卡的 实际寄存器以及映射内存的操作,然后,比较惨的事情 是,如果真的是调用ndissend,那么miniport自然会 让ndis调用imd的protocol的sendcomplete以便让你 释放你的内存,这种情况下,你的sendcomplete要 在你的dpc里面调用了,接受的情况也是一样的。 这样做(imd)比较符合ms的建议,不过对程序员 来说要求也是很高的,需要对pci driver和imd有 很深的了解。 Good Luck!!! |
|
|
板凳#
发布于:2001-06-11 23:37
多谢Huyg 兄指教!
我们这块卡不是直接卖给最终用户,是捆绑到别人的系统上卖的,别人还要在这上面做进一步的开发,所以老板要求做的尽量规范一些,这不把我给害惨了。 不好意思我没有说清楚,我的卡不但要处理IP包,还要处理视频流,把视频流送到应用层。所以在驱动程序里要有两个分支,我很怀疑做一个IMD虚拟成一个网卡能不能实现这些功能。 |
|
|
地板#
发布于:2001-06-13 09:19
有趣,不过可惜你还是没有说清楚你的设备。
所以我只能乱猜。 你用im还是可以实现,你要做的不过是在im的 driverentry里面iocreatedevice就行了,至于 其它的东西,例如isr,dpc等等,还不是一样的码? 我做过的im里面不但有网络代码,还有驱动加密 卡的代码,和你这个差不多把? |
|
|
地下室#
发布于:2001-06-13 14:58
多谢Huyg 兄指教!
你觉得是以PCI_WDM为蓝本,还是以passthru这样的IM 为蓝本修改,哪个更容易一些? 另外,应用层是通过deviceiocontrol跟驱动程序交互提取视频数据,而IP包是通过NDIS,这就是我所说的两个数据流,这样的驱动工作起来会不会乱套呀?? 还有安装应该是按普通的PCI驱动程序一样吧?不会是在网络属性里添加服务吧? [wangbo 编辑于 2001-06-13 17:27] |
|
|
5楼#
发布于:2001-06-13 23:10
做这样的东西我如此有兴趣,忍不住再re一篇。
无所谓在那里改,因为很显然,不论在哪里改,你的driver是一定 要改动很多地方的,以至于我甚至认为从头写也差不多,总之你要 管理一切,我认为这玩艺还是有些复杂的。 安装的时候,由于你要告诉系统你实现了一个im,所以估计 用添加服务也许要容易一些。 两个数据流是不会搞混的。 这玩艺我没有做过,现在只能猜想,不过我认为这是一件 很有趣的事情。 |
|
|
6楼#
发布于:2001-06-14 09:34
再傻傻一帖!
我的WDM的PCI 驱动已经做好了,在做这个驱动的时候根本没有考虑把IP包从视频流里提取出来,IP包直接丢弃了。我想这样搞不知道行不行。 稍稍修改原来的WDM驱动把IP包分析出来,再写一个imd,这个imd中只处理IP包,并修改为下层提供的protocol,让imd与我的WDM驱动程序交互,如果能做到这样的话我的工作量要少很多,因为PCI卡的WDM驱动已经做好了,工作得还很稳定。 请大哥指教! |
|
|
7楼#
发布于:2001-06-15 14:58
imd里面只需要实现一个miniport,但是却没有对应的protocol(
是个简单pasthru的)。 这个miniport调用的可不是象一般imd 里面protocol那样调用 ndissend了,而是调用你自己pci的send。 接受也是一样。 |
|
|