(2)高通AP10.4开发者指南——WLAN(1.2 WLAN软件架构)

本文详细介绍了WLAN软件架构,包括硬件抽象层(HAL)、底端MAC层(LMAC)、上端MAC层(UMAC)等关键组件及各层间的交互机制。此外,还深入探讨了统一WLAN软件架构在不同工作模式下的分层设计。

1.2 WLAN软件架构

WLAN驱动层被封装成数个部分,每个部分都提供了API,方便使用者定制自己的AP软件和进行二次开发。

WLAN软件整体架构说明
图1-3 WLAN软件整体架构说明

1.2.1 硬件抽象层(HAL)

硬件抽象层(HAL)是驱动和硬件芯片之间的连接部分。如果有多个芯片同时使用,例如双AP的形态,则每个芯片都会创建一个HAL实例与之对应,因此采用这样的设计,能使高通Atheros芯片和其他厂商的产品,在软件上能更容易的适配到一起。
HAL的代码可以分为两个大块,1)通用HAL接口,为上层提供API与HAL交互;2)面向指定芯片的HAL模块,主要是支持具体的硬件。目前高通Atheros芯片的HAL,主要有三个分支:AR5212, AR5416, 和AR9300。详述如下:

模块描述
AR5212本模块支持802.11b/g/a模式的legacy设备。通常,这些设备具有各自独立的PHY芯片组来与MAC芯片适配,所以对这些不同的PHY芯片组的支持也包含在本模块中。
AR5416本模块支持第一、二、三代IEEE 802.11n芯片组,这其中包括:第一代AR5416芯片组(用于具有11n处理能力的PHY芯片),第二代AR91xx和第三代92xx系列芯片组(集成PHY和MAC到一个单一芯片中)。同时,本模块也支持1x1 AR958x芯片组。
AR9300本模块支持AR93xx/AR958x系列芯片组。这些芯片组采用了先进的射频设计、新的MAC队列接口、并支持3空间流的MIMO操作。

抽象出来的HAL转接层,是尽可能的,面向不同的操作系统(OS)和不同系列的芯片时,进行代码复用。因此必须从HAL模块内部去调用这些函数,就显得尤为重要;同时HAL内部也不应该使用一些链接性质的代码,因此这里使用ah_hal_printf函数来代替printk函数,用HDPRINTF宏代替DPRINTF宏。

1.2.2 HAL接口层(HAL API)

HAL提供了一系列统一的API,供LAMC层访问。这些API适用于面向不同芯片的HAL。

1.2.3 底端MAC层 (LMAC)

LMAC层包含Atheros设备对象(ATH)。ATH层负责管理硬件的输入队列数据流,同时也管理着底层的协议,比如Block ACK(BA)处理。之所以设计LMAC层,是因为有Atheros硬件架构需要适配,而UMAC则更接近802.11协议的实现。
LMAC主要提供以下功能,并由UMAC和OSIF层控制:

  • 整合了legacy和11n芯片组的传输、接收路径,包括缓冲区和队列的处理。
  • 速率控制、DFS、频段扫描。
  • 高级11n MAC特性如帧聚合(frame aggregation)、缩短帧间间隙(RIFS)、多路收发节电技术(MIMO power save)等。
  • 802.11网络节能和设备电源状态(D0-D3)管理。
  • Beacon帧的生成和时间同步(TSF)管理。
  • 支持无线唤醒(Wake-On-Wireless)。
  • RfKill、自定义LED和GPIO算法。
  • 提供支持IQUE, 无线声传(VoW), 智能天线(Smart Antenna), 传输波束成形技术(TxBF)等功能的开关。

1.2.4 LMAC接口层(LMAC API)

LMAC API层为UMAC层提一些标准化的API。这样能方便用户替换自己的UMAC层。因此从设计角度,应避免在UMAC层直接使用LMAC的数据结构,所以最好使用这些API来访问。

1.2.5 上端MAC层 (UMAC)

