[RK3288][Android6.0] WiFi之wpa_supplicant扫描过程
2017-07-03 17:55
302 查看
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
wpa_supplicant_req_scan ->
wpa_supplicant_scan ->
wpa_supplicant_enabled_networks //检查是否有已经使能的无线网络
wpa_supplicant_build_filter_ssids //过滤掉不符合条件的无线网络
wpa_supplicant_trigger_scan -> 触发扫描
wpas_trigger_scan_cb ->
wpa_drv_scan ->
wpa_s->driver->scan2 ->
driver_nl80211_scan2 ->
wpa_driver_nl80211_scan ->
nl80211_scan_common //cmd是NL80211_CMD_TRIGGER_SCAN,填充要发送的信息到buffer中
send_and_recv_msgs //发送给driver,这里通过netlink,之前有分析过
eloop_register_timeout //注册一个回调wpa_driver_nl80211_scan_timeout(),如果10秒之内,扫描完成事件还没发上来,那么会触发此回调去主动获取扫描完成事件
假设没有超时,那么会调用之前提过的和driver通信的socket回调函数wpa_driver_nl80211_event_receive()
wpa_driver_nl80211_event_receive ->
nl_recvmsgs ->
process_global_event ->
do_process_drv_event ->
do_process_drv_event //cmd: NL80211_CMD_NEW_SCAN_RESULTS
send_scan_event ->
wpa_supplicant_event -> //driver wrapper想WPAS通知driver event的接口函数
wpa_supplicant_event_scan_results -> //cmd:EVENT_SCAN_RESULTS
_wpa_supplicant_event_scan_results ->
wpa_supplicant_get_scan_results -> //获得扫描结果,无线网络频率,信号强度等
wpa_drv_get_scan_results2 ->
wpa_s->driver->get_scan_results2 ->
wpa_driver_nl80211_get_scan_results -> //调用80211驱动
nl80211_get_scan_results ->
send_and_recv_msgs //cmd:NL80211_CMD_GET_SCAN, 从driver获取信息, 处理函数是bss_info_handler
filter_scan_res //根据bssid过滤
scan_snr //得到每个网络的信噪比,也就是信号强度
qsort //根据信号强度排序
wpa_bss_update_scan_res //更新WPAS中bss信息,无线网络信息存在wpa_bss中
wpas_select_network_from_last_scan ->
wpa_supplicant_pick_network //根据ssid,安全设置,速率是否匹配,选择最合适的网络,这里直接返回我们设定的网络
参考:
wifi的扫描调用过程(从supplicant到kernel)
《深入理解android Wi-Fi、NFC和GPS卷》
OS: Android 6.0
Kernel: 3.10.92
wpa_supplicant_req_scan ->
wpa_supplicant_scan ->
wpa_supplicant_enabled_networks //检查是否有已经使能的无线网络
wpa_supplicant_build_filter_ssids //过滤掉不符合条件的无线网络
wpa_supplicant_trigger_scan -> 触发扫描
wpas_trigger_scan_cb ->
wpa_drv_scan ->
wpa_s->driver->scan2 ->
driver_nl80211_scan2 ->
wpa_driver_nl80211_scan ->
nl80211_scan_common //cmd是NL80211_CMD_TRIGGER_SCAN,填充要发送的信息到buffer中
send_and_recv_msgs //发送给driver,这里通过netlink,之前有分析过
eloop_register_timeout //注册一个回调wpa_driver_nl80211_scan_timeout(),如果10秒之内,扫描完成事件还没发上来,那么会触发此回调去主动获取扫描完成事件
假设没有超时,那么会调用之前提过的和driver通信的socket回调函数wpa_driver_nl80211_event_receive()
wpa_driver_nl80211_event_receive ->
nl_recvmsgs ->
process_global_event ->
do_process_drv_event ->
do_process_drv_event //cmd: NL80211_CMD_NEW_SCAN_RESULTS
send_scan_event ->
wpa_supplicant_event -> //driver wrapper想WPAS通知driver event的接口函数
wpa_supplicant_event_scan_results -> //cmd:EVENT_SCAN_RESULTS
_wpa_supplicant_event_scan_results ->
wpa_supplicant_get_scan_results -> //获得扫描结果,无线网络频率,信号强度等
wpa_drv_get_scan_results2 ->
wpa_s->driver->get_scan_results2 ->
wpa_driver_nl80211_get_scan_results -> //调用80211驱动
nl80211_get_scan_results ->
send_and_recv_msgs //cmd:NL80211_CMD_GET_SCAN, 从driver获取信息, 处理函数是bss_info_handler
filter_scan_res //根据bssid过滤
scan_snr //得到每个网络的信噪比,也就是信号强度
qsort //根据信号强度排序
wpa_bss_update_scan_res //更新WPAS中bss信息,无线网络信息存在wpa_bss中
wpas_select_network_from_last_scan ->
wpa_supplicant_pick_network //根据ssid,安全设置,速率是否匹配,选择最合适的网络,这里直接返回我们设定的网络
参考:
wifi的扫描调用过程(从supplicant到kernel)
《深入理解android Wi-Fi、NFC和GPS卷》
相关文章推荐
- rk3288 android6.0 wifi子系统 - wpa_supplicant简要介绍
- [RK3288][Android6.0] WiFi之wpa_supplicant服务启动
- [RK3288][Android6.0] WiFi之wpa_supplicant与内核通信的socket
- [RK3288][Android6.0] WiFi之wpa_supplicant初始化过程
- [RK3288][Android6.0] WiFi之wpa_supplicant的socket(服务端)
- [RK3288][Android6.0] WiFi之通过wpa_cli分析WPAS的连接过程
- [RK3288][Android6.0] WiFi的配置文件wpa_supplicant.conf
- [RK3288][Android6.0] WiFi的驱动初始化过程小结
- [RK3288][Android6.0] WiFi之与ConnectivityService的交互
- CSDN博主KrisFei基于【RK3288】【Android6.0】平台的WiFi相关经验知识
- [RK3288][Android6.0] WiFi之Autojoin对无线网络的选择机制
- [RK3288][Android6.0] WiFi之cfg80211知识点小结
- [RK3288][Android6.0] WiFi之无线网络配置的保存过程
- [RK3288][Android6.0] WiFi之DHCP获取IP address流程
- [RK3288][Android6.0] WiFi的Firmware和Nvram文件
- [RK3288][Android6.0] WiFi之Framework的socket(客户端)
- [RK3288][Android6.0] WiFi之mac80211知识点小结
- [RK3288][Android6.0] WiFi之无线网络配置的忘记(移除)过程
- [RK3288][Android6.0] WiFi之NetworkAgent对评分的更新