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

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

3天内不再提示

安卓系统中的wifi研究

电子设计 2018-08-31 13:35 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1 Android系统概述

Android是Google公司开发的基于Linux平台开源的手机操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,具体框架结构由5部分组成,其核心为Linux2.6内核,向上搭配Libraries(函数库)及AndroidRuntime(运行环境),再配合Application Framework(应用程序框架),来开发各种不同的Application(应用程序),是首个为移动终端打造的开放和完整的移动软件。

Android系统基于Linux 2.6内核来提供系统的核心服务,例如安全机制,内存管理,进程管理,网络堆栈和驱动模块。其包含一组核心库,提供了Java语言核心库内的大部分功能。Android应用程序运行于Dalvik虚拟机上,Dalvik虚拟机是基于寄存器的。编译器将Java源文件转为class文件,内置的dx工具又将class文件转化为Dex文件,Dex文件是在Dalvik虚拟机上运行程序的标准格式。在wi—Fi网络方面,虽然Android建立在Linux内核之上,但是Wi—Fi网络的实现与一般Linux操作系统不一样,下面结合Andmid2.1的源码,对Wi.Fi模块的工作原理进行了分析。

2 WiFi模块的工作原理

2.1 WiFi模块的组成

在Android系统中,应用程序可以使用Wifimanager提供的API接口管理Wi—Fi的连接及使用情况,比如:

启动或者禁止Wi—Fi网络、请求扫描接入点(AccessPoint,AP)、返回网络配置参数列表等等。当WiFi网络被启动或者禁止时,Wifiservice将能过广播方式发出WIFI-STATE-CHANGED-ACTION事件通知上层应用程序,Wifimrvice主要负责对WifiMonitor和wpa-supplicant的进程进行初始化及禁止,并且发出命令给wpa-supplicant。WifiMonitor是负责接收wpa-suppli-cant发出的各种事件通知。然后WifiStateTracker广播各种行为。WiFi模块的组成如图1所示。

图1 WiFi模块的系统组成

在wiFi模块的系统组成中Wifimanager主要提供一些API接口,Wifimanager处理及工作的内容大致如下几个方面:

(1)返回网络配置的参数列表,参数列表可以查看及更新,并且个别的配置参数可以被修改。

(2)建立连接网络及禁止,以及查询有关网络状态的动态信息。

(3)扫描无线网络AP,并且根据AP的信息进行连接。

(4)定义各种Intent组件的行为名称,组件行为是广播来更新wifi状态。

WiFi模块中的Wifiservice可以通过WifiManager接口处理远程无线WiFi操作请求,也可以创建一个WifiMonitor来侦听无线上网相关的事件。WifiStateTracker可以跟踪Wi.Fi连接状态。有关的无线网络事件的处理及状态更新都可以通过WifiStateTracker完成。WifiMonitor侦听从wpa—supplicant服务器发出的事件请求,并且处理事件请求然后发送到WifiStateTracker,WifiMonitor独立运行于自己的线程中。WifiNative要求发送请求守护进程。WifiStateTracker所处理的事件如下:

(1)WIFI—STATE—CHANGED—ACTION:表示wi—Fi网络已经被启动、禁止、正在启动中。正在禁止中和未知状态中。

(2)SUPPLICANT—STATE—CHANGED—ACTION:表示连接一个AP的状态信息已经改变了,并且系统提供一个新状态信息。

(3)SUPPLICANT—CONNECTION—CHANGE—ACTION:表示与请求者的连接已经建立或者已经断开。

(4)SCAN—RESULTS—AVAILABLE—ACTION:表示AP扫描已经完成,并且返回扫描信息。

(5)RSSI—CHANGED—ACTION:表示Wi—Fi的信号强度已经改变。

(6)NETWORK—STATE—CHANGED一ACTION:表示Wi—Fi网络的连接状态已经改变。

(7)NETWORK—IDS—CHANGED—ACTION:表示配置网络的网络ID号已经改变。

Android实现Wi—Fi网络大致经过4个步骤:Wi—Fi模块的初始化;Wi—Fi模块的启动;AP扫描及配置AP参数;Wi—Fi连接及配置IP地址。下面是Android2.1中实现Wi—Fi上网的4个步骤的源码分析。

2.2 WiFi模块的初始化

当Android系统启动Wi—Fi模块时,先对wi—Fi模块进行初始化,Android系统通过startservice(Intent ser—vice)可以启动一个Service,通过Context.bindService()可以绑定一个Serivce。在系统启动Systemserver的时候,。通过ServiceManager调用addservice()函数生成一个ConnectivityService实例。在ConnectivityService的构造函数里面创建WifiServiee和WifiStateTracker,而wifiStateTracker却可以创建WifiMonitor接收来自底层的事件,WifiService和WifiMonitor是整个Wi.Fi模块的核心。WifiService负责启动关闭wpa—supplicant、启动关闭Wifi.

Monitor监视线程和把命令下发给wpa—supplicant,而WifiMonitor则负责从wpa—supplicant接收事件通知。WiFi模块初始化过程如图2所示。

图2 Wi-Fi模块初始化流程图

2.3 WiFi模块的启动

AndrcIid系统中WirelessSettings应用程序是负责启动Wi—Fi模块的,会调用WifiEnabler函数处理wiFi按钮。当用户按下WiFi按钮后,WirelessSettings应用程序会调用WifiEnabler的onPreferenceChange,再由WifiEnabler函数凋用WifiManager的setWifiEnabLED接121函数。WifiService接着向自身发送一条MESSAGE—ENABLE—WIFI消息,在处理该消息的代码中做真正的使能工作:首先装载wi.Fi内核模块(该模块的位置硬编码为“/system/lib/modules/wlan.ko”),然后启动wpa—supplicant(配置文件硬编码为“/data/misc/wifi/wpa—supplicant.conf”),再通过WifiStateTracker启动WifiMonitor中的监视线程。当使能成功后,会广播发送WIFI—STATE—CHANGED—ACTION消息通知外界wiFi已经成功启动。WifiEnabler创建的时候就会向Android系统注册接收WIFI—STATE—CHANGED—ACTION,因此当接收到该Intent,系统就开始扫描AP。Wi—Fi模块启动过程如图3所示。

图3 wifi模块启动流程图

2.4 AP扫描及配置AP参数

当Android扫描AP时,Wi—Fi模块执行AP扫描的函数startScan(),实质是给wpa—supplicant发送SCAN命令。当wpa—supplicant接收处理SCAN命令后,wpa—supplicant会向控制通道发送事件通知扫描结束。当wifi—wait—for—event函数接收到该事件后,WifiMonitor中的相应函数被调用处理该事件。

同时WifiStateTraeker接着广播发送SCAN_RE_SULTS—AVAILABLE一ACTION,在WifiLayer注册了接收SCAN—RESULTS—AVAILABLE—ACTION,所以相关处理函数handleScanResultsAvailable会被调用,在该函数中,先得到AP扫描的结果(最终是往wpa—supplicant发送SCAN—RESULT命令并读取返回值来实现的),对每一个扫描返回的AP,WifiLayer会调用WifiSettings的onAeeessPointSetChanged函数,从而最终把该AP加到GUI显示列表中。AP扫描过程如图4所示。

图4 AP扫描流程图

在Android系统的WifiSettings界面上选择了一个AP后,会显示配置AP参数的一个对话框,用户要在AcessPointDialog对话框中正确地选择AP参数。AP参数配置过程如图5所示。

图5 AP参数配置流程图

2.5 WiFi连接及配置IP地址

在Android系统的AcessPointDialog对话框中选择好加密方式和连接密钥之后,点击连接按钮,然后Android系统就会自动连接AP。

WifiLayer会通过向wap—supplicant发送LIST—NETWORK命令实现检测AP是否之前被配置过。如果wpa—supplicant没有AP的配置信息。就会向wpa—supplicant发送命令添加该AP.WifiLayer得到返回的net—work再利用networkld参数向wpa—supplieantv发送连接该AP命令。并且保存该AP配置信息为以后使用。

Wi—Fi模块连接过程如图6所示。

图6 WiFI模块连接流程图

当wpa—supplicant成功连接上AP之后,wpa—supplicant会向控制通道发送事件通知已经连接上AP,然后执行WifiMonitor中的MonitorThread处理该事件。

Wi—Fi模块连接到AP后,Android系统就要配置IP地址,此时系统中的WifiMonitor再调用WifiStateTracker的noti—fyStateChange函数,接着WifiStateTracker会往自身发送EVENT—NETWORK一STATE—CHANGED)消息启动DHCP去获取IP地址,当DHCP获取IP地址后,会发送EVENT—INTERFACE—CONFIGURATION—SUCCEEDED消息,当WifiLayer收到EVENT—INTERFACE—CONFIGURATION—SUCCEEDED消息后,会广播发送EVENT—NETWORK—STATE—CHANGED,并且附带获取IP地址的完整信息,WifiLayer中注册此Intent的接受者,并调用handleNetworkStateChanged函数处理消息。调用函数成功后An—droid OS的IP地址配置结束,Android系统具有Wi—Fi上网功能。