Upper MAC重要实现802.11协议的处理,并为OS接口层提供API。其主要功能有以下几点:

  • AP状态机
  • 连接状态机和节点管理
  • MAC子层管理实体(MLME)服务
  • 一些基本功能比如:扫描(scanning),加密(encryption),电源管理(power management),域管理(regulatory domain),资源管理(resource management)等。
  • 与许多协议相关的特定功能如:P2P,通道直接链路建立(TDLS),WMM-AC,无线资源管理(RRM)等。
  • 支持一些集中控制式的工作模式如WDS和EXTAP等。
  • 提供支持访问控制列表(ACL),自选信道(ACS),IQUE,无线声传(VoW),智能天线(Smart Antenna),传输波束成形技术(TxBF)等功能的开关。

1.2.6 WLAN接口层(WLAN API)

这一层是UMAC层向OSIF层提供的接口层。OSIF应当使用这些API来访问UMAC的数据结构。

1.2.7 系统接口层 (OSIF)

系统接口层是系统适配的模块,为WLAN驱动提供网络协议栈接口和应用向的接口。这一层使用UMAC提供的API来完成其提供的功能。每个系统都应该适配自己的接口层。

1.2.8 高通驱动架构层(QDF)

这部分代码,提供了一整套驱动相关的接口,方便适配不同的操作系统。这是一个抽象层,由驱动调用,提供诸如创建timer、tasklet等功能。这个抽象层可以灵活的修改去适配不同的操作系统。本文档使用的操作系统是Linux 2.6。
任何硬件相关的和系统相关的,不属于OSIF层的内容,应当放到这一层(QDF)。另外,如果扩展了一些新的接口,也要确保这些函数包含在QDF层的文件中。

1.2.9 Atheros服务架构层 (ASF)

这一部分的代码,提供了一些列基本服务相关的接口,方便对不同操作系统的适配。这一层提供了一些基本服务的接口,如内存相关接口、debug相关接口等。这个抽象层可以灵活的修改去适配不同的操作系统。本文档使用的操作系统是Linux 2.6。

1.2.10 WLAN应用层(WLAN Application)

Wireless LAN应用层运行在用户空间,其包括以下内容:

  • Wireless工具:用于WLAN驱动的配置
  • apcfg:AP平台的配置文件
  • hostapd:AP模式下的802.1X/WPA/WPA2/EAP鉴权,以及WPS。
  • wpa_supplicant:STA模式下的802.1X/WPA/WPA2/EAP鉴权,以及WPS。
  • radartool:radar检测的测试/调试工具。
  • Spectral守护进程。
  • spectraltool:配置/调试spectral扫描的工具。
  • athssd:一个用于导出Spectral扫描和分析结果的工具,还可以输出干扰信息。
  • pktlog:采集WLAN MAC收发包的debug信息。

1.2.11 统一WLAN软件架构(Unified Software WLAN Architecture)

这一章节主要是在AP和STA模式下,对高吞吐量(VHT)场景的软件结构,有一个更详细的介绍。这些统一提出的栈一样的分层,支持所有的QCA软件结构,不论用户采用何种方式集成他的AP软件系统(direct attach模式或者Full/Partial offload模式)。

1.2.11.1 Offload模式分层(Offload stack)

Offload模式结构图
图 1-4 Offload模式结构图

  • OS接口层(OS Interface):为WLAN驱动提供网络栈和应用向的接口。
  • WSI层:WLAN Service API,由UMAC封装,供OSIF层调用(避免直接访问UMAC的数据结构)。
  • UMAC层:多数802.11协议在这一层实现(AP状态机,连接状态机,MLME服务)
  • 目标UMAC:处理低级别的MAC功能。管理数据流(Tx和Rx)到硬件的输入队列中,buffer管理,速率控制,Aggregation,MIMO节能。
  • WAL层:对不同MAC的高级别的功能的抽象
  • HAL层:硬件抽象层,实现底层的硬件功能,如创建descriptor,创建加密key,创建channel等。

Unified UMAC支持项

  • 新的结构基于间接化的函数指针的动态链接,同时支持direct attach和offload解决方案。
  • 在direct attach方案中,使用的是旧有的IF_LMAC函数指针。而在offload结构中,使用的是OL_WMI函数指针。
  • UMAC封装的功能(函数)可以根据需要进行开启或关闭,不论在主机端运行还是在目标端运行。

基于当前这种模块化的架构,新的offload WMI层可以很容易的继承进去。

1.2.11.2 11AC offload host-target interface

Host与target之间通过这些已经划分好的各个软件接口层,协作通信。本章节介绍的就是这些软件接口层

