Wi-Fi HAL

Wi-Fi 框架具有三个 Wi-Fi HAL surface,分别由三个不同的接口表示。所有三个接口都有 HIDL 定义,其中两个接口以稳定 AIDL 软件包的形式提供。

  • 供应商 HAL:Android 专用命令的 HAL surface。HIDL 文件位于 hardware/interfaces/wifi/1.x 中。
  • 客户端 HAL:wpa_supplicant 的 HAL surface。HIDL 文件位于 hardware/interfaces/supplicant/1.x 中,AIDL 文件位于 hardware/interfaces/supplicant/aidl 中。
  • Hostapd HAL:hostapd 的 HAL surface。HIDL 文件位于 hardware/interfaces/hostapd/1.x 中,AIDL 文件位于 hardware/interfaces/hostapd/aidl 中。

供应商 HAL

供应商 HAL 提供 Android 专用命令。对于基础架构 Station (STA) 和 Soft AP (SAP) 模式的正常运行而言,供应商 HAL 是可选的(不是必需的)。不过,对于 Wi-Fi 感知Wi-Fi RTT 服务而言,供应商 HAL 是必要 HAL。

在 HIDL 之前(即 Android 8.0 版本之前),Android 使用的是现在称为“旧版 HAL”的 HAL 机制。Android 源代码目前使用在旧版 HAL 之上运行的 shim 来提供 HIDL 默认实现。

旧版 HAL 标头位于 hardware/libhardware_legacy/include/hardware_legacy/ 中。基于旧版 HAL 的实现位于 hardware/interfaces/wifi/1.x/default 中。

客户端 HAL

客户端 HAL 为 wpa_supplicant 守护程序提供接口。从 Android 13 开始,该接口使用 AIDL 进行 HAL 定义。对于 Android 13 之前的版本,接口和供应商分区均使用 HIDL。

wpa_supplicant 源代码位于 external/wpa_supplicant_8/wpa_supplicant 中。参考实现提供了一个 AIDL 接口,该接口在 aidl 子目录中实现。

Hostapd HAL

Hostapd HAL 为 hostapd 守护程序提供接口。 从 Android 13 开始,该接口使用 AIDL 进行 HAL 定义。对于 Android 13 之前的版本,接口和供应商分区均使用 HIDL。

hostapd 源代码位于 external/wpa_supplicant_8/hostapd 中。 参考实现提供了一个 AIDL 接口,该接口在 aidl 子目录中实现。

Wi-Fi 多接口并发

不同的 Android 设备可以并行支持不同的 WLAN 接口组合。受支持的组合在 HAL 中定义,并提供给框架。对于 Wi-Fi HAL 1.5 及更低版本,规范格式在 android/hardware/interfaces/wifi/1.0/IWifiChip.hal 中定义;对于 Wi-Fi HAL 1.6 及更高版本,规范格式在 android/hardware/interfaces/wifi/1.6/IWifiChip.hal 中定义。Wi-Fi HAL 版本 1.6(在 Android 13 中提供)添加了将桥接 AP 接口(双频同步)指定为显式组合项的功能。

并发规范格式非常灵活,且是通用格式。它可以表示框架尚不支持的组合。如需配置特定组合,请使用位于 device/<oem>/<device>/BoardConfig-common.mkWIFI_HAL_INTERFACE_COMBINATIONS 构建标记。

例如,一台设备可以支持两个 STA 和一个 NAN(Wi-Fi 感知)类型或点对点(Wi-Fi 直连)类型的接口(但不能同时支持这两种接口)。这在 device/<oem>/<device>/BoardConfig-common.mk 中表示为:

WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 2}, {{NAN, P2P}, 1}}

再举一例,一台设备可以支持具有单个 AP 的 STA 或没有其他接口的桥接 AP(双频同步)。其表示方式如下:

WIFI_HAL_INTERFACE_COMBINATIONS := {{{STA}, 1}, {{AP}, 1}}, {{{AP_BRIDGED}, 1}}

或者,参考 HAL 也可以具有适合多种组合的配置,这些配置可通过(旧版)构建标志进行启用。如需查看配置说明,请参阅: