OpenWrt 无线backports驱动分析

引言

    Linux 无线驱动的开源项目backports的分析。

介绍

整个驱动代码分成两个结构。80211通用的功能提取出来做成通用层,这一部分叫做soft mac。 而一些与芯片处理相关的部分代码放在各个芯片目录下,这部分是芯片的特定mac层。

20150227154512905.png

一般而言 mac驱动有两个方面,一是数据转发,二是管理。我们把这两个方面,分别叫作数据层面和管理层面,或是数据面与管理面。

soft mac层的三个层次

soft mac 层就是/net/mac80211部分代码,它向上完成了与linux kernel的对接,并使用linux 的genl方式, 为用户层程序访问配置无线驱动提供了接口。单就管理面而言有四个模块。如下图:

T2

nl80211层

这一层的代码在/net/wireless/nl80211.c。这是用户程序调用相关的系统调用在内核的入口。 处理各种不同的命令。它向下会调用cfg80211层。 linux为配置有线接口定义了一些ioctl的命令字,由于无线接口的可配置项远远比有线接口的可配置多很多。 ioctl命令字空间也有限,所以为无线接口的管理面定义了使用netlink 的genl全新的接口,叫做nl80211。

cfg80211层

这一层负责管理层面的工作。不关心数据转发的业务。 驱动扫描到一个物理芯片时,此芯片(代码中叫wiphy)会注册到cfg80211层。cfg80211层就组织好所有无线接口, 以及他们的属性。它可以处理的业务有:

  • 无线虚接口相关,如channel,创建无线虚接口;加密密钥管理等。

  • 过程管理相关,station的过程管理部分(扫描,上下线)

  • 还有一部分与linux相关的,如输出sysfs;注册ethtool等。

cfg80211_rdev_list 全局变量,用于组织和管理wiphy。注意这可不是一个无线的虚拟接口。

mac80211层

这一层既负责管理层面,也要负责数据层面。

这一层主要关心的是无线虚拟接口,station等。而无线的虚拟接口会把所有的无线虚拟接口组织管理起来。 在管理层面上,wiphy会向cfg80211注册时会把mac80211_config_ops作为自己的config_ops。 这样管理层会通过mac80211层。通过这一层再下发到芯片层。

数据层面的处理主要是rx和tx两方面。 因为linux 的bridge只处理以太报文;所以此层会完成这种帧的转换;在接收时此层完成把无线数据帧(802.11) 转成以太数据(802.3),并交给linux的网络协议栈处理。发送的过程与之相反。


本文章由作者:佐须之男 整理编辑,原文地址: OpenWrt 无线backports驱动分析
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资 源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。

相关推荐