0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NDIS小端口驱动程序实现的关键技术和应用研究

电子设计 来源:半导体技术 作者:鲁京,陈曦,周祖成 2021-06-11 15:44 次阅读

1 引言

无线局域网经过几年的发展,在技术上已经日渐成熟。尤其是IEEE推出802.11-1999和802.11b以来,应用也日渐广泛。无线局域网硬件实现的两大主要部分是基带处理器和MAC控制器,软件部分包括驱动网卡本身工作的嵌入式软件网络设备驱动程序。在本文中,首先介绍了小端口驱动程序的基本要点,然后给出了基于Driver Studio开发PCMCIA接口编程I/O(Programmed IO)方式工作的无线局域网网卡NDIS(网络驱动程序接口标准),并讨论了小端口驱动程序实现过程中的若干关键技术的细节。

2 小端口驱动程序

在典型的网络中,如以太网LLC子层及其上层协议均由软件实现,MAC及其以下层协议由硬件实现。微软Windows操作系统下的网络设备驱动程序遵守NDIS规范,它在分层的网络驱动程序框架中规定了一个标准接口,从而使抽象低层次的硬件提供了高层次网络上的网络管理。因此,该规范极大简化了设备特定网络驱动程序的开发。

NDIS还用于网络驱动器的状态信息参数的维护,包括函数的指针、句柄、链接的参数块和其他的一些系统变量。NDIS规范下的网络驱动程序分为三类:小端口驱动程序、中间驱动程序和协议驱动程序。普通网卡的驱动程序都是小端口驱动程序,它有两种基本功能:管理一个网络接口卡(NIC),包括通过NIC收、发数据;与高级驱动程序接口(如中间驱动程序和传输协议驱动程序)。一个小端口NIC驱动程序通过NDIS库和它的NIC与高层驱动程序相互通讯。NDIS库 导出一个完全的函数集合(NdisXXX函数),来装入小端口需要调用的操作系统函数。然后,小端口必须导出一套MiniportX xx函数的实体指针,可供NDIS自己使用或代替高层驱动程序访问小端口。

关于网络设备驱动程序和Windows驱动程序模型,感兴趣的读者可以参考文献。

3 无线网卡驱动程序框架

标准的驱动程序都是C语言写的,Nu Mega公司却通过引入C++和封装基本的函数库简化了驱动程序的设计。

使用DriverStudio编写网络驱动程序,首先需要使用NetworkDriver Wizard生成驱动程序的框架。该框架生成两个驱动程序的基本类:一个是 wlan_drvDriver,它是KndisMiniDriver的继承类;另一个驱动程序必须且只有一个KndisMiniDriver的继承类。wlan_drvDriver的定义如下

wlan_drvDriver的唯一工作是定义DriverEntry。操作系统通过该函数得知驱动程序的入口。DriverEntry例化NetworkDriver Wizard生成的另外一个类wlan_drvAdapter,并将本驱动程序注册。

wlan_drvDriver类不用开发者干预。开发者需要关心的是另外一个类wlan_drvAdapter,它是KndisMiniAdapter的子类。

4 驱动程序的初始化

wlan_drvAdapter类的实现是整个驱动程序的主体部分,包括初始化驱动程序、发送数据、接收数据、中断处理、网卡复位等。

驱动程序在被装入操作系统后的第一步工作是进行初始化。该工作由wlan_drv Adapter::Initialize函数完成。该函数完成的工作如下:

(1)选择媒体类型。对于无线局域网为 NDISMedium802_3,而不是NdisMedium-WirelessWan。声明为 NdisMediumWirelessWan将支持各种无线媒体类型,NdisMedium802_3原本为以太网设计,这里无线局域网似乎应该声明为NdisMediumWirelessWan媒体类型,但事实并不是这样。通过查询OID_GEN_PHYSICAL_MEDIUM,协议驱动程序

可以得知物理媒体为NdisPhysical-MediumWirelessLan类型。

(2)从注册表读取网卡地址。

(3)注册适配器的类型,如指定设备为 NdisInterfacePcMcia,代表网卡为PCMCIA标准的PC Card。这里需要强调的是PCMCIA接口的配置存储器和功能寄存器都是由主机自行维护的,虽然驱动程序也可以读写配置存储器和功能寄存器,但这样做会导致系统工作的不一致,除非特别需要,驱动程序无需读写配置存储器和功能寄存器。

(4)选择并注册IO端口。

(5)选择并注册中断。

(6)设定网卡所支持的包种类,如广播中的多播等。

(7)设定网卡的MAC属性,如网卡是否支持环回等。

(8)初始化网卡硬件使其进入工作状态。该工作由wlan_drvAdapter::CardInit()完成。主要是设置相应的寄存器,读取永久网卡地址等。

(9)初始化自定义变量。

5 发送数据

当需要发送数据包时,NDIS调用MiniportSend 函数,对应本设计中wlan_drvAdapter::Send函数。如果当前没有数据包正在被发送,则调用 CopyDataDown(Packet)将数据发送给NIC,否则将数据插入发送队列。当中断产生后,发现代表网卡准备好接收下一个包,此时将数据包出列。

CopyDataDown(Packet)函数与具体的网卡实现有关。

6 接收数据

由于本设计中的网卡是程控I/O的网卡,速度较慢。每次产生中断时,如果发现NIC上缓存了一个数据包需要接收,则通过NdisMEthIndicateReceive 通知给NDIS,对应于m_Lookahead.In di cate函数。如果是DMA设备,可以一次将整个数据包通知给上层,对于PIO方式的NIC,DDK建议只通知部分数据,然后让NDIS调用MiniportTransferData来读取余下的数据。当然NDIS也许对该数据不感兴趣,就不会读剩下的数据。

