免费发布您的软件作品
当前位置:正规网赌软件app_正规网赌软件app下载进入 > 新闻资讯 > 行业资讯 【技术分享】怎么在Android 9&10上面实现WIFI功能

【技术分享】怎么在Android 9&10上面实现WIFI功能

上海润欣科技株式会社创研社

媒介

现如今,WiFi已经和我们生活密弗因素了,不管我们是在公交车上、地铁上,照样走在大年夜街上,我们都可以享受到WiFi的旌旗灯号,WiFi5 已经进入千家万户,下面将分享基于WIFI5搭配Android 9 pie上面实现2.4/5G上网功能。跟着Android版本更替,在Android 9 与Android 10中wifi的布局层次与Android 8曩昔的比较也发生了许多变更。

注:本文章所述的WIFI5包括1*1/2*2芯片,有SDIO、USB、PCIE三种接口要领,在不合的利用处景中有着广泛利用,想具体懂得的可以咨询润欣的商务端。

添加CLD驱动移植

本文以高通WIFI5 CLD驱动为例。编译驱动前,请确保Linux 内核成功编译完成。低于Linux 4.4内核版本必要在wifi 驱动部分适配backports。

操作步骤:

1)   改动linux内核路径和toolchain路径,设置设置设备摆设摆设好IF_TYPE和BOARD_TYPE

2)   进入AIO/build目录

3)   经由过程敕令make进行编译.

编译完成后:

把固件放置到/lib/firmware目录下

然后经由过程敕令sudo insmod ./wlan.ko安装WIFI驱动

驱动移植好了,今后便是加载驱动,测试功能,然则在实际历程中可能会有许多问题必要去debug。最常见的是wlan 接口天生不成功,以及无法扫描AP等……这些都必要我们一步步随着wifi的启动流程去阐发。

Android 9.0里wifi的框架做了一些更改,包括wifi开启流程,前面与8.0差不多,到了WifiServiceImpl后面就有了很大年夜更改,最紧张的变更是WIFI HAL层。

WLAN HAL

HIDL 读作 hide-l,Wifi到Andoid O之后以是Android P也一样不再应用jni,而是应用HIDL,Hardware Interface Define Language。

WLAN 框架具有三个 WLAN HAL 外面,分手由三个不合的 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 中。

根据我们实际调试环境来看,Android 9 pie 走的是 hardware/interfaces/wifi/1.2中的default/wifi.cpp  Android 10(Android Q)走的流程对应的是hardware/interfaces/wifi/1.3/default/ wifi.cpp 。

系统编译的时刻会自动孕育发生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

对应的代码:

/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));

}

对应的IWifi.java的asInterface措施

IWifi.asInterface(android.os.HwBinder.getService("android.hardware.wifi@1.0::IWifi",serviceName));

硬件WIFI调用

按照IWifi.java的代码接下来的调用路径在hardware/interfaces/wifi/1.3/default/,今朝跟踪流程走的是走的1.3下面的wifi.cpp这个文件。

函数进口 Wifi::start

对应的路径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()

这个driver_tool.cpp这里开始走到WPA适配层去。对应的路径如下:

//frameworks/opt/net/wifi/libwifi_hal/driver_tool.cpp

wifi_load_driver()

libwifi_hal/wifi_hal_common.Cpp中。函数wifi_load_driver()

结果反馈调用驱动,看护上层

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 守护进程供给 HIDL 接口。

wpa_supplicant 源代码位于 external/wpa_supplicant_8/wpa_supplicant 中。供给 HIDL 接口的 wpa_supplicant 代码位于 hidl 子目录中 启动startSupplicant

对应的路径如下:libwifi_system/wifi/supplicant_manager.cpp

Hostapd HAL

Hostapd HAL 为 hostapd 守护进程供给 HIDL 接口。hostapd 源代码位于 external/wpa_supplicant_8/hostapd 中。供给 HIDL 接口的 hostapd 代码位于 hidl 子目录中。

以上是基于Android P&Android Q中调试高通wifi历程中对wifi的简单阐发。如有异议的地方迎接大年夜家与我们一路探究交流,润欣与您一同生长进步!

分类 行业资讯
标签
(责任编辑:shuaxin)
shuaxin
负责频道:
关于本文的作者
  • 0人
      垃圾
  • 0人
      期待
  • 0人
      加油
  • 0人
      兴奋
  • 0人
      吃惊
  • 0人
      奋斗
  • 0

编辑推荐

我有话说:

网友评论
更多评论

最新资讯

更多
2020年优酷会员vip账号免费共享最新更新第182期

2020年优酷会员vip账号免费共享最新更新第182期

中期业绩披露 精选层企业初显示
消息:香港今增约18宗确诊
企事业单位安全监控系统的特点及
现代化工厂的视频监控系统解决方
新华网评:打好关键核心技术攻坚
PLC—DIDO应用中的电机启停问题分

热门标签

更多
评论回复(您的评论需要经过审核才能显示)X

投稿
反馈