必赢亚洲手机app下载


step_by_step_xUnit_Net_ABP电脑软件

您发火就对了

WIFI驱动模块

一:什么是WIFI

WIFI是一种有线连接技术,可用以手机、电脑、PDA等极端。WIFI技术暴发的目标是立异基于IEEE802.11标准的有线网络产品之间的互通性,也就是说WIFI是基于802.11业内的,但WIFI不等同有线网络。

二:Android平台下的WIFI模块

大约介绍一下,WIFI模块的基本效用:

  1. 开关WIFI
    除开在WIFI设置界面可以开关WIFI,还有其余的格局可以安装,要翻开这么些开关状态是或不是一致。还有就是飞行情势对WIFI开关的熏陶,由于WIFI开和关都有一个时日经过,而飞行方式的开关眨眼间间落成,所以有时候会冒出争辩。

  2. 开关新可用网络提醒
    新可用网络的概念是自WIFI模块开启后,从未发现过的,为加密的网络。唯有满足了新可用网络的概念,才会有提示。

  3. 连日来断开网络
    屡次三番断开各样分裂加密类型的网络(具体品种下文有详解)

  4. 手动添加网络
    亟需路由器关闭SIID广播。可手动输入SIID,网络加密类型,密码。对于OPAL手机来说,路由器隐藏了SSID,手动添加的网络是无力回天连接的。

  5. 找寻网络
    手动点击搜索按钮可以搜寻网络,也得以等待WIFI模块自动搜索网络。

  6. 休眠设置
    由于WIFI模块是用电大户,所有为了省电,Android的WIFI加了一个休眠策略,可以设置永远持续开,充电时连连开和锁屏时断开。要测试休眠设置
    是还是不是管用,可以在路由器上PING手机的IP,PING通就是接连情形。OPAL手机的休眠策略属于完全失效,现在的意况是随便选哪些都会直接保持延续,
    锁屏后15分钟再休眠。

  7. 设置静态IP
    Android系统里对IP设置的输入限制很有题目,我直接认为那是弱智的限定。正常IP的范围在0-255以内,android对IP输入的界定是整数0到整数255之内,也就是说0000.000200.001.001那样一个IP都能官方输入。

三:对WIFI模块深切精通一点点

1、WIFI的为主运作流程

图片 1

【初始化】

1 在SystemServer启动的时候,会变动一个ConnectivityService(Service)的实例。

2 ConnectivityService(Service)的协会函数会创制Wifi瑟维斯(Service)(Service)。

3
WifiStateTracker会创造WifiMonitor接收来自底层的轩然大波,WifiService和WifiMonitor是成套模块的为主。
Wifi瑟维斯(Service)(Service)负责启动关闭wpa_supplicant、启动关闭WifiMonitor监视线程和把命令颁发给
wpa_supplicant,而WifiMonitor则承担从wpa_supplicant接收事件通报。

【连接AP】

1 WirelessSettings在初步化的时候配置了由WifiEnabler来处理Wifi按钮。

2 当用户按下Wifi按钮后,
Android会调用WifiEnabler的onPreferenceChange,再由WifiEnabler调用WifiManager的
setWifiEnabled接口函数,通过AIDL,实际调用的是WifiService(Service)的setWifiEnabled函数,WifiService(Service)接着向自家发送一条MESSAGE_ENABLE_WIFI音信,在拍卖该音信的代码中做实在的使能做事:首先装载WIFI内核模块(该模块的岗位硬编码
为”/system/lib/modules/wlan.ko” ),然 后 启 动wpa_supplicant (配 置 文
件 硬 编 码
为”/data/misc/wifi/wpa_supplicant.conf”)再通过WifiStateTracker来启动WifiMonitor
中的监视线程。

3当使能成功后,会播放发送WIFI_STATE_CHANGED_ACTION这么些Intent公告外界WIFI已
经 成 功 使 能 了 。WifiEnabler创 建 的 时 候 就 会 向Android注 册 接
收WIFI_STATE_CHANGED_ACTION,因而它会吸收该Intent,从而起始扫描。

【查找AP】

1
扫描的入口函数是Wifi瑟维斯(Service)的startScan,它实际也就是往wpa_supplicant发送SCAN命令。

2
当wpa_supplicant处理完SCAN命令后,它会向控制通道发送事件通报扫描已毕,从而wifi_wait_for_event函数会接收到该事件,由此WifiMonitor中的MonitorThread会被执行来出来那一个事件。

3
WifiStateTracker则接着播放发送SCAN_RESULTS_AVAILABLE_ACTION这个Intent。

4
WifiLayer注册了收纳SCAN_RESULTS_AVAILABLE_ACTION那么些Intent,所以它的相干处理函数
handleScanResultsAvailable会被调用,在该函数中,先会去得到SCAN的结果(最后是往wpa_supplicant发送
SCAN_RESULT命令并读取重临值来兑现的),List list =
mWifiManager.getScanResults();对每一个扫描重回的AP,WifiLayer会调用WifiSettings的
onAccessPointSetChanged函数,从而最后把该AP加到GUI展现列表中。