7 中断处理

与中断处理有关的函数包括中断服务程序 wlan_drvAdapter::Isr和延迟过程调用函数wlan_drvAdapter::HandleInterrupt。

中断服务程序Isr工作在DIRL,会抢断工作在更低中断优先级的线程,所以应该尽快退出。该程序的主要任务是判断中断当前是否是本网卡产生的,如果没有应该将*InterruptRecognized 设定为FALSE,并退出程序。如果是,则将中断处理程序HandleInterrupt插入DPC列队,以在Passive Level上进一步处理中断。

中断处理程序是真正处理中断的函数,它完成所有数据处理工作,它需要处理包括与统计信息有关的接收数据、发送数据等所有中断。

8 结论

网络设备驱动程序是无线局域网网络接口卡实现的关键部分,它与传统的以太网卡稍有不同,但网卡与主机之间数据通信的基本格式与以太线网卡是相同的。本文首先介绍了小端口驱动程序的特点,然后给出了基于DriverStudio开发PCMCIA接口程控I/O方式工作的无线局域网网卡的NDIS小端口驱动程序,其主体部分中包括驱动程序框架、驱动程序的初始化、发送和接收数据和中断处理在内的关键技术细节。本文所设计的网卡已经在原型网卡中运行,基本满足了设计要求。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5082

    文章

    19104

    浏览量

    304796
  • 无线
    +关注

    关注

    31

    文章

    5450

    浏览量

    173238
  • 局域网
    +关注

    关注

    5

    文章

    751

    浏览量

    46277
收藏 人收藏

    评论

    相关推荐

    汽车总线及其关键技术研究

    汽车总线及其关键技术研究
    发表于 07-10 11:33

    无线局域网NDIS端口驱动怎么实现

    在本文中,首先介绍了小端口驱动程序的基本要点,然后给出了基于Driver Studio开发PCMCIA接口编程I/O(Programmed IO)方式工作的无线局域网网卡NDIS(网络驱动程序
    发表于 05-31 06:59

    LCD显示的关键技术

    可以用硬件电路或软件程序实现B.只能用滤波电路或双稳态电路实现C.只能用软件程序实现D.只能用延时程序
    发表于 09-10 08:39

    视觉导航关键技术及应用

    由于视觉导航技术的应用越来越普及 ,因此 ,有必要对视觉导航中的关键技术及应用进行研究。文章对其中的图像处理技术和定位与跟踪技术进行了详细
    发表于 09-25 08:09

    CITECT驱动程序结构及其重用性的研究

    本文通过对CITECT驱动程序的工作方式分析,讨论了CITECT软件与其提供的驱动程序之间交换数据和命令的方式,研究了基于二进制代码的CITECT驱动程序的可重用性。
    发表于 06-15 08:37 20次下载

    基于NDIS中间层的包过滤的研究与设计

    在分析介绍Windows 2000/xp 平台的NDIS 驱动程序的基础上,提出了一种使用NDIS中间层驱动程序实现包过滤的方法。应用该方法
    发表于 08-22 09:40 21次下载

    NDIS驱动程序研究和基于NDIS网络监测程序实现

    本文介绍了Windows环境下根据网络设备接口规范(Network Device Interface Specification)NDIS开发网络驱动程序技术。并分析了开发基于NDIS
    发表于 08-29 08:46 11次下载

    基于NDIS中间驱动的包过滤器的设计实现

    分析了网络驱动程序接口规范(NDIS)的体系结构和标准开发接口。介绍了设计实现局域网数据包过滤器的关键技术和包过滤的基本过程。最后完成了实验验证,结果表明,基于NDI
    发表于 09-24 16:36 9次下载

    虚拟串行端口驱动程序免费下载

    虚拟串行端口驱动程序免费下载
    发表于 10-29 14:31 8次下载

    Windows CE设备驱动程序开发

    本文介绍了 Windows CE 体系结构和开发 wince 设备驱动程序的过程,阐述了设备驱动程序模型、设备驱动结构和中断处理。 Windows CE 操作系统支持4种设备驱动模型:
    发表于 04-18 10:13 0次下载

    嵌入式电源管理关键技术研究实现

    嵌入式电源管理关键技术研究实现
    发表于 06-14 16:27 8次下载

    Linux驱动程序缺陷检测研究

    驱动程序是操作系统的重要组成部分。驱动程序运行于内核态,其可靠性对于操作系统的安全可靠非常关键。针对Linux驱动程序研究基于符号执行的
    发表于 11-21 15:26 9次下载
    Linux<b class='flag-5'>驱动程序</b>缺陷检测<b class='flag-5'>研究</b>

    基于符号执行技术实现驱动程序的漏洞检测

    的思路,提出了一种基于符号执行技术实现驱动程序模拟环境,可以用于分析和检测Linux设备驱动程序中存在的安全漏洞。该环境通过模拟内核提供给驱动程序
    发表于 12-05 16:06 0次下载
    基于符号执行<b class='flag-5'>技术</b><b class='flag-5'>实现</b>的<b class='flag-5'>驱动程序</b>的漏洞检测

    Linux设备驱动程序的平台驱动程序和字符驱动程序介绍

    了解Linux设备驱动程序的基础知识,重点介绍平台驱动程序和字符驱动程序。 提出了简单的平台驱动程序实现和简单的字符
    的头像 发表于 11-27 06:32 4297次阅读

    步进电机驱动器的关键技术研究

    电子发烧友网站提供《步进电机驱动器的关键技术研究.pdf》资料免费下载
    发表于 10-09 16:30 0次下载
    步进电机<b class='flag-5'>驱动</b>器的<b class='flag-5'>关键技术研究</b>