上海潤欣科技股份有限公司創(chuàng)研社
前言
現(xiàn)如今,WiFi已經(jīng)和我們生活密不可分了,不管我們是在公交車上、地鐵上,還是走在大街上,我們都可以享受到WiFi的信號(hào),WiFi5 已經(jīng)進(jìn)入千家萬戶,下面將分享基于WIFI5搭配Android 9 pie上面實(shí)現(xiàn)2.4/5G上網(wǎng)功能。隨著Android版本更替,在Android 9 與Android 10中wifi的結(jié)構(gòu)層次與Android 8以前的對比也發(fā)生了許多變化。
注:本文章所述的WIFI5包括1*1/2*2芯片,有SDIO、USB、PCIE三種接口方式,在不同的應(yīng)用場景中有著廣泛應(yīng)用,想詳細(xì)了解的可以咨詢潤欣的商務(wù)端。
添加CLD驅(qū)動(dòng)移植
本文以高通WIFI5 CLD驅(qū)動(dòng)為例。編譯驅(qū)動(dòng)前,請確保Linux 內(nèi)核成功編譯完成。低于Linux 4.4內(nèi)核版本需要在wifi 驅(qū)動(dòng)部分適配backports。
操作步驟:
1) 修改linux內(nèi)核路徑和toolchain路徑,配置好IF_TYPE和BOARD_TYPE
2) 進(jìn)入AIO/build目錄
3) 通過命令make進(jìn)行編譯.
編譯完成后:
把固件放置到/lib/firmware目錄下
然后通過命令sudo insmod ./wlan.ko安裝WIFI驅(qū)動(dòng)
驅(qū)動(dòng)移植好了,以后就是加載驅(qū)動(dòng),測試功能,但是在實(shí)際過程中可能會(huì)有許多問題需要去debug。最常見的是wlan 接口生成不成功,以及無法掃描AP等……這些都需要我們一步步跟著wifi的啟動(dòng)流程去分析。
Android 9.0里wifi的框架做了一些變動(dòng),包括wifi開啟流程,前面與8.0差不多,到了WifiServiceImpl后面就有了很大變動(dòng),最重要的變化是WIFI HAL層。
WLAN HAL
HIDL 讀作 hide-l,Wifi到Andoid O之后所以Android P也一樣不再使用jni,而是使用HIDL,Hardware Interface Define Language。
WLAN 框架具有三個(gè) WLAN HAL 表面,分別由三個(gè)不同的 HIDL 軟件包表示:
Vendor HAL:Android 專用命令的 HAL 表面,HIDL 文件位于hardware/interfaces/wifi/1.x中。
客戶端 HAL:wpa_supplicant的 HAL 表面,HIDL 文件位于hardware/interfaces/supplicant/1.x中。
Hostapd HAL:hostapd的 HAL 表面,HIDL 文件位于hardware/interfaces/hostapd/1.x中。
根據(jù)我們實(shí)際調(diào)試情況來看,Android 9 pie 走的是hardware/interfaces/wifi/1.2中的default/wifi.cpp Android 10(Android Q)走的流程對應(yīng)的是hardware/interfaces/wifi/1.3/default/ wifi.cpp 。
系統(tǒng)編譯的時(shí)候會(huì)自動(dòng)產(chǎn)生IWifi.java文件。
out/soong/.intermediates/hardware/interfaces/wifi/1.0/android.hardware.wifi_V1.0-java_gen_java/gen/android/hardware/wifi/V1_X/IWifi.java
對應(yīng)的代碼:
/hardware/interfaces/wifi/1.3/IWifi.hal
/**
* Perform any setup that is required to make use of the module. If the module
* is already started then this must be a noop.
* Must trigger |IWifiEventCallback.onStart| on success.
*
* @return status WifiStatus of the operation.
* Possible status codes:
* |WifiStatusCode.SUCCESS|,
* |WifiStatusCode.NOT_AVAILABLE|,
* |WifiStatusCode.UNKNOWN|
*/
@entry
@callflow(next={"registerEventCallback", "start", "stop", "getChip"})
start() generates (WifiStatus status);
IWifi.java的getService方法
public static IWifi getService(String serviceName) throws android.os.RemoteException {
return IWifi.asInterface(android.os.HwBinder.getService("android.hardware.wifi@1.0::IWifi",serviceName));
}
對應(yīng)的IWifi.java的asInterface方法
IWifi.asInterface(android.os.HwBinder.getService("android.hardware.wifi@1.0::IWifi",serviceName));
硬件WIFI調(diào)用
按照IWifi.java的代碼接下來的調(diào)用路徑在hardware/interfaces/wifi/1.3/default/,目前跟蹤流程走的是走的1.3下面的wifi.cpp這個(gè)文件。
函數(shù)入口 Wifi::start
對應(yīng)的路徑hardware/interfaces/wifi_hidl/1.3/default/wifi.cpp
初始化 initializeModeControllerAndLegacyHal()
mode_controller_->initialize()
hardware/interfaces/wifi_hidl/1.3/default/wifi_mode_controller.cpp
driver_tool_->LoadDriver()
這個(gè)driver_tool.cpp這里開始走到WPA適配層去。對應(yīng)的路徑如下:
//frameworks/opt/net/wifi/libwifi_hal/driver_tool.cpp
wifi_load_driver()
libwifi_hal/wifi_hal_common.Cpp中。函數(shù)wifi_load_driver()
結(jié)果反饋調(diào)用驅(qū)動(dòng),通知上層
insmod(DRIVER_MODULE_PATH, DRIVER_MODULE_ARG)
wifi_change_driver_state(WIFI_DRIVER_STATE_ON) < 0)
property_set(DRIVER_PROP_NAME, "ok");
客戶端 HAL
客戶端 HAL 為wpa_supplicant守護(hù)進(jìn)程提供 HIDL 接口。
wpa_supplicant 源代碼位于external/wpa_supplicant_8/wpa_supplicant中。提供 HIDL 接口的 wpa_supplicant 代碼位于hidl子目錄中 啟動(dòng)startSupplicant
對應(yīng)的路徑如下:libwifi_system/wifi/supplicant_manager.cpp
Hostapd HAL
Hostapd HAL 為hostapd守護(hù)進(jìn)程提供 HIDL 接口。hostapd 源代碼位于external/wpa_supplicant_8/hostapd中。提供 HIDL 接口的 hostapd 代碼位于hidl子目錄中。
以上是基于Android P&Android Q中調(diào)試高通wifi過程中對wifi的簡單分析。如有異議的地方歡迎大家與我們一起探討交流,潤欣與您一同成長進(jìn)步!
-
Android
+關(guān)注
關(guān)注
12文章
3968瀏覽量
129721 -
接口
+關(guān)注
關(guān)注
33文章
8963瀏覽量
153334 -
Linux
+關(guān)注
關(guān)注
87文章
11475瀏覽量
213011 -
WIFI
+關(guān)注
關(guān)注
81文章
5382瀏覽量
207649
發(fā)布評論請先 登錄
WIFI無線技術(shù)各種熱門設(shè)計(jì)方案~
世平推出基于 WIFI 互聯(lián)技術(shù)的車載影音導(dǎo)航系統(tǒng)方案
Android9有哪些新功能
如何實(shí)現(xiàn)Android 9同時(shí)在STA和AP模式下運(yùn)行的功能呢
在RK3288和心版上如何實(shí)現(xiàn)WiFi和以太網(wǎng)共存呢
Android系統(tǒng)終端實(shí)現(xiàn)3G WIFI無線漫游

基于Android系統(tǒng)終端實(shí)現(xiàn)3G WIFI無線漫游
基于android的wifi模塊功能開發(fā)教程
在Altera SoC上面演示Android應(yīng)用程序效果
Android10在功能上做出了哪些升級(jí)
Android 12 有望允許用戶通過 “附近分享”功能分享 WiFi 密碼
Android9.0 P 電源管理&android各版本電量優(yōu)化功能策略

Android9.0 P 電源管理&android各版本電量優(yōu)化功能策略

Android9.0 P 電源管理&android各版本電量優(yōu)化功能策略

評論