学习记录:Android14中的WiFi—概览

0 阅读6分钟

原文

source.android.google.cn/docs/core/c… source.android.google.cn/docs/core/c…

翻译

概览

image.png

Android 提供默认 Android 框架实现,其中包括对各种 WLAN 协议和模式的支持,这些协议和模式包括:

  • WLAN 基础架构 (STA)
项目说明
全称STA(站点)
俗称手机、平板、车机等设备, 连接 Wi-Fi 路由器
工作模式客户端模式 - 设备作为客户端连接到 AP(Access Point,接入点)
  • 网络共享模式或仅限本地模式下的 WLAN 热点 (Soft AP)
项目说明
全称Software Access Point(软件接入点)
俗称手机、平板、车机等开热点、个人热点、网络共享
工作模式AP 模式 - 设备自己变成 Wi-Fi 路由器

两种子模式:

模式说明使用场景
网络共享模式 (Tethering)共享蜂窝数据网络(4G/5G)给其他设备手机开热点给笔记本上网
仅限本地模式 (Local Only)不共享互联网,仅创建本地网络打印机热点、文件传输、设备配网
为什么叫 "Soft" AP?

-   硬件 AP:专用路由器芯片(如家用路由器)
-   软件 AP:通过软件模拟,复用 Wi-Fi 芯片(如手机热点)
  • WLAN 直连(点对点)
项目说明
全称(Wi-Fi Direct / P2P)Peer-to-Peer(点对点)
俗称Wi-Fi 直连、手机快传、Android Beam(旧版)
工作模式设备之间直接连接,不需要路由器、

image.png

典型应用:

场景说明
华为分享/小米互传快速传照片、视频
投屏 (Miracast)手机屏幕无线投到电视
打印手机直连打印机
游戏联机两台设备直接对战
  • WLAN 感知 (NAN)
项目说明
全称Neighborhood Aware Networking(邻近感知网络)
俗称Wi-Fi Aware
工作模式设备发现附近的其他设备,无需连接即可通信

核心特点:

特性说明
无需 AP不需要连接到任何 Wi-Fi 网络
低功耗比传统 Wi-Fi 扫描省电
双向发现设备互相发现,无需中央服务器
无需配对不像蓝牙需要手动配对
  • WLAN RTT (IEEE 802.11mc FTM)
项目说明
全称Round Trip Time(往返时间)
标准IEEE 802.11mc - Fine Timing Measurement(精细时间测量)
俗称Wi-Fi 测距、室内定位

image.png

精度对比:

技术精度说明
GPS5-10米室外好用,室内失效
Wi-Fi 信号强度 (RSSI)5-15米不稳定,受环境影响大
Wi-Fi RTT (802.11mc)0.5-2米高精度,室内定位
蓝牙 Beacon2-5米需要部署大量设备
UWB (超宽带)10-30厘米最高精度,但硬件要求高

WiFi 服务

Wi-Fi 服务在系统服务中运行,这类服务位于 packages/modules/Wifi/service/ 中。Wi-Fi 服务通过 AIDLWi-Fi HAL(硬件抽象层) 进行通信。

Wi-Fi 服务有很多种:

  • WLAN 服务(Wi-Fi Service):用于控制 WLAN 基础架构模式(包括 STA 和 AP)的主要机制。
  • WLAN 点对点服务(Wi-Fi P2P Service):管理 WLAN 直连模式。
  • WLAN 感知服务(Wi-Fi Aware Service):管理 WLAN 感知模式。
  • Wi-Fi RTT 服务(Wi-Fi RTT Service):管理 IEEE 802.11mc FTM 功能。

Wi-Fi 框架还包含一个独立的 wificond 守护进程,该进程位于 system/connectivity/wificond 中。wificond 进程通过标准的 nl80211 命令与 Wi-Fi 驱动程序进行通信。

Wi-Fi HAL (WiFi 硬件抽象层)

Wi-Fi 框架具有三个 Wi-Fi HAL 接口,分别由三个不同的接口表示:供应商 HAL(Vendor HAL)、客户端 HAL(Supplicant HAL) 和 Hostapd HAL。

Wi-Fi 框架包含三个不同的 Wi-Fi HAL 层接口。对于运行 Android 14 及更高版本的设备,这三个接口均以稳定的 Android 接口定义语言(AIDL)软件包的形式提供。此前,这些接口是使用硬件接口定义语言(HIDL)定义的。

HAL守护进程模式核心功能
Vendor HAL(vendor 硬件抽象)无(直接调驱动)通用芯片控制、射频管理
Supplicant HAL(supplicant 硬件抽象)wpa_supplicantSTA连接 Wi-Fi、认证加密
Hostapd HAL (hostapd 硬件抽象)hostapdSoft AP开热点、管理客户端
  • 供应商 HAL :用于处理 Android 特定命令的 HAL 层接口。其 AIDL 文件位于 hardware/interfaces/wifi/aidl。
项目说明
作用直接与 Wi-Fi 芯片通信,控制硬件
实现者芯片厂商(如高通、联发科、博通)
接口定义AIDL: IWifiChip, IWifiStaIface, IWifiApIface
源码路径hardware/interfaces/wifi/aidl/
// 控制 Wi-Fi 芯片的开关、模式、扫描等底层操作

-   打开/关闭 Wi-Fi 硬件
-   创建 STA/AP 接口
-   执行扫描(Scan)
-   设置信道、功率等射频参数
-   管理 芯片(chip) 固件

供应商 HAL 提供 Android 特定的命令。对于基础模式站点(Station - STA)和 软接入点(Soft AP - SAP)模式的功能运行来说,它是可选的(非必须)。但是,对于 Wi-Fi Aware 和 Wi-Fi RTT 服务,它是强制要求的。

在 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 的实现位于 

  1. hardware/interfaces/wifi/aidl/default(对于 AIDL)
  2. hardware/interfaces/wifi/1.x/default(对于 HIDL)
  • 连接管理 HAL(Supplicant HAL) :用于 wpa_supplicant 的 HAL 层接口。其 AIDL 文件位于 hardware/interfaces/wifi/supplicant/aidl。
项目说明
作用与 wpa_supplicant 守护进程通信
功能处理 Wi-Fi 连接、认证、加密(STA 模式)
接口定义AIDL: Supplicant, ISupplicantStaIface
对应模式STA(连接 Wi-Fi 路由器)
// 处理 Wi-Fi 连接的所有协议层面操作

-   扫描网络(Scan)
-   关联(Associate)
-   认证(Authentication):WPA/WPA2/WPA3/EAP
-   4次握手(4-Way Handshake)
-   密钥管理(PMK, PTK, GTK)
-   漫游(Roaming)

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

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

  • 热点管理 HAL(Hostapd HAL) :用于 hostapd 的 HAL 层接口。其 AIDL 文件位于 hardware/interfaces/wifi/hostapd/aidl。
项目说明
作用与 hostapd 守护进程通信
功能创建和管理 Wi-Fi 热点(Soft AP)
接口定义AIDL: IHostapd, IHostapdCallback
对应模式Soft AP(手机开热点)
// 管理 Wi-Fi 热点的所有操作

-   启动/停止 AP 模式
-   配置 SSID((Service Set Identifier, wifi名字)、密码、加密方式
-   管理连接的设备(客户端列表)
-   设置信道、带宽
-   处理认证和关联请求

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

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