基于linux的无线网卡驱动程序

点赞:15708 浏览:69529 近期更新时间:2024-03-06 作者:网友分享原创网站原创

摘 要 : 无线局域网是当前较为常见的一种无线接入技术,具有运行速度高一级灵活性强的优势,研发基于linux的无线局域网产品成为一大热点课题.首先对WLAN无线网卡及linux网络设备进行简单介绍,之后对基于linux的无线网卡驱动程序结构及设计方案进行分析.

关 键 词 : linux,WLAN,无线网卡,驱动程序

中图分类号:TN967 文献标识码:A 文章编号:1671-7597(2012)0910013-01

0 前言

无线局域网是当前应用范围较广的一种无线接入技术,其最大的优势在于运行速度快以及灵活程度高,对基于linux的无线局域网产品进行研发已经成为当前的一大热点课题.

1.WLAN无线网卡及linux网络设备

1.1 WLAN无线网卡

WLAN,即无线局域网,其重要组成部分之一就是无线网卡,也就是通信网络接口卡,无线局域网除无线网卡之外的另一重要组成部分是接入点/桥接器.借助无线网卡硬件及软件可以确保无线局域网物理层及MAC层的实现,不仅如此,无线网卡还为用户设备提供与接入点/桥接器进行连接的接口.当前应用无线网卡的主要方式是PCMCIA以及CF卡,Atmel芯片组是USB设备无线网卡的基础,除此之外的绝大部分无线网卡都是依托于Intersil Pri或Lucent Hermes芯片组的.无线网卡一大关键硬件就是以802.11标准为设计依据的MAC协议处理芯片,对其性能的要求主要体现为以下两方面:一方面,需要具备将所接收到的来自于射频模块的信号转换为主机所能接收的数据格式能力,另一方面,还需要能够对所接收到的来自于驱动程序的数据包进行转换,并以802.11标准数据包形式传输给射频前端.MAC层全部功能借助MAC协议处理芯片均可以得以实现,对于用户而言,在使用过程中只需要添加memory以及对应的物理层,便可以得到一个完整性的无线局域网连接.

1.2 linux网络设备

处于便于管理的考虑,linux全部硬件设备被划分为字符设备、块设备以及网络设备等三大类.

2.基于linux的无线网卡驱动程序结构及设计方案

无线网卡的种类繁多,网卡不同,相应的支持硬件也有所区别,这也就决定了编写驱动程序也不尽一致.简言之,USB接口的网卡不需要任何模块的支持,CF及PCMCIA接口的网卡驱动需要有Card Service(CS)模块支持,Orinoco接口的网卡除此之外还需要Hermes模块加以辅助.在参考程序的选择上,笔者在此以cisco 350系列pcmcia无线网卡驱动为主,且已将其成功安装在笔记本电脑中,同时其收发包数据格式已通过airopeek测试,以orinoco.c,mpi350.c及Tenda 7722u USB设备驱动程序为辅.和传统的以太网卡驱动程序设计相比较而言,无线网卡中诸如开关网卡、加载及卸载模块等并无明显区别,因此,笔者只选择驱动中诸如函数初始化、收发数据等具有无限特色的内容进行介绍,这些也是驱动程序的核心.

2.1 网卡初始化

基于linux的无线网卡驱动程序参考属性评定
有关论文范文主题研究: 关于驱动程序的论文范文素材 大学生适用: 学术论文、专升本论文
相关参考文献下载数量: 84 写作解决问题: 如何怎么撰写
毕业论文开题报告: 论文提纲、论文前言 职称论文适用: 技师论文、中级职称
所属大学生专业类别: 如何怎么撰写 论文题目推荐度: 经典题目

网卡初始化就是对网卡存在进行检测,主要内容就是对设备结构进行初始化,并将其在系统中进行登记.通常情况下,在对某网卡设备进行登记时,核心会自动发出初始化请求.

初始化函数主要具有以下功能:

1)在初始化程序中,以硬件特征为主要依据,对硬件存在与否进行检测,并作出是否将该驱动程序予以启动的决定,

2)对request-irq及request-region进行调取,完成I/O基地址以及设备中断号的登记,同时对其进行检测,

3)填充硬件帧头,这也是驱动程序的一项重要工作内容.通常情况喜爱,硬件会将自身硬件帧头添加到待发送的上层数据前,例如以太网就拥有添加在上层ip或ipx数据包前的14字节的帧头.驱动程序提供hard-header方法,该程序会在协议层进行数据发送前被调取.应在dev->hard header len填入硬件帧头的长度信息,以便协议层预留出必要空间,此时hard-header程序只需要对skb-push进行调取同时准确填写硬件帧头即可,

4)负责对设备结构所接收到的大多数的域段进行填写.以太网接口很多设备结构网络接口信息的设置都是借助ether setup()函数得以实现的,该函数已被归入linux内核内部函数,无需特别指明.


2.2 数据包传输

分析OSI七层协议不难发现,在应用层具有数据传输需求的情况下,数据包传输方向是从上到下的,同时在各层都会添加对应的帧头,最终借助dev queue xmit()函数将数据包传输至网络接口.网络接口的作用就是向网卡传送数据包,以确保物理传输的顺利实现.根据设备结构可知,所有的网络接口都具有dev- > hard start xmit硬件传输函数指针,其主要作用是辅助linux进行数据传输.Cisco352驱动程序需要在hard start xmit函数中进行的工作主要有:

1)确定一个未经使用的FID,并将其添加到MAC芯片链表中.这部分是Cisco352驱动程序的特色之一.

2)对802.11控制域的结构体struct TXHDR-CTRL进行填充,从而为802.11帧头的构建奠定坚实基础.

3)对来自于协议层的帧格式进行判断,并将帧头长度确定下来.根据802.11协议,无线网卡只可以对三种帧格式进行传输,分别是数据帧hdrlen等于30,管理帧hdrlen等于24,控制帧hdrlen等于16或10.

4)在网卡发送缓冲区中填入sk buf中的数据包,同时要注意格式要求,因为linux内核智能提供以太网接口,因此来自于协议层的数据包为802.3或以太网格式,但无线网卡能够支持的数据包格式只有802.11,因此,驱动程序必须在网卡缓冲区中对帧结构进行调整.在传输过程中,MAC芯片处理方式主要是受802.11帧头的帧控制部分所控制.