当前位置:首页 > android DHCP获取IP失败分析解决
android 通过DHCP获取IP初步流程
==================================================================== 1.
java中实现log的方法是
Log.v(TAG, \
D/WifiStateTracker( 860): DhcpHandler: DHCP request started
发生在 ./frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java:2285 2.
java层运行dhcp的地方有两个
./frameworks/base/ethernet/java/android/net/ethernet/EthernetStateTracker.java ./frameworks/base/wifi/java/android/net/wifi/WifiStateTracker.java 定义在
./frameworks/base/core/java/android/net/NetworkUtils.java
runDhcp的jni实现./frameworks/base/core/jni/android_net_NetUtils.cpp:231
对应的函数是android_net_utils_runDhcp,此函数会调用dhcp_do_request, dhcp_do_request定义在./system/core/libnetutils/dhcp_utils.c中 3.
rt3070 wifi 驱动适配层在./hardware/libhardware_legacy/wifi/wifi_ralink3070.c
Ethernet分析
1.EthernetNative.java的jni在./frameworks/base/core/jni/android_net_ethernet.cpp
故障描述:
(android手机)LG P350连接wifi(wlan)时若使用动态ip分配,则总停留在“正在从[SSID名称]获取IP地址”,然后获取失败,自动断开。反复重新连接均如此。
设置静态IP则可以连接。
排查过程:
(1)搜索引擎输入“LG P350 wifi obtain ip fail”,无有效信息。 (2)刷包,刷了3个官方KDZ(V10K_00,V10N_00,V10P_00),无果。 (3)今天反编译关系,得学android调试技术,adb logcat时发现DHCP获取ip时,提示有文件无权限打开,接着就是超时失败。关键部分信息摘录如下: D/NetworkStateTracker(1372): setDetailed state, old =AUTHENTICATING and new sta
te=OBTAINING_IPADDR ?...
D/WifiStateTracker(1372): DhcpHandler: DHCP request started ?.
E/dhcpcd ( 9576): open`/data/misc/dhcp/dhcpcd-wlan0.pid': Permission denied ?...
V/WifiStateTracker(1372): Changing supplicant state: COMPLETED ==> DORMANT
D/WifiStateTracker(1372): Reset connections and stopping DHCP ??.
D/WifiStateTracker( 1372): Disabling interface
D/NetworkStateTracker(1372): setDetailed state, old=OBTAINING_IPADDR and new state=FAILED
E/WifiInfo( 1372):setSSID null ??.
V/WifiStateTracker( 1372): New network state is DISCONNECTED V/WifiStateTracker(1372): Changing supplicant state: DORMANT ==> DORMANT E/WifiInfo( 1372):getSSID null
D/ConnectivityService(1372): ConnectivityChange for WIFI:DISCONNECTED/FAILED
V/ConnectivityService(1372): Attempt to connect to WIFI failed. D/ConnectivityService(1372): getMobileDataEnabled returning false (4)root explorer(又名RE浏览器)浏览该文件夹(/data/misc/dhcp/),发现others组无写权限。
推测dhcpcd进程在动态获取到ip,需要写配置文件到这个文件夹的时候,发现无权限写入,结果外部等待超时,wifi连接被放弃和重置,因此外部也就表现为无法连接了。
解决方法:
(1)手机要先root,推荐SuperOneClickv2.3.3。 (2)安装root explorer(又名RE浏览器)应用。 (3)关闭wifi(即wlan)
(4)打开root explorer并授权获取root权限。 (5)找到文件夹“/data/misc/dhcp/”,将others组的权限改为可读可写可执行,如图。
(6)打开这个文件夹,如果里面有文件,全部删掉或者改名为bak作备份。
(7)开启wifi重试。
其它和备注:
(1)只是为了反编译安卓apk,现在连adb logcat都得看了,悲催啊。目测本人走远了?
共分享92篇相关文档