Android 设备开机后第一次打开热点2.4G系统重启?以5G形式打开热点没有问题!
这个问题咋回事呢?和底层驱动的人一起分析了一下,本文进行分享一下分析和解决过程。
这种问题一般应用开发不会遇到,只有一些系统开发,或者系统新方案调试可能会遇到。
查看了AndroidRuntime 和crash 日志,重启前没啥异常日志。这种情况一般是底层/驱动未完全适配导致。
以5G形式打开热点没有问题!
并且第一次以5G形式打开热点,第二次再以2.4G形式可以正常打开热点。
这种情况没遇到过啊!只能看看日志了。
查看了AndroidRuntime 和 crash 关键字的日志,重启前没啥异常日志。
设备重启的异常情况一般adb日志比较难看到相关日志。
从串口查看日志发现重启前logcat和内核日志,有如下日志:
12-2[ 407.566214][0 T6256 d.] Internal error: BRK handler: f2005512 [#1] PREEMPT SMP
...
[ 409.545917][0 T6256 d.] Kernel panic - not syncing: BRK handler: Fatal exception
从这个内核Kernel日志看,BPK异常后,就挂了。
百度查看了一下“Kernel panic - not syncing”这个异常是芯片启动异常。
对底层不熟悉,不做进一步分析。
后续的分析和解决都是底层开发的协助完成的。
8852bs在打开2.4G热点的时候,wpa config文件中配置了80211ac就会重启!
80211ac 是一种路由设置,开启热点需要把自己的设备当成路由器,所以底层要配置一写路由参数。
80211ac 配置是5G热点才能设置的。所以系统热点开启不能默认配置80211ac,否则会异常。
对wpa config配置文件修改了一下,80211ac 属性只有在5G热点才配置。
+++ b/release/XXX/common/wifi_bt/wifi/wpa_supplicant_8/hostapd/aidl/hostapd.cpp
@@ -699,7 +699,7 @@ std::string CreateHostapdConfig(
iface_params.name.c_str(), ssid_as_string.c_str(),
channel_config_as_string.c_str(),
iface_params.hwModeParams.enable80211N ? 1 : 0,
- iface_params.hwModeParams.enable80211AC ? 1 : 0,
+ (iface_params.hwModeParams.enable80211AC && ((band & band5Ghz) != 0)) ? 1 : 0,
he_params_as_string.c_str(),
hw_mode_as_string.c_str(), ht_cap_vht_oper_he_oper_chwidth_as_string.c_str(),
nw_params.isHidden ? 1 : 0,
从上面代码可以看到 最终修改就是把 enable80211AC 判断是5G网络时才配置。
上面的 wpa 目录是AML 供应商的目录,一般系统的目录可能是在 external/wpa_supplicant_8
设置代理信息需要填写端口号,如果端口号超出范围也会导致系统重启。
网络端口号的范围是1-65535,65535 是2的16次方,是4个字节的存储空间。
具体报错是啥当的时没看!因为比较好解所以未进行分析。
这里只要在应用中判断端口号范围即可解决该问题。
今天顺便测了一下,发现这种情况只是sygoty重启了是有AndroidRuntime 的,部分日志如下:
01-05 18:23:41.261 1452 1452 D wpa_supplicant: nl80211: Deauthenticate event
01-05 18:23:41.261 1452 1452 D wpa_supplicant: nl80211: Ignore deauth event triggered due to own deauth request
01-05 18:23:41.261 1452 1452 D wpa_supplicant: nl80211: Event message available
01-05 18:23:41.262 1452 1452 D wpa_supplicant: nl80211: Drv Event 48 (NL80211_CMD_DISCONNECT) received for wlan0
01-05 18:23:41.262 1452 1452 D wpa_supplicant: nl80211: Ignore disconnect event when using userspace SME
01-05 18:23:41.265 1951 1951 D PinyinIME: onWindowHidden
01-05 18:23:41.272 1951 1951 D wdw : getScreenWidth 1260
01-05 18:23:41.272 1951 1951 D wdw : getHeightForCandidates mCandidatesAreaHeight50
01-05 18:23:41.273 889 1067 D WifiConfigurationUtil: Add upgradable SAE configuration.
--------- beginning of crash
01-05 18:23:41.276 889 1067 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: WifiHandlerThread
01-05 18:23:41.276 889 1067 E AndroidRuntime: java.lang.IllegalArgumentException: Invalid ProxyInfo: [t] 888888 xl=y
01-05 18:23:41.276 889 1067 E AndroidRuntime: at android.net.wifi.WifiConfiguration.setHttpProxy(WifiConfiguration.java:3807)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at com.android.server.wifi.WifiConfigManager.mergeWithInternalWifiConfiguration(WifiConfigManager.java:1164)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at com.android.server.wifi.WifiConfigManager.updateExistingInternalWifiConfigurationFromExternal(WifiConfigManager.java:1284)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at com.android.server.wifi.WifiConfigManager.addOrUpdateNetworkInternal(WifiConfigManager.java:1384)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at com.android.server.wifi.WifiConfigManager.addOrUpdateNetwork(WifiConfigManager.java:1578)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at com.android.server.wifi.WifiConfigManager.addOrUpdateNetwork(WifiConfigManager.java:1619)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at com.android.server.wifi.WifiServiceImpl.lambda$connect$112(WifiServiceImpl.java:5899)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at com.android.server.wifi.WifiServiceImpl.$r8$lambda$nNJamaVDTZuLL0j_quZy9fnDAw4(Unknown Source:0)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at com.android.server.wifi.WifiServiceImpl$$ExternalSyntheticLambda16.run(Unknown Source:12)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:942)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at android.os.Looper.loopOnce(Looper.java:201)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at android.os.Looper.loop(Looper.java:288)
01-05 18:23:41.276 889 1067 E AndroidRuntime: at android.os.HandlerThread.run(HandlerThread.java:67)
01-05 18:23:41.282 889 1067 I DropBoxManagerService: add tag=system_server_crash isTagEnabled=true flags=0x2
01-05 18:23:41.287 889 1067 I Process : Sending signal. PID: 889 SIG: 9
看了下日志没看出啥,可能跟Hal层有点关系,具体还需要进一步分析。
这个是之前写的framework 上层代码的修改:
https://blog.csdn.net/wenzhi20102321/article/details/135349837
https://blog.csdn.net/wenzhi20102321/article/details/127737534