【配置AP参数】

当用户在WifiSettings界面上摘取了一个AP后,会浮现配置AP参数的一个对话框。

showAccessPointDialog(state, AccessPointDialog.MODE_INFO);

【连接】

当用户在AcessPointDialog中甄选好加密方法和输入密钥之后,再点击连接按钮,Android就会去老是这一个AP。

1
WifiLayer会先检测那一个AP是否事先被布置过,这几个是经过向wpa_supplicant发送LIST_NETWORK命令并且相比重回值来兑现的,

//Need WifiConfiguration for the AP

WifiConfiguration 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之后,它会向控制通道发送事件通报连接上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_STATE_CHANGED_ACTION这一个Intent,所以它的有关处理函数
handleNetworkStateChanged会被调用,当DHCP获得IP地址然后,会再发送EVENT_DHCP_SUCCEEDED消息。

5 WifiLayer处 理EVENT_DHCP_SUCCEEDED音讯,会另行广播发送。

从这之后甘休,整个连接进程一挥而就。

2、wpa_supplicant

Android平台应用的WiFi控制框架是根据大名鼎鼎的wpa_supplicant,它是一个平安中间件,为种种有线网卡提供统一的克拉玛依体制,如下图所示:

图片 2

对应上述协会,基于Android的手机中的WiFi控制分为三大组件:

1
客户端程序,蕴含wpa_cli命令行或java图形界面程序,通过unix本地socket与wpa_supplicant
daemon服务通讯,发送命令并接收结果。

2 wpa_supplicant
daemon服务,对应上述中间有些,成效是“上传下达”。所有客户端通过它控制硬件网卡,通过发送字符串命令控制是不是扫描AP,提取扫描结果和是不是涉嫌
AP等操作,同时将使得的举行情况发送给用户。该服务是设计支撑多种有线网卡芯片,因而各样厂商共同提供了一个通用接口给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=WPA-PSK WPA-EAP
# pairwise=CCMP
# group=CCMP
#
psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
#}

今非昔比种类的网络,区其他参数等等,应有尽有。

四:对WIFI模块的LOG了然多一点点

咱俩在上边已经明白WIFI的开行进程,在效益运行中也会输出相应的日记音讯,上边就来详细询问一下。(请小心,WIFI开启后会更改电池状态等别的状
态。关闭WIFI时,android的政策是卸载驱动来省电。如有缺失就是题材。但是下文删去了与WIFI无关的LOG!)

1、开启WIFI&自动检索

E/WifiHW ( 1201): ==JOHN DEBUG==: [WIFI] Load Driver

加载驱动
D/SettingsWifiEnabler( 1321): Received wifi state changed from Disabled
to Enabling

接受到广播:WIFI正在开启
D/WifiService( 1201): ACTION_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

wpa_supplicant发出事件通报

V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=2]

WifiMonitor从wpa_supplicant接收事件通报

I/wpa_supplicant( 2490): CTRL-EVENT-SCAN-RESULTS Ready

wpa_supplicant发出事件通报:准备好起来物色网络了

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-ACTIVE len
= 4096

wpa_supplicant发出事件通报:驱动命令行.主动搜索.LEN

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-ACTIVE len
= 0, 11

wpa_supplicant发出事件通报:驱动命令行.主动搜索.LEN

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-PASSIVE
len = 4096

wpa_supplicant发出事件通报:驱动命令行.被动搜索.LEN

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd SCAN-PASSIVE
len = 0, 12

wpa_supplicant发出事件通报:驱动命令行.被动搜索.LEN=0.12

D/SettingsWifiEnabler( 1321): Received wifi state changed from Enabling
to Enabled

接过到广播:WIFI已经开启

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd RSSI len = 4096

wpa_supplicant发出事件通报:

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd RSSI len = 4, 4

wpa_supplicant发出事件通报:

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd LINKSPEED len =
4096

wpa_supplicant发出事件通报:

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd LinkSpeed 54
len = 12, 12

wpa_supplicant发出事件通报:

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd MACADDR len =
4096

wpa_supplicant发出事件通报:驱动命令行.MAC地址.LEN

E/wpa_supplicant( 2490): wpa_driver_priv_driver_cmd Macaddr =
44:A4:2D:27:25:BE

wpa_supplicant发出事件通报:驱动命令行.MAC地址

E/wpa_supplicant( 2490): len = 28, 28

wpa_supplicant发出事件通报:

V/WifiStateTracker( 1201): Connection to supplicant established,
state=SCANNING

WIFI状态跟踪:连接请求确认,状态=搜索

D/NetworkStateTracker( 1201): setDetailed state, ld =IDLE and new
state=SCANNING

网络状态跟踪:更新展现为寻找状态

V/WifiStateTracker( 1201): Changing supplicant state: SCANNING ==>
INACTIVE

WIFI状态跟踪:更改请求状态:搜索中->不挪窝

2、点击连接&获取状态

E/WifiHW ( 1201): ==JOHN DEBUG==: [WIFI] Load Driver