3 WiFi网络的实现

3.1 WiFi驱动的移植

Android系统可以通过wifi模块无线上网,在S3C6410开发板中wifi模块与S3C6410处理器的借口的是SDIO,要让wifi模块正常工作,必须保证SDIO的驱动是配置正常的,因此Wi—Fi模块的驱动移植需要配置两个地方,分别是配置firmware和marvel8686SDIO驱动。在内核配置界面中选择firmware的相关配置:GenericDriver Options->Prevent firmware from being built和Generic Driver Options->Userspace firmware loading support(NEW)一>Include in.kemel firmware blobs in kemeI binary,配置时要用到2个marvel8686的firmware文件。内核配置时选择marvel8686SDIo的相关配置:Network device support->Wireless LAN->Wireless LAN(IEEE 802.11)一>MarvelI Libertas WLAN driver support->Marvell Libertas 8385 and 8686 SDlO 802.1lb/g cards、Networkdevice support.>Wireless I AN.>Wireless LAN(IEEE 802.11)。>Marvell Libertas WLAN driver support->Enable full debugging output in the Libertas module和Network device support一>Wireless LAN一>Wireless LAN(IEEE802.11)一>Marvell 8xxx Libertas WLAN driver support with thin firmware……退出内核配置界面后运行命令make来编译Android的内核。

3.2 WiFi模块的测试

通过USB将内核镜像文件下载到三星S3C6410开发板的内存中,下载结束后复位板子或者断电重启。在内核启动过程中,从超级终端显示Wi.Fi模块的信息:

mmc0:new SDIO card at address 0001

libertas—sdio mmcO:0001:l:firmware:using built.in firmware sd8686一helper.bin

libertas—sdio mmc0:0001:l:firmware:using built—in firmware sd8686.bin

libertas:00:22:43:73:26:bf,fw 9.70.31024,cap 0x000003a3

libertas:PREP—CMD:command 0x00a3 failed:2

libertas:PREP—CMD:command 0x00a3 failed:2

libertas:ethl:Marveli WLAN 802.1 1 adapter

以上显示的信息表明内核已经找到WIFI模块。

当S3C6410开发板成功运行Android系统后,选择settings->wireless&network.>WIFI,然后在超级终端中输入logeat命令可以显示Wi—Fi使用信息,并且开发板上Wi—Fi模块的指示灯LEDl会闪烁。

点击Android系统下的Wifi Settings对话框,Android系统开始搜索AP,搜索AP成功后界面显示出AP的情况,选择需要连接的AP进行连接。连接成功后S3C6410开发板具有了wiFi网络功能,Android系统中显示搜索的AP信息如图7所示。

图7 Android搜索的AP结果

4 结语

