android wifi的整体架构以及架构下的模块细分

一、 概要

  还记得刚开始接触android wifi的时候,由于上一任离职很快,只留下了一周的时间来给我做这个模块的对接,一周的时间能把一些文件交接好就已经是万事大吉,何谈wifi具体的功能如何去实现。
  所以,在刚开始进入到android wifi学习的时候,一脸懵逼,代码我该从哪里开始看起,我该从什么地方去了解这些知识点。

  这里我将以一个过来人的身份来给大家阐述andriod wifi这个模块的相关内容。

二、 整体架构

  首先,我们在学习一个模块时,不能一开始就去坑代码,要先以宏观俯视的角度来查看这个模块,不然我们两眼一抹黑,就进入到代码的时候,发现这里不懂哪里也不懂,只有先了解事务的一个宏观情况,然后再到代码里面去深挖才能慢慢对模块真正掌握。

先贴上android的wifi架构图,然后再慢慢细品
在这里插入图片描述
  如上是GOOGLE官方给wifi功能做的一个基本数据流向的框架,如果要细分其中的功能模块,其实关于wifi 感知(WifiAware)和wifi 往返时间 (WifiRtt)功能,是分别从android8 和9 分别引入的,且后者是为了增强前者而开发出来的功能。

  这两个功能可以看成是一个功能wifi感知,该功能支持设备可以直接使用感知协议发现其他设备、与其他设备互连,以及将覆盖范围扩展到其他设备(wifi RTT),而无需链接到互联网或移动网络。此功能支持在断开网络的情况下,在可信设备与应用之间轻松共享高吞吐量数据。

这两个功能本文就不细讲,只做一个简单的功能介绍。

  其实在google官方的这个图里面,并不能很好的体现整个wifi提供的架构,他是根据他android和hal的架构做了一个简单的框架图。
补充一点小知识,wifi 感知和wifi p2p技术的区别:

  • wifi 感知可以在设备发现阶段在设备之间发送数据(255个bytes),并且在需要时可以打开设备之间的链接以发送更大的数据量;
  • wifi P2P必须执行身份认证后,建立起套接字后,才能在设备之间发送数据。

三、 wifi 模块细分

wifi整体功能分为三个功能模块:

  1. AP(Acess Point)也就是热点模式,相当于家里路由器,但是一般在wifi的功能模块里面我们叫他热点或者host ap。
  2. STA(Station)也就是路由模式,也就相当于手机,作为一个去连接热点的设备,一般手机开启wifi时,默认就是这个模式。
  3. P2P(point to point)也就是wifi直连模式,这个功能用的最多的是手机投屏功能,一般android手机使用的miracast进行投屏。

如下是划分几个常用功能模块细分后的wifi功能框架图。
在这里插入图片描述

  以上,三个板块就是wifi的功能具体划分,至于前面所说的wifi感知和wifi RTT这些功能不是重点功能,如需了解请自行查看相关资料,这里不做重点介绍。下面就图示内容做一个简单模块介绍。

  • 最上层是APP应用层,会wifimanager会直接暴露相关接口给到app去使用,当然如果要使用p2p功能需要对应wifip2pmanager的接口。
  • framework层,manager下来就是各个具体功能的serivce了,wifiserviceImpl.java就是管理AP和STA两种模式,wifiP2PserivceImpl.java就是管理wifi直连功能的。
  • 再下来就是wificond、HIDL和HAL层,这层东西有点多分开细讲:
    • wifi驱动在安装后,会向network那边注册生成一个iface节点,节点会在HAL层被扫描到,并保存在HAL的list里面。
    • 上层APP在开启wifi(STA)或AP或P2P功能时,会通过HIDL的service去对接HAL,这里的HAL和HIDL是使用callback的方式解耦的,HAL又各个vendor提供,HIDL是统一的,但在编译时,会把这两块编译成一个bin去执行。
    • Wificond的作用是用来做扫描和AP的启动用,这个组件是通过AIDL的方式连接到framework的,在wifi(STA)打开后,会自动去scan周围是否有可用AP可用接入,并且将结果返回给到framework层。
  • hostapd,这个组件主要是用于AP热点使用的的组件,负责控制管理外来STA连接和认证。
  • Wpa_supplicant,这个组件是进行身份认证的中间件实现安全保护的,由HIDL直接调用Wpa_supplicant的接口,wifi发起连接,认证和结果返回都需要经过这里进行校验,在手机里面体现在于选WPA/WPA3等身份认证选项,就是这个模块的工作。(WPA是一个独立的单独的进程,且有且仅有一个主线程在驱动工作,该进程是基于event驱动来进行的,很有编程学习价值)
  • netlink,这个组件是直接通过socket套接字与内核进行通讯,使用AF_INIT的方式做为对接kernel的Netlink,通过对应cmd结构体进行发送数据到kernel,由net模块调用NL80211驱动的回调,经过CFG80211然后传递给注册过来的wifi驱动模块。

四、 小结

  以上便是本文的内容,主要介绍wifi总体的架构,后面会再出几期文章来讲述每个模块的具体的实现。如有错误还请指正,感谢!!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坚持不秃0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值