java实现wife链接硬件_【技术分享】在Android 910上面实现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的简单分析。如有异议的地方欢迎大家与我们一起探讨交流,润欣与您一同成长进步!
文章来源:润欣科技Fortune微信公众号
java实现wife链接硬件_【技术分享】在Android 910上面实现WIFI功能相关推荐
- java最长公共子序列_技术分享 | 最长公共子序列在比对工具的应用
即使如何1 在实际工作中,我们常常要对输出的文本和数据进行比对:以取证大师为例,取证大师导出的取证结果数据量很容易达到上万条.这类数据特点除了数量级大外,其实数据结构很相近.即使我们以无以伦比的细致和 ...
- java实现wife链接硬件_360推首款硬件设备 “随身Wifi”实现免费无线上网
不仅如此,此前用户在360手机助手等PC端渠道获取手机软件.游戏.Mp3等各种资源的时候,都需要数据线连接手机和电脑.尽管有些渠道开放 了无线连接功能,但是需要多步骤手动操作,十分繁琐.360随身Wi ...
- android4 设置栈大小,【技术分享】Android内核漏洞利用技术实战:环境搭建栈溢出实战...
[技术分享]Android内核漏洞利用技术实战:环境搭建&栈溢出实战 2017-08-14 16:22:02 阅读:0次 预估稿费:300RMB 投稿方式:发送邮件至linwei#360.cn ...
- java生成sm4算法的对称密钥_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...
原标题:技术分享丨这是一篇简单的小科普--什么是对称加密算法?(下) 大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理. 本期 ...
- mysql优化说出九条_技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢?
原标题:技术分享 | MySQL 优化:为什么 SQL 走索引还那么慢? 背景 2019-01-11 9:00-10:00 一个 MySQL 数据库把 CPU 打满了. 硬件配置:256G 内存,48 ...
- python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...
原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...
- 对称加密算法_技术分享丨这是一篇简单的小科普——什么是对称加密算法?(下)...
大家好~我是贾正经,又到了干货满满的技术分享趴啦~ 上期我们讲解了对称加密算法的小知识,并介绍了国密算法中SM4算法的原理.(上集回顾) 本期带大家了解一下分组密码的五个模式. 分组密码的模式 首先了 ...
- 干涉测量技术的应用_技术分享 | 石化行业测量仪表应用在线答疑
众所周知,在化工和石化这类流程行业当中,稳定性和持续性是至关重要的生产"命脉",对于生产过程中使用的测量仪表有着极其严格的要求. 不仅所有测量仪表都必须满足严苛的国际标准,如PED ...
- 大表与大表join数据倾斜_技术分享|大数据技术初探之Spark数据倾斜调优
侯亚南 数据技术处 支宸啸 数据技术处 在大数据计算中,我们可能会遇到一个很棘手的问题--数据倾斜,此时spark任务的性能会比预期要差很多:绝大多数task都很快执行完成,但个别task执行极慢或者 ...
最新文章
- MySQL-MMM实现MySQL高可用
- 学习笔记(五)——JavaScript(二)
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)
- 【Java音频操作】调用有道词典语音接口,生成单词MP3文件,支持自定义重复次数
- multisim连接MySQL_首次使用Multisim软件进行电路仿真设计
- CCNA——网络初认识
- UI设计师缺乏灵感,看看这些可以临摹的网站架构!
- win11组策略如何恢复默认设置 windows11组策略恢复默认设置的步骤方法
- Android ClassLoader笔记(二)
- 还在繁琐的敲MVP接口和实现类吗,教你一秒搞定。
- DeepFake技术--win7下faceswap环境配置(一)(二)(三)
- Spring源码下载及安装
- HTML命名空间的使用
- 常用工具类之十一 XML报文加签工具类 http://www.w3.org/2000/09/xmldsig
- k8s 1.23 及keda 2.7.1 安装测试
- 360网站卫士能防服务器吗,360网站卫士测评
- eval 函数 java_[Java教程]eval()函数用法详解
- WDCP各种停止重启命令
- python sklearn Rideg岭回归--交通流量预测实例
- 读书笔记 |余华 | 文城
热门文章
- mysqldump 备份报 Warning: A partial dump from a server that has GTIDs will by default include the..
- 网络爬虫的“盗亦有道”
- 红黑数和普通的二叉排序树有什么要求
- 浅谈:APP开发市场的发展轨迹与未来趋势
- macbook 打开以后没有声音,重启以后又好了的解决方法
- 微信小程序--数据库数据批量导出为excel文件,预览下载
- aria2 linux一键安装,Aria2一键安装及管理脚本,搭建AriaNg前端
- 05.Linux 常用命令-网络命令\关机重启命令
- 区块链和博弈论(以下转载自网络)
- Delphi惹谁了?