对Android智能手机操作系统来说,WiFi网络系统是其中一个主要组成部分,了解Android系统中的wiFi网络的工作原理可以对应用程序性能上的提供有所帮助。在Android系统移植到其他嵌入式设备中,Android系统中Wi—Fi的底层驱动移植是其中一个关键部分,通过对底层Wi—Fi接口以及对WiFi驱动移植的研究,将更有效地实现Android系统在其他嵌入式设备上的移植及开发相应WiFi网络的应用程序。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    主板定制_联发科MTK主板方案_板定制开发

    在多样化的应用场景,通用主板(公板)往往无法完全满足不同设备的需求。功能冗余、接口不匹配、物料成本高以及环境适配性差等问题,常常导致设备开发周期延长、成本超支,甚至性能达不到预期。例如,工业
    的头像 发表于 11-24 19:56 167次阅读
    <b class='flag-5'>安</b><b class='flag-5'>卓</b>主板定制_联发科MTK主板方案_<b class='flag-5'>安</b><b class='flag-5'>卓</b>板定制开发

    佩特科技A40i主板产品介绍

    在工业智能化浪潮汹涌澎湃的当下,传统工业设备正面临着转型升级的迫切需求。从自动化生产线到智能监控系统,工业领域对于设备的性能、功能以及智能化水平都提出了更高的要求。在这样的背景下,A40i 主板凭借其独特的优势,犹如一颗璀璨
    的头像 发表于 09-09 17:29 1031次阅读
    佩特科技A40i<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板产品介绍

    定制主板_迷你小型Android主板基于MTK核心板方案

    这款迷你主板的核心是联发科MT8768平台,采用八核架构和12nm先进制程工艺,主频高达2.0GHz。标配4GB内存与64GB存储,加上11
    的头像 发表于 08-12 19:59 625次阅读
    定制<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板_迷你小型Android主板基于MTK<b class='flag-5'>安</b><b class='flag-5'>卓</b>核心板方案

    释放潜力:在树莓派上运行系统实现多样化应用!

    为什么要在树莓派上运行系统系统以其庞大的应用生态
    的头像 发表于 07-05 08:33 933次阅读
    释放潜力:在树莓派上运行<b class='flag-5'>安</b><b class='flag-5'>卓</b><b class='flag-5'>系统</b>实现多样化应用!

    如何实现与恩智浦i.MX RT1170的无线投屏与控制

    Scrcpy是一款免费开源的软件,支持将端屏幕投影到其他设备,并支持被投屏设备对的反向控制。基于ADB工具,
    的头像 发表于 06-26 09:53 1970次阅读
    如何实现<b class='flag-5'>安</b><b class='flag-5'>卓</b>与恩智浦i.MX RT1170的无线投屏与控制

    工业主机主板在医疗辅助设备的应用

    工业主机主板在医疗辅助设备的应用日益广泛,其高稳定性、灵活性和丰富的接口功能为医疗设备的智能化、数字化升级提供了有力支持。
    的头像 发表于 06-24 17:13 474次阅读

    与 Windows 系统的手持工业平板电脑,该如何选择?

    众多企业面临的关键问题。 一、系统特性剖析 (一)系统 开源与定制灵活性:
    的头像 发表于 06-04 11:02 795次阅读

    请问CYUSB3014支持驱动吗?

    [i]请问CYUSB3014 支持设备吗?应该使用什么驱动呢
    发表于 05-30 07:12

    工业主板在智能电子秤设备的应用

    随着工业自动化与智能化需求的增长,工业主板凭借其高可靠性、灵活性和扩展性,逐渐成为智能电子秤设备的核心控制单元。以下从技术特性、应用场景、功能实现及优势等方面详细分析工业主板在
    的头像 发表于 04-18 16:00 602次阅读
    工业<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板在智能电子秤设备<b class='flag-5'>中</b>的应用

    请问rk3566有没有办法装12

    各位老哥,rk3566的sdk是11,有没有办法装12呢
    发表于 03-22 19:46

    工控平板电脑在环境监测设备的运用

    工控平板电脑在环境监测设备的运用主要体现在以下几个方面: 一、耐用性与可靠性 工控平板电脑通常具有坚固耐用的外壳设计,如铝合金面板
    的头像 发表于 02-28 18:10 709次阅读
    <b class='flag-5'>安</b><b class='flag-5'>卓</b>工控平板电脑在环境监测设备<b class='flag-5'>中</b>的运用

    自制 AirTag,支持/鸿蒙/PC/Home Assistant,无需拥有 iPhone

    苹果的 AirTag 很贵,虽然某强北有平价代替品,但是仍需要苹果设备才能绑定,才能查看位置。不支持/鸿蒙/PC ,也不支持集成到 Home Assistant 。 AirTag
    发表于 02-25 11:22

    纳祥科技PD协议芯片NX799,超绝兼容性,适配华为、三星等主流手机

    纳祥科技NX799是一颗应用手机的快充数据线控制 IC,采用 CMOS 工艺制造,USB转TYPE-C全兼容,支持HUAWEI、三星、VIVO、OPPO 和一加等系列手机/
    的头像 发表于 02-05 17:28 2212次阅读
    纳祥科技<b class='flag-5'>安</b><b class='flag-5'>卓</b>PD协议芯片NX799,超绝兼容性,适配华为、三星等主流<b class='flag-5'>安</b><b class='flag-5'>卓</b>手机

    系统主板_mtk主板_联发科主板定制

    系统主板基于强大的联发科处理器设计,采用四核或八核架构,主频高达2.0GHz,利用台积电的12nm工艺,集合了4核Cortex-A73与4核Cortex-A53,搭载Android 9.0
    的头像 发表于 01-15 20:30 1022次阅读
    <b class='flag-5'>安</b><b class='flag-5'>卓</b><b class='flag-5'>系统</b>主板_mtk<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板_联发科<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板定制

    11系统的RK3566主板搭建一体机

    我向给11系统的RK3566主板搭建一套显示器、电源拿来作为测试,怎么搭配好呢
    发表于 12-17 17:26