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 Aware 和 Wi-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 具有多个组合的配置,可以使用(旧版)构建标志激活这些配置。有关配置说明,请参阅: