为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

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

2012-12-09 4页 pdf 182KB 47阅读

用户头像

is_396588

暂无简介

举报
基于Linux的无线网卡驱动程序   收稿日期 :2004 - 10 - 26   作者简介 :王玉东 (1979 - ) ,男 ,河南郑州人 ,信息工程大学硕士研究生 ,主要研究方向为无线通信技术。 基于Linux 的无线网卡驱动程序 王玉东 ,冯 茜 ,张效义 (信息工程大学 信息工程学院 ,河南 郑州 450002) 摘要 :文章分析了Linux 下无线网卡驱动程序结构及设计方法 ,着重研究了无线网卡的初始 化 ,数据包的接收和发送 ,同时对数据帧在系统中的存储转换做了相关探讨。 关键词 :Linux ;WLAN ;无线网卡 ;驱动程序 中图分类...
基于Linux的无线网卡驱动程序
  收稿日期 :2004 - 10 - 26   作者简介 :王玉东 (1979 - ) ,男 ,河南郑州人 ,信息工程大学硕士研究生 ,主要研究方向为无线通信技术。 基于Linux 的无线网卡驱动程序 王玉东 ,冯 茜 ,张效义 (信息工程大学 信息工程学院 ,河南 郑州 450002) 摘要 :文章了Linux 下无线网卡驱动程序结构及设计方法 ,着重研究了无线网卡的初始 化 ,数据包的接收和发送 ,同时对数据帧在系统中的存储转换做了相关探讨。 关键词 :Linux ;WLAN ;无线网卡 ;驱动程序 中图分类号 :TP311     文献标识码 :A 文章编号 :1671 - 0673 (2005) 02 - 0078 - 03 Wireless Network Interface Card Driver in Linux WANG Yu-dong ,FENG Qian ,ZHANG Xiao-yi ( Institute of Information Engineering , Information Engineering University , Zhengzhou 450002 ,China) Abstract :This paper analyses the architecture of wireless NIC driver and the design methods. The focus of this paper is on the initialization ,receiving and transmitting of packets in NIC driver. The paper also dis2 cusses the storage format of data frame in the system. Key words :Linux ; WLAN ; wireless NIC ; driver   当今 ,作为无线接入技术中的一种 ,无线局域 网以其高速和灵活性越来越得到人们的青睐 ,开发 Linux下的无线局域网产品受到了越来越多的关 注。本文简单分析了 Linux 下的网络设备及其网 络驱动体系结构 ,重点分析了无线网卡的驱动程 序 ,为编写Linux 下无线网卡驱动程序提供了设计 方法。 1  WLAN 无线网卡 无线网卡是无线局域网 (WLAN) 的重要组成 部分 ,WLAN 的物理层及 MAC 层是由无线网卡的 硬件及其软件完成的 ,而 LLC 层以上各层均有计 算机软件来实现。WLAN 包括进行通信的网络接 口卡 (简称无线网卡 ) 和接入点/ 桥接器 (AP/ 网 桥) 。无线网卡提供了最终用户设备 ( PC 机) 与接 入点/ 桥接器之间的接口。 目前 ,无线网卡主要以 PCMCIA ,Compact Flash (CF)卡的形式广泛应用。大多数可用的无线网卡 都是基于 Intersil Prism 或 Lucent Hermes 芯片组的 , 其中 USB 设备的无线网卡则是 Atmel 芯片组支持 的。一块无线网卡主要由调制解调 ,RF/ IF 转换 , 功率放大 ,基带处理和 MAC控制组成。 MAC处理芯片是无线网卡硬件中的重要 部分 ,它是基于 802. 11 设计的 ,要能将从射频 模块接收来的信号处理成送入主机所需的数据格 式 (802. 11 帧) ,也要能将由驱动程序传下来 的数据包转换成 802. 11 标准的数据包 ,交给射频 前端进行发送。MAC 协议处理芯片要有灵活的总 线接口、协议方式和物理支持 ,使多种产品的设计 能用同一个芯片。该芯片能完成所有 MAC 层的功 能 ,用户使用时只要加上 memory 和相应的物理层 来完成一个完整的 WLAN 的连接就可以了。 2  Linux 网络设备 在LINUX中 ,为了简化对设备的管理 ,所有外 围的硬件设备被归结为 3 类 :字符设备 (如键盘、鼠 第 6 卷  第 2 期            信 息 工 程 大 学 学 报            Vol. 6 No. 2  2005 年 6 月          Journal of Information Engineering University           Jun. 2005 标等) 、块设备 (如硬盘、光驱、软驱等) 和网络设备 (也称为网络接口 ,network interface) ,如以太网卡 , 无线网卡。为了屏蔽网络环境中物理网络设备的 多样性 ,Linux 对所有的物理设备进行抽象并定义 了一个统一的概念 ,称之为接口 ( Interface) 。所有 对网络硬件的访问都是通过接口进行的 ,接口提供 了一个对所有类型的硬件一致化的操作集合来处 理基本数据的发送和接收。一个网络接口被看作 是一个发送和接收数据包 (packets) 的实体。对于 每个网络接口 ,都用一个 device 的数据结构示 , 有关该数据结构的具体内容 ,请参照 include/ linux/ netdevice. h。通常网络设备是一个物理设备 ,本文 主要针对无线网卡。在内核启动时 ,通过网络设备 驱动程序 ,将登记存在的网络设备。所有被发送和 接收的包都用数据结构 sk buff 表示。这是一个具 有很好的灵活性的数据结构 ,可以很容易增加或删 除网络协议数据包的首部 ,它的具体内容请参照 include/ linux/ skbuff . h。 Linux网络驱动程序的体系结构可以分为 4 层 ,从上到下分别为协议接口层、网络设备接口层、 提供实际功能的设备驱动功能层 ,以及网络设备和 网络媒介层。在设计网卡驱动程序时 ,最主要的工 作就是完成设备驱动功能层 ,使其满足自己所需的 功能。 3  无线网卡驱动程序 无线网卡类型众多 ,不同的网卡都有不同的硬 件支持 (像 Cisco ,Compaq ,Nokia 使用 Prism 芯片组 , 而Lucent Orinoco 卡和 Apple Airport 使用 Hermes 芯 片组 ,除此之外 ,USB 设备的无线网卡则采用 Atmel 芯片组 ,像 D-Link ,Tenda 等) ,所以 ,它们在驱动程 序的编写上也会有所不同。简单地说 ,CF、PCMCIA 接口的网卡驱动需要有 Card Service (CS) 模块的支 持 ,Orinoco 的网卡还需要有 Hermes 模块的帮助 ,而 USB 接口的网卡则不需要这些。 以下用 cisco 350 系列 pcmcia 无线网卡驱动作 为主要参考程序 ,此程序已在笔记本电脑上安装成 功 ,并用 airopeek 测试过其收发包的数据格式 ,准 确无误。辅助参考的程序有 orinoco. c ,mpi350. c 以 及 Tenda 7722u USB 设备驱动程序。在文章中 ,主 要介绍了无线网卡驱动编写的共同方法和步骤 (不 考虑与硬件相关的代码) ,为以后分析其它类型的 网卡或者编写驱动方面提供了参考。 由于无线网卡与传统的以太网卡在驱动程序 设计上有些模块是相同的 ,比如网卡的打开和关 闭 ,模块的加载和卸载 ,所以本文只分析了驱动中 具有无线特色的部分 :初始化函数 ,数据的发送和 接收 ,同时它们也是驱动程序的核心内容。 3. 1  网卡的初始化 所有网卡设备初始化工作主要是检测网卡的 存在 ,初始化网卡的 device 结构及在系统中登记该 设备。当系统登记一个网卡设备时 ,核心一般会请 求该设备的驱动程序初始化自己。通过分析 ,初始 化函数的功能主要有 : (1)检测设备 ,在初始化程序里根据硬件的特 征检查硬件是否存在 ,然后决定是否启动这个驱动 程序。 (2)检测该设备的 I/ O 地址和中断号 ,调用 re2 quest irq 和 request region 向系统登记 I/ O 基地址和 设备中断号。 (3)填充硬件帧头 ,这是驱动程序的主要工作 之一。硬件一般都会在上层数据发送之前加上自 己的硬件帧头 ,比如以太网就有 14 字节的帧头。 这个帧头是加在上层 ip、ipx 等数据包前面的。驱 动程序提供一个 hard header 方法 ,协议层 (ip、ipx、 arp 等)在发送数据之前会调用这段程序。硬件帧 头长度必须填在 dev- > hard header len ,协议层会在 数据之前保留好硬件帧头的空间 ,这样 hard header 程序只要调用 skb push 然后正确填入硬件帧头就 可以了。对于无线网接口 ,802. 11 帧头的组建由 MAC协议处理芯片完成 ,所以在驱动中只完成 hard header 函数的说明工作 ,不做具体的编写。 (4) 填写传入该设备 device 结构的大部分域 段 ,对于以太网接口 ,device 结构中许多有关网络 接口的信息都是通过 ether setup ( ) 函数统一设置 的 ,此函数已作为 Linux 内核的内部函数 ,不需要 在驱动中再次指明。对于无线网接口 ,在程序中可 采用 wifi setup ()函数进行设置 ,其中填写了一些无 线局域网的通用配置 : static void wifi setup (struct net device 3 dev , struct net device 3 ethdev) { / 3 硬件帧头的填充函数 3 / dev- > hard header = 0 ; dev- > rebuild header = 0 ; dev- > hard header cache = 0 ; dev- > header cache update = 0 ; / 3 一些处理函数的初始化 3 / 97第 2 期               王玉东等 :基于 Linux 的无线网卡驱动程序                  dev- > hard header parse = wll header parse ; / 3 获得源地址 3 / dev- > hard start xmit = &airo start xmit11 ; / 3 数据包传输函数 3 /   ⋯⋯ # ifdef WIRELESS EXT dev- > get wireless stats = airo get wireless stats ;   # endif / 3 无线参数统计 3 /   ⋯⋯   dev- > type = ARPHRD IEEE80211 ; / 3 无线局域网 3 /   dev- > mtu = 2312 ;/ 3 无线网最大传输单位 3 /   ⋯⋯} 3. 2  数据包的传输 通过对 OSI七层协议的分析可知 ,当应用层要 传输数据时 ,数据包是沿着网络协议由上往下逐层 下传的 ,在每一层都会加上相应的帧头。最后 ,数 据包将通过 dev queue xmit ( ) 函数传送给网络接 口。网络接口的任务就是将数据包传送给网卡 ,让 网卡完成最终的物理传输。从 device 结构中可以 看到 ,每个网络接口都有一个 dev- > hard start xmit 的硬件传输函数指针 ,Linux 正是通过这个函数指 针来完成实际的数据传输。 Cisco352 驱动程序在 hard start xmit 函数中完 成的工作主要有 : (1)找到一个未使用过的 FID ,将其加入 MAC 芯片内的链表中 ( FID LIST) 。当上层数据帧传下 来时 ,根据此帧的长度在 FID LIST 中选择匹配的 FID 值 ,如果没有找到与之匹配的 FID 值 ,则将这 个没有使用过的 FID 作为此帧长度的匹配值。这 是 cisco 网卡驱动特有的部分 ,其它网卡只是分配 跟数据长度相同的缓冲区即可。 (2)填充 802. 11 控制域的结构体 struct TXHDR CTRL ,此结构体的内容是为构建 802. 11 帧头做准 备。由于网卡的不同 ,结构体的内容也不完全相 同 ,需要自己编写。在 Cisco352 中 ,结构体原型 如下 :   struct TXHDR CTRL {u16 status ; u16 reserved1 ; u16 reserved2 ; u32 sw support ; u8 retry count ; u8 tx rate ; u16 tx control ; }TXHDR CTRL 此为 802. 11 的控制域结构 ,在程序中设置 tx control = TXCTL TXOK| TXCTL TXEX| TXCTL 802 11| TXCTL ETHERNET| TXCTL NORELEASE ,将其写 入网卡的发送缓冲区。tx control 为一个 16bit 的变 量 ,每一比特都对应帧中的特定信息 ,由 tx control 可以构建 MAC帧头。 (3)判断从协议层传下来的帧格式 ,确定帧头 长度。由 802. 11 协议可知 ,所有无线网卡可以传 输的帧格式有 3 种 : 数据帧 hdrlen = 30 ; 管理帧 hdrlen = 24 ;控制帧 hdrlen = 16 或 10。 (4)把 sk buf 中的数据包按照特有格式写入网 卡发送缓冲区中。由于 Linux 内核所提供的网络 接口为以太网接口 ,所以从协议层传下来的数据包 是具有 802. 3 或以太网格式的 ,而无线网卡必须发 送具有 802. 11 格式的数据包 ,这样驱动程序需在 网卡缓冲区内组成这样的帧结构 ,如图 1 所示。 TXDHR CTRL 802111 格式 帧头信息 数据 长度 80212 格式 帧头信息 数据 图 1  交换帧结构   传输时 ,主机软件使用 802. 11 帧头信息中的 帧控制部分来控制帧如何被 MAC 芯片处理 ,MAC 芯片则使用 TXHDR CTRL 中的 tx control 和缓冲区 中数据部分来构造符合 802. 11 协议的标准帧。 (5)给出硬件发送命令 ,使网卡执行发包。以 cisco 为例 ,该函数程序流程如图 2。 图 2  发送数据流程图 (下转第 87 页) 08                    信 息 工 程 大 学 学 报                  2005 年 4  小结 个性化推荐技术可以使电子商务网站的浏览 者转变为购买者 ,提高电子商务网站的销售能力 , 提高客户对电子商务网站的忠诚度 ;同时它也能使 用户更为方便地寻找到感兴趣的商品。作为实现 网络商业的关键环节之一的代理技术 ,在未来的网 上交易中将会融入更多的智能和更完整的运行控 制机制 ,必将成为电子商务未来的主流技术之一。 参考文献 : [1 ] 张社华 ,刘永才 ,刘德. 网上导购系统的一个解决方案 [J ] . 上海大学学报 (自然科学版) ,2002 ,6 :431 - 435. [2 ] 张维明. 智能协作信息技术 [M] . 北京 :电子工业出版 社 ,2002. [3 ] Shouhong Wang. Analyzing agents for Electronic Commerce [J ] . Information Systems Management , 1999 ,16 (1) :40 - 42 [4 ] Zaiane O R , Xin M ,et al. Discovering Web access patterns and trends by applying OLAP and DATA mining technology on Web logs[A ] . Proceedings of the IEEE International Fo2 rum on Research and Technology Advances in Digital Li2 braries[ C] . Los Alamitos , CA : IEEE CS Press , 1998 ,19 - 29. [5 ] Sarwar B M ,Karypis , et al. Application of dimensionality re2 duction in recommender system[A ] . Proceedings of the ACM WebKDD Workshop on Web Mining for E2Commerce [ C ] . New York :ACM Press , 2000 ,158 - 167. [6 ] Charles F Goldfarb , Paul Prescod. XML 使用技术[M] . 北 京 :清华大学出版社 ,1999. (上接第 80 页) 3. 3  数据包的接收 由于使用了硬件中断请求机制 ,当物理网络设 备接收到新数据时 ,它将发送一个硬件中断请求给 系统 ,系统通过驱动程序进行数据包的接收 ,所有 网卡都是靠中断进行数据接收的。在中断处理程 序中 ,首先判断网卡的硬件类型 (以太网卡或无线 网卡) ,根据帧控制位确定数据包帧头的长度 ;然后 申请一块 sk buff ( skb) ,从硬件读出数据放置到申 请好的缓冲区里。接下来填充 sk buff 中 的一些信 息。skb- > dev = dev ,判断收到帧的协议类型 ,填入 skb- > protocol = htons ( ETH P 802 2) 。把指针 skb- > mac. raw 指向硬件数据然后丢弃硬件帧头 ( skb pull) ,令 skb- > pkt type = PACKET OTHERHOST ,标 明第二层 (链路层) 数据类型。最后调用 netif rx ( ) 把数据传送给协议层进行处理 ,流程如图 3。 4  结束语 本文详细分析了 cisco352 网卡的驱动程序 ,给 出了编写无线网卡驱动的方法 ,并且研究了数据包 的收发原理及在网卡中的存储格式 ,为利用无线网 卡开发其它产品 ,例如设计 AP 或无线网桥提供了 编写软件模块的方法。 图 3  接收数据流程图 参考文献 : [1 ] Michael K Johnson. Writing Linux Device Driver [ EB/ OL ] . DECUS’95 in Washington. www. net. uom. gr/ Books/ Manu2 als/ welindrv. pdf ,1998. [2 ] Alessandro Rubini.LINUX设备驱动程序 ,第二版 [M] . 北 京 :中国电力出版社 ,2002. [3 ] 吕军 ,徐雄. Windows2000 下无线网卡驱动的设计与实 现[J ] . 江苏通信技术 ,2002 ,18 (2) :24 - 27. [4 ] 张留成. 嵌入式无线局域网设备的设计和实现 [D ] . 北 京 :北京邮电大学 ,2002. 78第 2 期                杨  焱等 :个性化推荐技术的研究                   
/
本文档为【基于Linux的无线网卡驱动程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索