STA 扫描(一)从 Framework 到 nl80211
你打开 WiFi 列表,下拉刷新——
startScan()几乎立即被调用,数十个 Java 函数和 C++ 函数被依次执行,最终一条NL80211_CMD_TRIGGER_SCAN命令被发往内核。这不是一个简单的「扫一下」——这是一次四层精心编排的协作:Framework 的WifiScanningServiceImpl是战术指挥中心,接收各方扫描请求、合并同类项、排队分派;ScanRequestProxy是节流阀,防止操作员无限制地按发射按钮烧坏设备;wificond 是翻译官,把指挥中心的 Java 指令翻译成天线能执行的 nl80211 属性;内核 cfg80211 是天线控制器,验证频率可用性后把真正的 Probe Request 发射任务交给驱动和固件。
在 Supplicant 启动篇 中,我们讲完了 wpa_supplicant 的 eloop 事件循环、AIDL 接口层、核心数据结构。本篇跳到另一个主线——WiFi 打开后,系统怎么执行一次扫描?我们聚焦扫描怎么被触发、参数怎么构建、怎么从 Java 世界一路下发到内核。Supplicant 内部的扫描引擎(radio work、BSS 缓存、PNO)留给中篇,驱动执行和 WiFi 6E/7 留给下篇。