Host-to-Target interface diagram
Figure 1-5 Host-to-Target interface diagram

Host接口层 (HIF)
这一层对host和target之前的总线接口进行抽象,并提供了一套二者可以互相通信的机制。

Bootloader消息接口层(BMI)
在初始化过程中,host可以使用Bootloader消息接口层(BMI)提供的一些功能,比如获取target的版本信息;从target的内存中上传(或读取)一些代码和数据;读/写target寄存器;运行target上指定地址的程序等。BMI层可以下载指定的应用程序、测试程序还有补丁到代码和数据中,有时候也会设置一些target应用程序中的全局变量。

Host Target通信层 (HTC):
HTC层用于WMI和HTT二者进行发送、接收一些控制类/数据类消息,这些消息的源头的目的是target和host系统的11ac设备之间的纽带部分。

无线消息接口层(WMI)
Host与target之间的控制通路由WMI接口来完成。一些预先定义好的WMI消息,用于host WLAN与target WLAN之间交互。

Host Target传输层(HTT)
Host与target之间的数据通路由WMI接口来完成。一些预先定义好的HTT消息,用于host WLAN与target WLAN之间交互。


To be continue…

<think>我们正在讨论QCA(Qualcomm Atheros)无线驱动中的ACS(自动信道选择)相关函数调用流程。用户的问题集中在两个关键函数:`wlan_cfg80211_do_acs()`和`ieee80211_acs_scan_evhandler()`,以及它们如何与`wlan_ucfg_scan_start()`协作。 根据用户描述,流程如下: 1. `wlan_cfg80211_do_acs()` 由hostapd触发(例如,当用户在hostapd配置中设置`channel=acs`时)。 2. 该函数最终会调用`wlan_ucfg_scan_start()`启动扫描。 3. 扫描完成后,通过事件处理机制触发回调函数`ieee80211_acs_scan_evhandler()`。 4. 在回调函数中,获取扫描结果(信道参数),进行信道选择,并释放资源。 下面我们详细解释每个步骤: ### 1. **`wlan_cfg80211_do_acs()` 函数的作用** - 这是Linux内核cfg80211接口的一部分,用于处理ACS请求。 - 当hostapd需要ACS时(比如启动AP模式时指定了ACS),它会通过nl80211发送命令到内核,最终调用到这个函数。 - 函数内部会: - 准备ACS扫描参数(如扫描模式、信道列表等)。 - 调用`wlan_ucfg_scan_start()`启动扫描(这是QCA扫描框架的入口函数)。 ### 2. **`wlan_ucfg_scan_start()` 函数的作用** - 这是QCA扫描模块的统一接口,用于启动一次扫描。 - 参数包括扫描类型(被动/主动)、信道列表、持续时间等。 - 它会将扫描请求加入队列,并由底层的扫描调度器执行。 ### 3. **扫描完成后的回调机制** - 当扫描完成后,驱动会生成一个扫描完成事件(`SCAN_EVENT_COMPLETED`)。 - 事件处理层会调用注册的回调函数,这里就是`ieee80211_acs_scan_evhandler()`。 ### 4. **`ieee80211_acs_scan_evhandler()` 函数的作用** - 这是ACS扫描完成后的回调处理函数。 - 主要步骤: - 从扫描结果中提取信道质量数据(如噪声、干扰、信道负载等)。 - 运行ACS算法(如计算每个信道的干扰指数$I(ch)$,其中$ch$为信道号): $$ I(ch) = \sum_{i} w_i \cdot \text{metric}_i(ch) $$ $\text{metric}_i$ 可以是信号强度、信道占用率等,$w_i$为权重。 - 选择最优信道(干扰最小的信道): $$ \text{最优信道} = \underset{ch \in \text{候选集}}{\arg\min} I(ch) $$ - 更新VAP的信道配置(通过`ieee80211_set_channel()`等函数)。 - 释放扫描过程中分配的资源(如扫描结果缓存)。 ### 函数调用流程图 ```mermaid graph TD A[hostapd触发ACS] --> B[wlan_cfg80211_do_acs] B --> C[wlan_ucfg_scan_start 启动扫描] C --> D[底层硬件执行扫描] D --> E[扫描完成事件 SCAN_EVENT_COMPLETED] E --> F[ieee80211_acs_scan_evhandler 被调用] F --> G{解析扫描结果} G --> H[计算信道质量指标] H --> I[选择最优信道] I --> J[更新VAP信道配置] J --> K[释放资源] ``` ### 关键数据结构 - **`struct wlan_scan_params`**:扫描参数,包含信道列表、扫描模式等。 - **`struct scan_event`**:扫描事件,包含完成状态和结果数据。 - **`struct acs_scan_info`**:ACS专用扫描结果,存储信道质量数据。 §§ 相关问题 §§ 1. 如何在hostapd配置文件中启用ACS?[^1] 2. ACS算法中常用的信道质量指标有哪些?[^2] 3. 扫描事件(如`SCAN_EVENT_COMPLETED`)在QCA驱动中是如何传递的?[^3] 4. 如何修改ACS算法以优先考虑5GHz信道?[^4] [^1]: 参考hostapd配置文件中的`channel=acs`或`acs_chan=1`参数。 [^2]: 包括噪声基底(noise floor)、信道占用率(channel utilization)、重叠BSS数量等。 [^3]: 通过QCA的事件调度层(如`ol_if_scan_event_handler()`)分发给注册的回调函数。 [^4]: 在ACS权重计算中增加5GHz信道的优先级权重。 </think>### QCA ACS 程序调用接口解析 #### 1. **wlan_cfg80211_do_acs() 功能流程** - **触发源**:由 hostapd 的 ACS 指令触发(如 `iwpriv athX acs` 或 hostapd 配置文件中的 `channel=acs`)[^1] - **核心作用**:初始化 ACS 流程,封装扫描参数并调用底层扫描接口 $$ \text{调用路径:} \mathtt{wlan\_cfg80211\_do\_acs()} \xrightarrow{\text{参数封装}} \mathtt{wlan\_ucfg\_scan\_start()} $$ - **关键操作**: 1. 解析 ACS 参数(如扫描模式、信道列表) 2. 锁定无线资源(`ieee80211_vap_acs_lock()`) 3. 发送扫描请求至硬件层(`wlan_ucfg_scan_start()`) #### 2. **ieee80211_acs_scan_evhandler() 回调机制** - **触发时机**:在 `wlan_ucfg_scan_start()` 完成信道扫描后自动触发[^2] - **处理流程**: ```mermaid graph LR A[扫描完成事件] --> B{事件类型判断} B -->|SCAN_EVENT_COMPLETED| C[解析扫描结果] C --> D[计算信道干扰指数] D --> E[选择最优信道] E --> F[更新VAP信道配置] F --> G[释放扫描资源] ``` - **关键技术点**: - **信道选择算法**:基于信噪比(SNR)和干扰因子($I_{ch}$)计算信道得分 $$ \text{Score}(ch) = \alpha \cdot \text{SNR}(ch) - \beta \cdot I_{ch} $$ - **资源释放**:调用 `scan_event_free()` 回收扫描结果缓存 - **配置更新**:通过 `ieee80211_set_channel()` 应用新信道 #### 3. **完整ACS执行序列** ```c // 伪代码流程 hostapd_send_acs_request()wlan_cfg80211_do_acs() // 接收hostapd指令 → wlan_ucfg_scan_start() // 发起硬件扫描 → HW_Scan_Execution() // 底层射频扫描 ← 返回扫描结果 → ieee80211_acs_scan_evhandler() // 扫描完成回调 → acs_analyze_results() // 解析信道数据 → acs_select_optimal_channel() // 执行ACS算法 → vap_update_channel_config() // 更新信道 → scan_resource_release() // 释放资源 ``` ### 关键设计原理 1. **事件驱动架构** 扫描结果通过异步事件(`SCAN_EVENT_COMPLETED`)回调,避免阻塞系统[^3]。 2. **参数传递链** ACS配置通过多层传递: $$ \mathtt{hostapd} \xrightarrow{\text{cfg80211}} \mathtt{wlan\_cfg80211\_do\_acs()} \xrightarrow{\text{struct acs\_params}} \mathtt{ieee80211\_acs\_scan\_evhandler()} $$ 3. **资源安全机制** 使用引用计数(`vap_ref_count`)确保VAP结构在回调期间不被释放。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值