Wi-Fi HAL

Wi-Fi 框架具有三个 Wi-Fi HAL 表面,分别由三个不同的接口表示。对于运行 Android 14 或更高版本的设备,所有三个接口都以稳定的 AIDL 软件包形式提供。这些接口以前是使用 HIDL 定义的。

  • 供应商 HAL:用于 Android 专属命令的 HAL 表面。AIDL 文件位于 hardware/interfaces/aidl 中,HIDL 文件位于 hardware/interfaces/wifi/1.x 中。
  • 请求方 HAL:用于 wpa_supplicant 的 HAL 表面。AIDL 文件位于 hardware/interfaces/supplicant/aidl 中,HIDL 文件位于 hardware/interfaces/supplicant/1.x 中。
  • Hostapd HAL:用于 hostapd 的 HAL 表面。AIDL 文件位于 hardware/interfaces/hostapd/aidl 中,HIDL 文件位于 hardware/interfaces/hostapd/1.x 中。

供应商 HAL

供应商 HAL 提供 Android 专属命令。对于基础架构 Station (STA) 和 Soft AP (SAP) 模式的运行,它是可选的(并非必需)。但是,对于 Wi-Fi AwareWi-Fi RTT 服务,它是必需的。

在 Android 14 及更高版本中,供应商 HAL 接口是使用 AIDL 定义的。在 Android 13 及更低版本中,供应商 HAL 接口是使用 HIDL 定义的。

Pre-HIDL(即 Android 8.0 之前的版本)Android 使用了一种 HAL 机制,现在称为旧版 HAL。Android 源代码目前提供了 AIDL 或 HIDL 的默认实现,该实现使用在旧版 HAL 之上运行的 shim。

旧版 HAL 标头位于 hardware/libhardware_legacy/include/hardware_legacy/ 中。基于旧版 HAL 的实现位于 hardware/interfaces/wifi/aidl/default(对于 AIDL)和 hardware/interfaces/wifi/1.x/default(对于 HIDL)中。

请求方 HAL

请求方 HAL 为 wpa_supplicant 守护进程提供了一个接口。从 Android 13 开始,该接口对 HAL 定义使用 AIDL。对于 Android 13 之前的版本,接口和供应商分区使用 HIDL。

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

Hostapd HAL

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

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

Wi-Fi 多接口并发

不同的 Android 设备可以并发支持不同的 Wi-Fi 接口组合。受支持的组合在 HAL 中定义,并向框架公开。规范格式在 hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl(对于 AIDL Wi-Fi HAL)、android/hardware/interfaces/wifi/1.6/IWifiChip.hal(对于 Wi-Fi HAL 1.6)以及 android/hardware/interfaces/wifi/1.0/IWifiChip.hal(对于 Wi-Fi HAL 1.5 及更低版本)中定义。

适用于 Android 14 及更高版本的 AIDL HAL 以及 Android 13 中提供的 Wi-Fi HAL 1.6 版本增加了将桥接 AP 接口(双频同步)指定为显式组合项的功能。

并发规范格式灵活且通用。它可以表达框架尚不支持的组合。要配置特定的组合,请使用位于 device/<oem>/<device>/BoardConfig-common.mk 中的 WIFI_HAL_INTERFACE_COMBINATIONS 构建标志。

例如,一个设备可以支持两个 STA 和一个 NAN (Wi-Fi Aware) 或 P2P (Wi-Fi Direct) 类型的接口(但不能同时支持两者)。这在 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 具有多个组合的配置,可以使用(旧版)构建标志激活这些配置。有关配置说明,请参阅: