Wifi模块—Wifi系统框架

前言:

       这一篇应该是我开启技术博客的开篇之篇了。Wifi作为我工作的主要业务方向之一,研究也有一段时间了,从中也发现了很多有趣的东西。记得一位哲人说过一句话:在你出生的时候,其实上帝早已给你准备了一份很大的礼物,那便是这个世界。在成长的过程中,我也收到一些美好的礼物发现了一些美好的世界,而现在Wifi世界便是其一。(原谅一个这样矫情的人,认真起来就会把你当作世界。)在接下来的时光里,我会基于前人的积累以及自己的理解与加工,将Wifi相关的知识进行总结。生命在于积累,在于总结。


一:Android Wifi框架图

                                           

                                        

二:Android Wifi源码结构

1 Wifi Settings层
    原生机目录:packages/apps/Settings/src/com/android/settings/wifi/
    主要的类:
    WifiSettings.java 负责显示Wifi的设置界面
    WifiEnabler.java 负责Wifi的开关逻辑
    WifiDialog.java 负责Wifi的对话框
    WifiInfo.java 表示Wifi的相关配置信息


2  Wifi Framework层

   原生机目录:
   frameworks/base/wifi/Java/android/net/wifi/

     

  frameworks/base/core/java/android/net/

     

    frameworks/opt/net/wifi/service/java/com/android/server/wifi

         

    主要的类:

   WifiManager: 它是Wifi模块向外部应用透漏出来的接口,其它所有应用都可以通过WifiManager来操作Wifi的各项功能,但是WifiManager本身不具备处理请求的能力,而是把所有的请求转发给WifServiceImpl来处理。        

   WifiService: Java Framework中Wifi功能的总入口,负责Wifi功能的核心业务。它是服务器端的实现,作为Wifi部分的核心,处理实际的驱动加载、扫描、链接、断开等命令,以及底层上报的事件。对于主动的命令控制,WiFi是一个简单的封装,针对来自客户端的控制命令,调用相应的WifiNative底层实现。

   WifiServiceImpl: 本身也不具备处理请求的能力,而是将请求分类后交给不同的处理者处理,比如WifiStateMachine。

    WifiStateMachine: 它是一个复杂的状态机,维护了Wifi的启动、扫描、连接、断开等多个状态。它运行自己独有的线程中,拥有自己的消息队列。

    WifiStateTracker: 除了负责WiFi的电源管理模式等功能外,其核心是WifiMonitor所实现的事件轮询机制,以及消息处理函数handleMessage()。

    WifiMonitor: 专门负责接收来自Wpa_supplicant的事件,并将这些信息进行分类再交予StateMachine处理。

    WifiNative: 一个接口类,主要是提供一些native方法用于wifi framework层和WPAS通信。WifiNative的主要实现都在wifi.c函数里,WifiNative不过是将其封装,供framework层调用。


   特别注意:WifiService 和 WifiMonitor 是整个模块的核心。WifiService 负责启动关闭 wpa_supplicant、启动关闭 WifiMonitor 监视线程和把命令下发给 wpa_supplicant,而 WifiMonitor 则负责从 wpa_supplicant 接收事件通知。也就是说WifiService负责wifi整个流程的控制,而WifiMonitor负责监视底层的事件。

3 Wifi JNI层

   目录:frameworks/base/core/jni/android_net_wifi_Wifi.cpp
   android_net_wifi_Wifi.cpp就是典型jni接口,通过它可以直接调用Wifi的硬件抽象层。


4 Wifi Hardware层 (wifi管理库)

   hardware/libhardware_legacy/wifi/wifi.c
   Wifi Hardware层也叫wpa_supplicant适配层,是通用wpa_supplicant的封装。wpa_supplicant适配层起着承上启下的作用,主要用于与wpa_supplicant守护进程的通信,以供给Wifi框架层使用。

5 wpa_supplicant层(wifi tool)
   wpa_supplicant是一个开源项目,已经移植到Linux、Windows以及其它嵌入式系统上。它是WPA(WiFi Protected Access的缩写,中文含义为WiFi网络安全存取)的应用层认证客户端,负责完成认证相关的登录、加密等工作。 该层是Wifi FrameWork层的基石,也叫Wifi服务层。
   源代码目录:external/wpa_supplicant/
   经过编译后主要结果是生成动态库libwpa_client.so和可执行程序wpa_supplicant。
   (1) wpa_client (生成库libwpaclient.so)
       external/wpa_supplicant_8/wpa_supplicant/src/common/wpa_ctrl.c
   (2) wpa_server (生成守护进程wpa_supplicant)
       external/wpa_supplicant_8/wpa_supplicant/main.c

   

6 Wifi kernel层

   内核根目录:drivers/net/wireless 



猜你喜欢

转载自blog.csdn.net/weixin_42093428/article/details/80822606