Wi-Fi 框架具有三个 Wi-Fi HAL surface,分别由三个不同的接口表示。 对于搭载 Android 14 或更高版本的设备,所有三个接口都以稳定 AIDL 软件包的形式提供。这些接口以前使用 HIDL 进行定义。
- 供应商 HAL:Android 专用命令的 HAL surface。AIDL 文件位于
hardware/interfaces/aidl
中,HIDL 文件位于hardware/interfaces/wifi/1.x
中。 - 客户端 HAL:wpa_supplicant 的 HAL Surface。AIDL 文件位于
hardware/interfaces/supplicant/aidl
中,HIDL 文件位于hardware/interfaces/supplicant/1.x
中。 - Hostapd HAL:hostapd 的 HAL surface。AIDL 文件位于
hardware/interfaces/hostapd/aidl
中,HIDL 文件位于hardware/interfaces/hostapd/1.x
中。
供应商 HAL
供应商 HAL 提供 Android 专用命令。对于基础架构 Station (STA) 和 Soft AP (SAP) 模式的正常运行而言,供应商 HAL 是可选的(不是必需的)。不过,对于 Wi-Fi 感知和 Wi-Fi RTT 服务而言,供应商 HAL 是必要 HAL。
在 Android 14 及更高版本中,供应商 HAL 接口使用 AIDL 进行定义。在 Android 13 及更低版本中,供应商 HAL 接口使用 HIDL 进行定义。
在 HIDL 之前(即 Android 8.0 版本之前),Android 使用的是现在称为“旧版 HAL”的 HAL 机制。Android 源代码目前使用在旧版 HAL 之上运行的 shim 来提供 AIDL 或 HIDL 默认实现。
旧版 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 开始,该接口使用 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 中定义,并提供给框架。对于 AIDL Wi-Fi HAL,规范格式在 hardware/interfaces/wifi/aidl/android/hardware/wifi/IWifiChip.aidl
中定义;对于 Wi-Fi HAL 1.6,规范格式在 android/hardware/interfaces/wifi/1.6/IWifiChip.hal
中定义;对于 Wi-Fi HAL 1.5 及更低版本,规范格式在 android/hardware/interfaces/wifi/1.0/IWifiChip.hal
中定义。
AIDL HAL(适用于 Android 14 及更高版本)和 Wi-Fi HAL 版本 1.6(在 Android 13 中提供)添加了将桥接 AP 接口(双频同步)指定为显式组合项的功能。
并发规范格式非常灵活,且是通用格式。它可以表示框架尚不支持的组合。如需配置特定组合,请使用位于 device/<oem>/<device>/BoardConfig-common.mk
的 WIFI_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 也可以具有适合多种组合的配置,这些配置可通过(旧版)构建标志进行启用。如需查看配置说明,请参阅: