Android WIFI 架构和控制流程

Android框架WiFi架构 动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,而实际上工作内容是通过socket(不管是wpa_supplicant与上层还是wpa_spplicant与驱动都采用socket通讯)与驱动交互上报数据给用户,而用户可以通过socket发送命令给wpa_supplicant调试来对wifi芯片操作,简单的说,二、android wifi 系统架构:andtoid wifi 系统引入了wpa_supplicant,它的整个wifi系统。 阅读详情

一、WIFI的基本架构

   1、wifi用户空间的程序和库:

         external/wpa_supplicant/

       生成库libwpaclient.so和守护进程wpa_supplicant

   2、hardware/libhardware_legary/wifi/是wifi管理库

   3、JNI部分:

         frameworks/base/core/jni/android_net_wifi_Wifi.cpp

   4、JAVA部分:

         frameworks/base/services/java/com/android/server/

         frameworks/base/wifi/java/android/net/wifi/

   5、WIFI Settings应用程序位于:

       packages/apps/Settings/src/com/android/settings/wifi/

   6、WIFI 驱动模块  wlan.ko

        wpa_supplicant通过wireless_ext 接口和驱动通信

   7、WIFI 硬件模块 

二、WIFI在Android中如何工作

       Android使用一个修改版wpa_supplicant作为daemon来控制WIFI,代码位于external/wpa_supplicant。 wpa_supplicant是通过socket与hardware/libhardware_legacy/wifi/wifi.c通信。UI通过 android.net.wifi package(frameworks/base/wifi/java/android/net/wifi/)发送命令给wifi.c。相应的JNI实现 位于frameworks/base/core/jni/android_net_wifi_Wifi.cpp。更高一级的网络管理位于 frameworks/base/core/java/android/net。

三、配置Android支持WIFI

   在BoardConfig.mk中添加:

      BOARD_HAVE_WIFI := true

      BOARD_WPA_SUPPLICANT_DRIVER := WEXT

   这将在external/wpa_supplicant/Android.mk设置WPA_BUILD_SUPPLICANT为true,默认使用驱动driver_wext.c。

   如果使用定制的wpa_supplicant驱动(例如 wlan0),可以设置:

       BOARD_WPA_SUPPLICANT_DRIVER := wlan0

四、使能wpa_supplicant调试信息

   默认wpa_supplicant设置为MSG_INFO,为了输出更多信息,可修改:

   1、在common.c中设置wpa_debug_level = MSG_DEBUG;

   2、在common.c中把#define wpa_printf宏中的

      if ((level) >= MSG_INFO)

      改为

      if ((level) >= MSG_DEBUG)

五、配置wpa_supplicant.conf

   wpa_supplicant是通过wpa_supplicant.conf中的ctrl_interface=来指定控制socket的,应该在 AndroidBoard.mk中配置好复制到$(TARGET_OUT_ETC)/wifi(也就是/system/etc/wifi /wpa_supplicant.conf)这个位置会在init.rc中再次检测的。

   一般的wpa_supplicant.conf配置为:

      ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=wifi

      update_config=1

      fast_reauth=1  

   有时,驱动需要增加:

      ap_scan=1

   如果遇到AP连接问题,需要修改ap_scan=0来让驱动连接,代替wpa_supplicant。

   如果要连接到non-WPA or open wireless networks,要增加:

      network={

              key_mgmt=NONE

      }

六、配置路径和权限

   Google修改的wpa_supplicant要运行在wifi用户和组下的。代码可见wpa_supplicant/os_unix.c

   中的os_program_init()函数。

  

   如果配置不对,会出现下面错误:

      E/WifiHW  (  ): Unable to open connection to supplicant on

      "/data/system/wpa_supplicant/wlan0": No such file or directory will appear.

   确认init.rc中有如下配置:

       mkdir /system/etc/wifi 0770 wifi wifi

       chmod 0770 /system/etc/wifi

       chmod 0660 /system/etc/wifi/wpa_supplicant.conf

       chown wifi wifi /system/etc/wifi/wpa_supplicant.conf

       # wpa_supplicant socket

       mkdir /data/system/wpa_supplicant 0771 wifi wifi

       chmod 0771 /data/system/wpa_supplicant

       #wpa_supplicant control socket for android wifi.c

       mkdir /data/misc/wifi 0770 wifi wifi

       mkdir /data/misc/wifi/sockets 0770 wifi wifi

       chmod 0770 /data/misc/wifi

       chmod 0660 /data/misc/wifi/wpa_supplicant.conf

   如果系统的/system目录为只读,那应该使用路径/data/misc/wifi/wpa_supplicant.conf。

