0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

润欣科技Fortune 来源:润欣科技Fortune 作者:润欣科技Fortune 2020-08-13 09:47 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

上海润欣科技股份有限公司创研社

前言

现如今,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的简单分析。如有异议的地方欢迎大家与我们一起探讨交流,润欣与您一同成长进步!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    3985

    浏览量

    133046
  • 接口
    +关注

    关注

    33

    文章

    9443

    浏览量

    156128
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217947
  • WIFI
    +关注

    关注

    82

    文章

    5466

    浏览量

    211966
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    WIFI无线技术各种热门设计方案~

    基于WiFi的无线测控系统设计与实现一种基于WIFI的室内定位系统设计与实现简述基于WIFI停车场方案阐述蓝牙与
    发表于 12-13 15:26

    世平推出基于 WIFI 互联技术的车载影音导航系统方案

    。除了具备传统的视频播放、车载导航功能之外,还可以实现同屏传送,收发邮件、网络登陆、网络下载等移动互联功能。为迎接即将到来的车联网时代,世平集团推出基于 WIFI 互联
    发表于 10-27 08:13

    Android9有哪些新功能

    Android9.0 P 电源管理&amp;android各版本电量优化功能策略针对电量优化android的改动
    发表于 12-28 08:08

    如何实现Android 9同时STA和AP模式下运行的功能

    如何实现Android 9同时STA和AP模式下运行的功能呢?
    发表于 03-07 07:34

    RK3288和心版上如何实现WiFi和以太网共存呢

    RK3288 Android 5.1官方SDK(rk3288_android5.1_v1.00_20150515,已更新到20180412),Rockchip官方提供的RK_EVB_RK3288
    发表于 05-30 14:23

    Android系统终端实现3G WIFI无线漫游

    本文提出了一种基于Android系统终端控制上实现3G到WIFI以及WIFI到3G 的无线漫游机制,分析了3G到WIFI的连接、认证、得到A
    发表于 12-24 00:36 1988次阅读
    <b class='flag-5'>Android</b>系统终端<b class='flag-5'>实现</b>3G <b class='flag-5'>WIFI</b>无线漫游

    基于Android系统终端实现3G WIFI无线漫游

    基于Android系统终端实现3G WIFI无线漫游
    发表于 01-13 22:02 3次下载

    基于androidwifi模块功能开发教程

    本文开始介绍了Android平台下的WIFI模块的功能,其次介绍了热点加密类型,最后介绍了androidwifi模块
    发表于 04-12 14:51 4963次阅读

    Altera SoC上面演示Android应用程序效果

    该演示由Altera全球合作伙伴Fujisoft提供。演示Altera SoC上面Android应用程序。并且Fujisoft演示了FPGA逻辑上
    的头像 发表于 06-26 08:08 4053次阅读

    Android10功能上做出了哪些升级

    近日谷歌正式宣布将下一版Android命名为Android 10,并于今年秋季发布。
    的头像 发表于 08-27 08:46 2080次阅读

    Android 12 有望允许用户通过 “附近分享”功能分享 WiFi 密码

    的分享方式,但仍然存在一些缺点。值得庆幸的是,谷歌正在研究一种更简单的分享 WiFi 密码的方法,可能会在即将发布的 Android 12 上亮相。 Android
    的头像 发表于 01-20 16:15 2254次阅读

    Android9.0 P 电源管理&amp;android各版本电量优化功能策略

    针对电量优化android的改动最近几个android版本中已存在的电量优化功能基础上,Android
    发表于 10-22 18:36 0次下载
    <b class='flag-5'>Android</b>9.0 P 电源管理&<b class='flag-5'>amp</b>;<b class='flag-5'>android</b>各版本电量优化<b class='flag-5'>功能</b>策略

    Android9.0 P 电源管理&amp;android各版本电量优化功能策略

    针对电量优化android的改动最近几个android版本中已存在的电量优化功能基础上,Android
    发表于 01-05 15:06 0次下载
    <b class='flag-5'>Android</b>9.0 P 电源管理&<b class='flag-5'>amp</b>;<b class='flag-5'>android</b>各版本电量优化<b class='flag-5'>功能</b>策略

    Android9.0 P 电源管理&amp;android各版本电量优化功能策略

    Android9.0 P 电源管理&amp;android各版本电量优化功能策略针对电量优化android的改动
    发表于 01-05 15:07 0次下载
    <b class='flag-5'>Android</b>9.0 P 电源管理&<b class='flag-5'>amp</b>;<b class='flag-5'>android</b>各版本电量优化<b class='flag-5'>功能</b>策略

    Android 9以太网功能移植以及设置IP地址

    基于Android 9实现以太网的IP地址设置和功能实现
    发表于 06-20 14:42 2次下载