zhaihua
驱动中牛
驱动中牛
  • 注册日期2003-10-11
  • 最后登录2007-07-24
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:2013回复: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
没钱的日子真难过! 大哥,拉兄弟一把.
游客

返回顶部