七、运行wpa_supplicant和dhcpcd

   在init.rc中确保有如下语句:

      service wpa_supplicant /system/bin/logwrapper /system/bin/wpa_supplicant -dd

                   -Dwext -iwlan0 -c /data/misc/wifi/wpa_supplicant.conf

         user root

         group wifi inet

      socket wpa_wlan0 dgram 660 wifi wifi

         oneshot

      service dhcpcd /system/bin/logwrapper /system/bin/dhcpcd -d -B wlan0

         disabled

         oneshot

   根据所用的WIFI驱动名字,修改wlan0为自己驱动的名字。

七、编译WIFI驱动为module或kernel built in

   1、编译为module

      在BoardConfig.mk中添加:

         WIFI_DRIVER_MODULE_PATH := "/system/lib/modules/xxxx.ko"

         WIFI_DRIVER_MODULE_ARG := ""  #for example nohwcrypt

         WIFI_DRIVER_MODULE_NAME := "xxxx"  #for example wlan0 

         WIFI_FIRMWARE_LOADER := ""         

   2、编译为kernel built in  

     1)在hardware/libhardware_legacy/wifi/wifi.c要修改interface名字,

     2)在init.rc中添加:

        setprop wifi.interface "wlan0"

     3)在hardware/libhardware_legacy/wifi/wifi.c中当insmod/rmmod时,

        直接return 0。

八、WIFI需要的firmware

   Android不使用标准的hotplug binary,WIFI需要的firmware要复制到/etc/firmware。

   或者复制到WIFI驱动指定的位置,然后WIFI驱动会自动加载。

九、修改WIFI驱动适合Android

   Google修改的wpa_supplicant要求SIOCSIWPRIV ioctl发送命令到驱动,及接收信息,例如signal strength, mac address of the AP, link speed等。所以要正确实现WIFI驱动,需要从SIOCSIWPRIV ioctl返回RSSI (signal strength)和MACADDR信息。

 

   如果没实现这个ioctl,会出现如下错误:

     E/wpa_supplicant(  ): wpa_driver_priv_driver_cmd failed

                               wpa_driver_priv_driver_cmd RSSI len = 4096 

     E/wpa_supplicant(  ): wpa_driver_priv_driver_cmd failed 

     D/wpa_supplicant(  ): wpa_driver_priv_driver_cmd LINKSPEED len = 4096

     E/wpa_supplicant(  ): wpa_driver_priv_driver_cmd failed 

     I/wpa_supplicant(  ): CTRL-EVENT-DRIVER-STATE HANGED

十、设置dhcpcd.conf

   一般/system/etc/dhcpcd/dhcpcd.conf的配置为:

      interface wlan0

      option subnet_mask, routers, domain_name_server

Android Wi-Fi 核心架构 Wi-Fi框架层(Wi-Fi Framework):包括Wi-Fi管理器(WifiManager)和Wi-Fi配置(WifiConfigStore)等组件,提供了对Wi-Fi连接的管理和配置能力。Wi-Fi Service(WifiService):作为Android系统中的核心服务之一,负责管理设备的Wi-Fi连接和配置,处理与Wi-Fi相关的各种操作。Wi-Fi扫描器(WifiScanner):负责执行Wi-Fi网络的扫描操作,获取周围可用的Wi-Fi网络列表。Android Wi-Fi 核心架构。 阅读详情

相关推荐

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

本文主要介绍wifi的整体架构,我们在学习一个模块时,不能一开始就去坑代码,要先从整体的看待这个模块,不然我们两眼一抹黑,就进入到代码的时间的时候,发现这里不懂哪里不懂,只有先了解事务的一个宏观情况,然后再到代码里面去深挖才能慢慢对该问题真正掌握。

changcheng00的博客 2618

Android WIFI架构

App 与 system_server 通过Binder通信,但Binder本身只实现了IPC,即类似socket通信的能力。从功能上来说,WifiNative是system_server 和 wpa_supplicant 对话的窗口,实际上主要依靠wpa_supplicant项目编译出来的动态库libwpa_client.so。当WIFI处在AP模式。如果说Binder是连接 App 和 system_server 的桥梁,那么WifiManager和WiFiService就是桥梁的两头。

weixin_45030234的博客 2557

RTAB-map:实时高效的SLAM库

Real‐time appearance‐based mapping (RTAB‐Map)是一种基于外观的闭环检测方法,具有良好的内存管理,以满足处理大场景和在线长周期管理要求。RTAB‐Map集成了视觉和激光雷达SLAM方案,并支持目前绝大多数的传感器 是一个强大的、开源的Simultaneous Localization and Mapping(SLAM)库,专为机器人和无人驾驶领域设计。它提供了一套完整的解决方案,用于构建三维地图,并在未知环境中进行实时定位与导航。 github项目地址 RTAB-

weixin_45761399的博客 1万+

Android系统网络架构

引言:这篇文章以WiFi举例,介绍了Android系统网络。其内容包含:网络链路的连接和注册、网络有效性检测和网络优选、Android系统网络防火墙和几种场景下的网络策略等,文章的最后也列举了几种常见的无法上网原因供大家参考。

elslion的博客 4354

ESP32锂电池电量检测实战:从引脚选择到低功耗优化(附完整电路图)

本文详细介绍了ESP32锂电池电量检测的实战方案,从ADC引脚选择到低功耗优化,提供完整的电路图和代码实现。通过MOS管智能开关和深度睡眠技术,显著降低静态功耗至0.5μA,提升设备续航能力。适合物联网开发者解决电量检测中的常见问题。

weixin_28731223的博客 461

window下移动设备/硬盘报错位置不可用

移动硬盘指示灯亮,但电脑上不显示 报错信息 : 无法访问E:\。参数错误。 报错原因: 移动硬盘打不开提示参数错误,是因为这个H盘的文件系统内部结构损坏导致的。要怎么恢复里面的数据呢? https://jingyan.baidu.com/article/cb5d6105a80242005c2fe0c3.html 解决办法 : 不用格式化修复方法 方法一: 1、单击–开始–运行–输入cmd; 2、...

qq_40907977的博客 4928

android WIFI 架构和控制流程

一、WIFI的基本架构     1、wifi用户空间的程序和库:          external/wpa_supplicant/        生成库libwpaclient.so和守护进程wpa_supplicant。     2、hardware/libhardware_legary/wifi/是wifi管理库。     3、JNI部分:          frameworks

huquan0610的专栏 652

超酷炫,Python实现交通数据可视化!

此时输出的栅格化参数params的内容存储了栅格坐标系的原点坐标(slon、slat)、单个栅格的经纬度长宽 (deltalon、deltalat)、栅格的旋转角度(theta)、栅格的形状(method参数,其值可以是方形rect、三角形tri和六边形hexa)以及栅格的大小(gridsize参数,单位为米)。Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。今天分享一次Python交通数据分析与可视化的实战!

m0_59236127的博客 1696

android WIFI 架构和控制流程

一、WIFI的基本架构    1、wifi用户空间的程序和库:         external/wpa_supplicant/       生成库libwpaclient.so和守护进程wpa_supplicant。    2、hardware/libhardware_legary/wifi/是wifi管理库。    3、JNI部分:         frameworks/base/

zhenwenxian的专栏 8946

保姆级教程:在Ubuntu 20.04上搞定pybind11,解决‘找不到头文件’的坑