WIFI硬件:加载驱动
D/SettingsWifiEnabler( 1321): Received wifi state changed from Disabled
to Enabling

接过广播,WIFI状态正在开启
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硬件:加载内核模块
E/WifiHW ( 1201): ==JOHN DEBUG==: return of insmod : ret = 0, Unknown
error: 0

WIFI硬件:重回装载模块报告:重返指令0,未知错误0

……

I/wpa_supplicant( 2490): Trying to associate with 1c:bd:b9:f6:a7:9f
(SSID=’LosAngeles’ freq=2412 MHz)

wpa_supplicant发出事件通报:尝试连接,(SSID=’Los安琪(Angel)es’频段=2412 MHz)

V/WifiMonitor( 1201):Event[Trying to associate with 1c:bd:b9:f6:a7:9f
(SSID=’LosAngeles’ freq=2412 MHz)]

WifiMonitor接收wpa_supplicant的事件

V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=-1 state=3]

WifiMonitor接收事件

V/WifiStateTracker( 1201): Changing supplicant state: SCANNING ==>
ASSOCIATING

WIFI状态跟踪:更改请求状态:搜索中->匹配中

D/NetworkStateTracker( 1201): setDetailed state, ld =SCANNING and new
state=CONNECTING

网络状态跟踪:更新突显为正在连接状态

D/ConnectivityService( 1201): ConnectivityChange for WIFI:
CONNECTING/CONNECTING

老是管理服务:改变WIFI连接状态:正在连接/正在连接

V/WifiStateTracker( 1201): Changing supplicant state: ASSOCIATING ==>
ASSOCIATED

WIFI状态跟踪:更改请求状态:匹配中->已卓殊

D/NetworkStateTracker( 1201): setDetailed state, ld =CONNECTING and new
state=CONNECTING

网络状态跟踪:更新显示为正在连接状态

I/wpa_supplicant( 2490): Associated with 1c:bd:b9:f6:a7:9f

wpa_supplicant发出事件通报:已和1c:bd:b9:f6:a7:9f合作

V/WifiMonitor( 1201): Event [Associated with 1c:bd:b9:f6:a7:9f]

WifiMonitor接收wpa_supplicant的事件

V/WifiStateTracker( 1201): Changing supplicant state: ASSOCIATED ==>
FOUR_WAY_HANDSHAKE

WIFI状态跟踪:更改请求状态:已至极->TCP中断连接

D/NetworkStateTracker( 1201): setDetailed state, ld =CONNECTING and new
state=AUTHENTICATING

网络状态跟踪:更新突显为评判中

D/ConnectivityService( 1201): Dropping ConnectivityChange for WIFI:
CONNECTING/AUTHENTICATING

连年管理服务:抛出WIFI连接状态改变:已接连/鉴定中

V/WifiStateTracker( 1201): Changing supplicant state:
FOUR_WAY_HANDSHAKE ==> GROUP_HANDSHAKE

WIFI状态跟踪:更改请求状态:TCP中断连接->确认标志位

D/NetworkStateTracker( 1201): setDetailed state, ld =AUTHENTICATING and
new state=AUTHENTICATING

网络状态跟踪:更新显示为考评中

I/wpa_supplicant( 2490): WPA: Key negotiation completed with
1c:bd:b9:f6:a7:9f [PTK=CCMP GTK=TKIP]

wpa_supplicant发出事件通报:WPA:与1c:bd:b9:f6:a7:9f确定标志位

I/wpa_supplicant( 2490): CTRL-EVENT-STATE-CHANGE id=0 state=7

wpa_supplicant发出事件通报:

I/wpa_supplicant( 2490): CTRL-EVENT-CONNECTED – Connection to
1c:bd:b9:f6:a7:9f completed (auth) [id=0 id_str=]

wpa_supplicant发出事件通报:连接形成

V/WifiMonitor( 1201): Event [WPA: Key negotiation completed with
1c:bd:b9:f6:a7:9f [PTK=CCMP GTK=TKIP]]

WifiMonitor接收wpa_supplicant事件

V/WifiMonitor( 1201): Event [CTRL-EVENT-STATE-CHANGE id=0 state=7]

WifiMonitor接收wpa_supplicant事件

V/WifiMonitor( 1201): Event [CTRL-EVENT-CONNECTED – Connection to
1c:bd:b9:f6:a7:9f completed (auth) [id=0 id_str=]]

WifiMonitor接收wpa_supplicant事件

V/WifiStateTracker( 1201): Changing supplicant state: GROUP_HANDSHAKE
==> COMPLETED

WIFI状态跟踪:更改请求状态:确认标志位->达成

V/WifiStateTracker( 1201): New network state is CONNECTED

WIFI状态跟踪:新网络状态为已接连

D/NetworkStateTracker( 1201): setDetailed state, ld =AUTHENTICATING and
new state=OBTAINING_IPADDR

网络状态跟踪:更新突显为获取IP地址

D/ConnectivityService( 1201): Dropping ConnectivityChange for WIFI:
CONNECTING/OBTAINING_IPADDR

接连管理服务:抛出WIFI

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图