分享
 
 
 

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

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

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]。

3 无线网卡驱动程序框架

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

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

class wlan_drvDriver : protected

KNdisMiniDriver

{

protected:

// must implement the entry point

NTSTATUS DriverEntry(IN PVOID RegistryPath);

};

NTSTATUS wlan_drvDriver::DriverEntry(IN PVOID)

{

TRACE("wlan_drvDriver::DriverEntry Com piled at " __TIME__ " on " __DATE__ "\n");

KNDIS_MINIPORT_CHARACTERISTICS Chars;

return Chars.Register(*this);

}

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小端口驱动程序,其主体部分中包括驱动程序框架、驱动程序的初始化、发送和接收数据和中断处理在内的要害技术细节。本文所设计的网卡已经在原型网卡中运行,基本满足了设计要求。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有