本文提供了一份详细的Ubuntu 20.04下pybind11配置指南,重点解决常见的'找不到头文件'问题。从环境准备、安装策略到三种专业解决方案(修改CMakeLists.txt、环境变量方案、绝对路径包含),帮助开发者高效搭建C++与Python的桥梁。

weixin_28829325的博客 284

使用STM32制作简易数字时钟

连接LED数码管的电源和地线到STM32单片机的对应引脚,将数码管的A、B、C、D引脚连接到STM32单片机的I/O口引脚。通过编写和调试这个项目,可以熟悉STM32单片机的GPIO口和定时器的使用,以及数字显示的控制。步骤六:测试和调试 通过观察数码管的显示,可以验证时钟功能是否正常工作。步骤四:编写代码 在主程序中,我们将使用定时器中断来控制时钟的运行,并使用GPIO口控制LED数码管的显示。步骤五:编译和下载 编译代码并下载到STM32单片机中,通过调试器和串口监视器进行调试和查看输出结果。

qq_67153941的博客 1302

谈谈Android中WIFI 架构和控制流程

一、WIFI的基本架构     1、wifi用户空间的程序和库:          external/wpa_supplicant/        生成库libwpaclient.so和守护进程wpa_supplicant。     2、hardware/libhardware_legary/wifi/是wifi管理库。     3、JNI部分:          framew

liujianminghero的专栏 913

手把手教你学Simulink--单相逆变器模糊逻辑控制策略仿真

本文介绍了在Simulink中设计单相逆变器模糊逻辑控制策略的完整流程。主要包括:1)构建单相逆变器模型;2)使用FuzzyLogicToolbox设计模糊控制器,定义输入输出变量和模糊规则;3)将控制器集成到Simulink模型;4)添加干扰源和示波器;5)配置仿真参数并分析结果。该方法利用模糊控制处理非线性系统的优势,可实现输出电压的精确跟踪,具有良好的鲁棒性。文中提供了详细的步骤说明和示例代码,强调准确设计隶属函数和规则库对控制性能的关键作用。该仿真设计为电力电子控制系统的开发提供了有效支持。

MHD0815的博客 200

Android WIFI架构和控制流程

一、WIFI的基本架构    1、wifi用户空间的程序和库:          external/wpa_supplicant/        生成库libwpaclient.so和守护进程wpa_supplicant    2、hardware/libhardware_legary/wifi/是wifi管理库    3、JNI部分:          frame

Joey 的工作空间~ 779

26届数字IC秋招笔试面试全攻略-ASIC设计流程全解析

本文系统介绍了ASIC芯片设计的全流程。前端设计包括规格制定、架构设计、RTL编码和功能验证;后端设计完成物理实现,涵盖布局规划、时钟树综合、布线和物理验证等步骤;Tapeout阶段完成制造数据准备和交付。文章详细说明了各阶段的关键任务、验证方法和设计指标,并列举了典型工具链,为ASIC设计提供了全面的流程指导。通过严格的检查清单和验证步骤,确保芯片设计符合制造要求和性能目标。

2301_79143213的博客 365

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android中WIFI 架构和控制流程

一、WIFI的基本架构     1、wifi用户空间的程序和库:          external/wpa_supplicant/        生成库libwpaclient.so和守护进程wpa_supplicant。     2、hardware/libhardware_legary/wifi/是wifi管理库。     3、JNI部分:         

440

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android HAL USB WIFI 驱动移植详解资料集

Android HAL USB WIFI 驱动移植详解资料集 去发现同类优质开源项目:https://gitcode.com/ 简介 本资料集涵盖了Android系统中HAL(硬件抽象层)USB WIFI驱动的移植方法。资料中详细介绍了包括rtl8192cu、rtl8192du、rtl8192ce、rtl8192der、tl8723as、rtl8723au、rtl8189es等常见USB WIFI...

gitblog_06769的博客 704

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: Linux下Wi-Fi配置工具2
下一篇: A20启动代码流程分析
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值