2022年android平台的WIFI模块 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年android平台的WIFI模块 .pdf》由会员分享,可在线阅读,更多相关《2022年android平台的WIFI模块 .pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、WIFI 模块申屠家振修改1.2011 年 1 月 19 日2.2011 年 1 月 27 日对 android 平台的 WIFI 模块进行已经有段时间了,现在做一总结,以便以后查阅与修正。心得之作,如有异议,请斧正。什么是 WIFI WIFI是一种无线连接技术,可用于PC,PDA ,手机等终端。WIFI的目的是改善基于IEEE802.11 标准的无线网络产品之间的互通性,也就是说WIFI 是基于 802.11 标准的,但WIFI 不等同无线网络。android 平台下的WIFI 模块简单介绍一下,WIFI 模块的基本功能:开关 WIFI 除了在WIFI 设置界面可以开关WIFI ,还有其他的
2、入口可以开关,要查看这些开关状态是否一致。还有就是飞行模式对WIFI 开关的影响,由于WIFI 开和关都有一个时间过程,而飞行模式的开关瞬间完成,所以有时会出现冲突。开关新可用网络提醒新可用网络的定义是自WIFI 模块开启后,从未发现过的,为加密的网络。只有满足了新可用网络的定义,才会有提醒。连接断开网络名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 连接断开各种不同加密类型的网络(具体类型下文有详解)手动添加网络需要路由器关
3、闭SIID 广播。 可手动输入SIID ,网络加密类型, 密码。 对于 OPAL 手机来说,路由器隐藏了SSID,手动添加的网络是无法连接的。搜索网络手动点击搜索按钮可以搜索网络,也可以等待WIFI 模块自动搜索网络。休眠设置由于 WIFI 模块是用电大户,所有为了省电,android 的 WIFI 加了一个休眠策略,可以设置永远不断开, 充电时不断开和锁屏时断开。要测试休眠设置是否有效,可以在路由器上PING手机的 IP,PING 通就是连接状态。OPAL 手机的休眠策略属于完全失效,现在的情况是无论选哪个都会一直保持连接,锁屏后15 分钟再休眠。设置静态IP Android 系统里对IP
4、设置的输入限制很有问题,我一直认为这是弱智的限制。正常IP 的范围在0-255 之间, android 对IP 输入的限制是整数0 到整数255 之间,也就是说0000.000200.001.001 这样一个IP 都能合法输入。对 WIFI 模块深入了解一点点WIFI 的基本运行流程【初始化】1 在 SystemServer启动的时候 ,会生成一个ConnectivityService 的实例2 ConnectivityService 的构造函数会创建WifiService 3 WifiStateTracker 会创建 WifiMonitor接收来自底层的事件,WifiService 和 Wi
5、fiMonitor是整个模块的核心。WifiService负责启动关闭wpa_supplicant、启动关闭WifiMonitor监视线程和把命令下发给wpa_supplicant,而 WifiMonitor则负责从wpa_supplicant 接收事件通知。【连接 AP】名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - 1 WirelessSettings 在初始化的时候配置了由WifiEnabler 来处理 Wifi 按钮2
6、当用户按下Wifi 按钮后 , Android 会调用 WifiEnabler 的 onPreferenceChange,再由 WifiEnabler调用WifiManager的 setWifiEnabled接口函数 ,通过AIDL, 实际调用的是WifiService的setWifiEnabled 函数 ,WifiService 接着向自身发送一条MESSAGE_ENABLE_WIFI消息 ,在处理该消息的代码中做真正的使能工作:首先装载WIFI内核模块 (该模块的位置硬编码为/system/lib/modules/wlan.ko ),然后启动 wpa_supplicant (配置文件硬编码
7、为/data/misc/wifi/wpa_supplicant.conf)再通过 WifiStateTracker 来启动 WifiMonitor中的监视线程3 当使能成功后,会广播发送WIFI_STATE_CHANGED_ACTION这个 Intent 通知外界WIFI已 经成功使 能了。WifiEnabler创 建的时 候就会向 Android注 册接收WIFI_STATE_CHANGED_ACTION,因此它会收到该Intent,从而开始扫描【查找 AP】1 扫描的入口函数是WifiService 的 startScan,它其实也就是往wpa_supplicant 发送 SCAN 命令。
8、2 当 wpa_supplicant处理完SCAN命令后 ,它会向控制通道发送事件通知扫描完成,从而wifi_wait_for_event函数会接收到该事件,由此 WifiMonitor中的 MonitorThread 会被执行来出来这个事件。3 WifiStateTracker 则接着广播发送SCAN_RESULTS_A VAILABLE_ACTION这个 Intent。4 WifiLayer注册了接收SCAN_RESULTS_A VAILABLE_ACTION这个 Intent,所以它的相关处理函数 handleScanResultsAvailable 会被调用 ,在该函数中 ,先会去拿到
9、SCAN 的结果 (最终是往 wpa_supplicant 发送 SCAN_RESULT 命令并读取返回值来实现的),List list = mWifiManager.getScanResults(); 对每一个扫描返回的AP,WifiLayer会调用WifiSettings的onAccessPointSetChanged 函数 ,从而最终把该AP 加到 GUI 显示列表中。【配置 AP 参数】当用户在WifiSettings 界面上选择了一个AP 后,会显示配置AP 参数的一个对话框。showAccessPointDialog(state, AccessPointDialog.MODE_IN
10、FO); 【连接】当用户在 AcessPointDialog 中选择好加密方式和输入密钥之后,再点击连接按钮,Android 就会去连接这个AP。1 WifiLayer会先检测这个AP 是不是之前被配置过,这个是通过向wpa_supplicant 发送名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - LIST_NETWORK命令并且比较返回值来实现的, /Need WifiConfiguration for the AP Wif
11、iConfiguration config = findConfiguredNetwork(state); 如果 wpa_supplicant 没有这个AP 的配置信息 ,则会向 wpa_supplicant 发送 ADD_NETWORK命令来添加该AP 2 ADD_NETWORK命 令 会 返 回 一 个 ID,WifiLayer再 用 这 个 返 回 的 ID 作 为参数向 wpa_supplicant 发送 ENABLE_NETWORK命令 ,从而让 wpa_supplicant 去连接该 AP。【配置 IP 地址】1 当 wpa_supplicant 成功连接上AP 之后 ,它会向控制
12、通道发送事件通知连接上AP 了,从而wifi_wait_for_event函数会接收到该事件,由此 WifiMonitor中的 MonitorThread 会被执行来出来这个事件2 WifiMonitor再调用 WifiStateTracker 的 notifyStateChange,WifiStateTracker 则接着会往自身发送 EVENT_DHCP_START消息来启动DHCP 去获取 IP 地址3 然后再广播发送NETWORK_STATE_CHANGED_ACTION这个 Intent 4 WifiLayer 注册了接收NETWORK_STA TE_CHANGED_ACTION这个
13、 Intent,所以它的相关处理函数handleNetworkStateChanged会被调用,当DHCP拿到IP 地址之后,会再发送EVENT_DHCP_SUCCEEDED消息5 WifiLayer 处 理 EVENT_DHCP_SUCCEEDED消 息,会 再 次 广 播 发 送至此为止 ,整个连接过程完成2. wpa_supplicant Android 平台使用的WiFi 控制框架是基于大名鼎鼎的wpa_supplicant, 它是一个安全中间件,为各种无线网卡提供统一的安全机制,如下图所示:对应上述结构,基于Android 的手机中的WiFi 控制分为三大组件:1)客户端程序,包括w
14、pa_cli 命令行或java 图形界面程序,通过unix 本地 socket 与wpa_supplicant daemon 服务通信,发送命令并接收结果;2)wpa_supplicant daemon 服务,对应上述中间部分,功能是“上传下达”。所有客户端通过它控制硬件网卡,通过发送字符串命令控制是否扫描AP,提取扫描结果和是否关联AP 等名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 操作, 同时将驱动的执行状态发送给用户
15、。该服务是设计支持多种无线网卡芯片,因此各个厂商共同提供了一个通用接口给wpa_supplicant 调用;3)网卡驱动;在手机内存的 /etc/wpa_supplicant.conf 中我们可以直接看到WIFI 支持的网络类型, 每种类型都有例子,比如:#Both WPA-PSK and WPA-EAP is accepted. Only CCMP is accepted as pairwise and # group cipher. #network= # ssid=example # bssid=00:11:22:33:44:55 # proto=WPA RSN # key_mgmt=W
16、PA-PSK WPA-EAP # pairwise=CCMP # group=CCMP # psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb # 不同类型的网络,不同的参数等等,应有尽有。对 WIFI 模块的 LOG 了解多一点点我们在上面已经知道WIFI 的启动过程,在功能运行中也会输出相应的日志信息,下面就来详细了解一下。 (请注意, WIFI 开启后会更改电池状态等其他状态。关闭WIFI 时, android的策略是卸载驱动来省电。如有缺失就是问题。不过下文删去了与WIFI 无关的 LOG ! )1.
17、开启 WIFI& 自动搜索E/WifiHW ( 1201): =JOHN DEBUG=: WIFI Load Driver 加载驱动名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - D/SettingsWifiEnabler( 1321): Received wifi state changed from Disabled to Enabling 接收到广播: WIFI 正在开启D/WifiService( 1201): ACT
18、ION_BATTERY_CHANGED pluggedType: 2 电池状态改变E/WifiHW(1201):=JOHNDEBUG=:moduleaddress:4b938008 filename:/system/lib/modules/dhd.ko args:firmware_path=/system/wlan/broadcom/rtecdc.bin nvram_path=/system/wlan/broadcom/nvram.txt WIFI 硬件:加载内核模块I/wpa_supplicant( 2490): CTRL-EVENT-STATE-CHANGE id=-1 state=2 w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年android平台的WIFI模块 2022 android 平台 WIFI 模块
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内