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网络的应用程序。

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

    评论

    相关推荐

    工控主板在轨道交通的应用特点

    工控主板在轨道交通的应用特点主要体现在以下几个方面:
    的头像 发表于 08-22 17:15 206次阅读

    浅析工控主板的优势

    工控主板作为专为工业控制领域设计的硬件平台,相较于普通商用主板,拥有诸多优势,以满足工业环境对稳定、可靠、长期运行的严格要求。以下是工控主板的主要优势分析:
    的头像 发表于 06-27 14:50 219次阅读

    工业主板在智能柜员机的应用

    工业主板在智能柜员机(Smart Teller Machine,STM)应用的作用至关重要,它们提供了稳定、高效、安全的计算平台,支持STM的各种功能和服务。以下是工业
    的头像 发表于 06-18 15:37 228次阅读

    谷歌15将提升对助听器支持,改善音频体验

    5 月 30 日,谷歌正式公布了 15 更新计划,将大幅度提升系统对助听器的支持程度,使其可与具备蓝牙 LE 音频技术的助听器无缝对
    的头像 发表于 05-30 15:11 773次阅读

    15调整存储设置,系统细分系统文件与临时文件

    目前,手机用户在存储设置可查看各类型文件占用空间的详细数据,如应用程序、文档、图片、游戏、音频等,以及“系统”(System)空间内的基本系统
    的头像 发表于 05-17 14:32 500次阅读

    谷歌正探索在设备上运行ChromeOS

     多年以来,谷歌为实现这两款操作系统的协同工作付出诸多努力,如 Chromebook 内置运行环境,允许其运行应用,反之则不可。
    的头像 发表于 05-14 10:12 304次阅读

    谷歌15将引入新特性,改善屏幕分享过程的意外泄露问题

    5.0起,第三方应用可借助MediaProjection API捕捉屏幕内容;而在11的快速设置,也可利用此API进行快速录屏。
    的头像 发表于 04-24 15:47 599次阅读

    车载终端_控车机主板智能后视镜行车记录仪PCBA方案

    图形处理器,搭载11.0系统,经过车机版深度优化定制系统,支持WIFI连接和APP下载。通过无线W
    的头像 发表于 03-21 20:02 541次阅读
    车载终端_<b class='flag-5'>中</b>控车机<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板智能后视镜行车记录仪PCBA方案

    华为鸿蒙系统怎么样 华为鸿蒙系统系统的区别

    和稳定性。与此同时,鸿蒙系统系统在架构、功能和生态系统方面都存在一些区别和特点,下面将详细探讨这些方面的差异。 首先,华为鸿蒙
    的头像 发表于 02-02 14:54 1391次阅读

    手机定制_基于天玑900的手机主板方案

    手机定制_基于天玑900的手机主板方案。5G手机方案是一款性能强劲的5G智能手机,采
    的头像 发表于 01-24 19:41 506次阅读
    <b class='flag-5'>安</b><b class='flag-5'>卓</b>手机定制_基于天玑900的手机<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板方案

    鸿蒙系统的区别 鸿蒙系统有什么特别之处

    鸿蒙系统是华为公司自主研发的一款全新操作系统,旨在替代系统。鸿蒙系统
    的头像 发表于 01-18 11:45 1.1w次阅读

    鸿蒙系统的区别哪个好用

    鸿蒙系统系统是目前市场上两个比较流行的手机操作系统,它们在很多方面都有所不同。本文将从多个方面比较鸿蒙
    的头像 发表于 01-11 11:15 1613次阅读

    harmonyos和的区别

    HarmonyOS是由华为开发的一款全场景分布式操作系统,而(Android)则是由谷歌开发的移动操作系统。虽然两者都是操作系统,但它们
    的头像 发表于 01-10 17:55 2912次阅读

    平板,学习平板、工业平板主板开发

    平板,学习平板、工业平板主板开发。平板具备高度集成的特点, 它集成了多媒体解码、液晶
    的头像 发表于 10-30 19:27 1005次阅读
    <b class='flag-5'>安</b><b class='flag-5'>卓</b>平板,学习平板、工业平板<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板开发

    主板_MTK6765开发板-联发科主板方案介绍

    主板_MTK6765开发板-搭载联发科(MediaTek)MTK6765处理器,这款高性能ARM处理器被广泛应用于个人移动互联网设备和其他应用程序。MT6765采用了八核Cor
    的头像 发表于 10-11 19:27 1343次阅读
    <b class='flag-5'>安</b><b class='flag-5'>卓</b>主板_MTK6765<b class='flag-5'>安</b><b class='flag-5'>卓</b>开发板-联发科<b class='flag-5'>安</b><b class='flag-5'>卓</b>主板方案介绍