backports的层次

 

引言

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

 

介绍

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

 



 

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

 

soft mac层的三个层次

 

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


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层。通过这一层再下发到芯片层。


数据层面的处理主要是rxtx两方面。

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


 


Logo

更多推荐