linux系统内核数据?
正如图中看到的一样,存在着两种WiFi设备,具体是哪一类要看IEEE802.11标准的MLME如何实现。
如果直接通过硬件实现,那么设备就是硬MAC(fullMAC)设备;如果通过软件的方式实现,那么设备就是软MAC(softMAC)设备。现阶段大部分无线设备都是软件实现的软MAC设备。
通常我们把Linux内核无线子系统看成两大块:cfg80211和mac80211,它们连通内核其他模块和用户空间的应用程序。
特别指出,cfg80211在内核空间提供配置管理服务,内核与应用层通过nl80211实现配置管理接口。需要记住的是,
硬MAC设备和软MAC设备都需要cfg80211才能工作。而mac80211只是一个驱动API,它只支持软件实现的软MAC设备。
接下来,我们主要关注软MAC设备。
Linux内核无线子系统统一各种WiFi设备,并处理OSI模型中最底层的MAC、PHY两层。
若进一步划分,MAC层可以分为MAC高层和MAC底层。前者负责管理MAC层无线网络的探测发现、身份认证、关联等;
后者实现MAC层如ACK等紧急操作。大部分情况下,硬件(如无线适配器)处理大部分的PHY层以及MAC底层操作。Linux子系统实现大部分的MAC高层回调函数。
2模块间接口
从图一中我们可以看出,各个模块之间分界线很清晰,并且模块间相互透明不可见。模块之间一般不会相互影响。
举个例子,我们在WiFi设备驱动做修改(如,打补丁、添加新的WiFi驱动等),这些变更并不会影响到mac80211模块,
所以我们根本不用改动mac80211的代码。再如,回龙观北大青鸟建议添加一个新的网络协议理论上是不用修改套接字层以及设备无关层代码。一般情况下,内核通过一系列的函数指针实现各层之间相互透明。