zhaihua
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2007-07-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2009回复:4

转贴(来自CSDN)关于USB网卡驱动程序开发的个人理解,欢迎讨论

楼主#
更多 发布于:2004-04-20 13:07
关于USB网卡驱动程序有几个朋友希望我把我认为得“关键问题”与解决方法写出来,我也想听听大家的毕竟仍然没拿到硬件,虽然我认为是这样,也许象歪了呢?好了言归正传:
    在2000 DDK中写所有网卡驱动程序时必须使用NDIS接口,NDIS设备驱动程序又可以分为三类:
1、Miniport 驱动程序 它在低层,与硬件设备相关
2、Intermediate 驱动程序 中间层驱动程序,如果做过滤器就要写这种驱动程序
3、Protocol 驱动程序 协议层驱动程序,个人认为是封装各种协议的,如(tcp/ip,ipx....)
    可以看出我需要写的是一个miniport驱动程序。在miniport驱动程序中规定在DriverEntry(这个函数相当于应用程序的main函数,是驱动程序的主要入口)中要用NdisMRegisterMiniport注册一组回调函数以便在ndis需要时使用,这组函数包括初始化、halt、senddata、getdata、reset...等,如果要写一个普通的网卡驱动程序,只需要在这些状态下需要网卡做的事用中断、dma、或映射的内存,通知网卡即可,ndis支持这些操作。
    但对于usb或1394设备则不行。你需要连接设备总线,并把你的要求提交给总线。如何达到这个目的?虽然M$提供了一个函数NdisMGetDeviceProperty()但是这个函数怎么用?这些全是问题(这就是我任为地核心问题,你觉得呢)。
    后来请教了一个大牛,才知道只是一层窗户纸。在NdisMGetDeviceProperty()中会返回设备的physicalDriverObject ,FunctionalDeviceObject , NextDeviceObject,等信息,个人感觉NdisMGetDeviceProperty函数只是在系统中注册了physicalDriverObject ,FunctionalDeviceObject,NextDeviceObject等对象。这样就可以把USB设备链接到USB总线上了。具体过程只不过是将普通的USB驱动程序中的addDevice函数的代码移到MiniportInitialize而已。至于得到、发送数据,设备的电源管理等,向USB总线发URB就可以了(具体我参考了DDK中的source code)。
没钱的日子真难过! 大哥,拉兄弟一把.
zhaihua
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2007-07-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-20 13:09
我现在对NdisMGetDeviceProperty()很疑惑,不知道miniport驱动怎么使用NdisMGetDeviceProperty()与USB的WDM驱动联系的,希望大家来捧场,呵呵 :D :D
没钱的日子真难过! 大哥,拉兄弟一把.
flyhobo
驱动小牛
驱动小牛
  • 注册日期2004-03-05
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-23 10:19
关注!
看了你的帖子,大体知道了怎么吧miniport连接到相应的总线上,具体还待研究资料。但我要实现的是连接到某一WDM驱动,怎么连接啊!我想实现的是把数据转发到该WDM驱动。

学习、学习、再学习!!!

[编辑 -  4/23/04 by  flyhobo]
好好过日子
flymonkey
驱动牛犊
驱动牛犊
  • 注册日期2003-06-09
  • 最后登录2004-09-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-27 14:33
好象是usb插入主机后系统会为他分配一个地址什么的,然后再绑定到miniport,这时候miniport通过NdisMGetDeviceProperty来获得usb设备的对象,以便操作(初试化等等)。
punk
驱动小牛
驱动小牛
  • 注册日期2001-04-07
  • 最后登录2018-06-01
  • 粉丝0
  • 关注0
  • 积分621分
  • 威望164点
  • 贡献值0点
  • 好评度60点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-18 12:39
我现在对NdisMGetDeviceProperty()很疑惑,不知道miniport驱动怎么使用NdisMGetDeviceProperty()与USB的WDM驱动联系的,希望大家来捧场,呵呵 :D :D

这个问题是这样的
NdisMRegisterMiniport实际上给我们的miniport driver添加了它的
adddevice[跟具体的ndis库相关]函数,pnp设备管理器在usb总线枚举的时候调用了该函数,产生一个设备实例,然后初始化ndis相关的上下文,调用咱们提供的miniportinit函数,MiniportAdapterHandle与 function device_object、pdo、next_object的关系由ndis库建立。
这三个设备对象指针跟普通的usb驱动中adddevice得到的三个指针意义应该是一样的。
虽然是一个nic miniport但是实际上对于usb总线来说,却是一个usb功能设备驱动
不停学习
游客

返回顶部