当前位置: 首页 > news >正文

Android13 wifi设置关闭后断电重启会自动打开

一、主题

wifi设置关闭后断电重启会自动打开

二、问题背景

硬件:全志平台

软件:android 13

三、问题描述

1、复现步骤

(1)当前wifi关闭状态时:

打开wifi,并连接ap

等待一段时间

设备断电关机并重启

wifi状态仍为关闭

(2)当前wifi打开状态时:

关闭wifi

等一段时间

设备断电关机并重启

wifi状态仍为打开

2、具体表现

(1)系统断电后,系统级别的配置非断电前修改的状态

(2)如wifi设置关闭后断电重启,wifi还是处于打开状态

四、问题分析

有以下两种可能性:

1、WiFi状态保留在内存状态,未保存持久化

2、WiFi状态保存磁盘后,未刷IO CACHE,导致文件系统数据未实际写入磁盘,导致掉电后数据丢失

排查代码,发现WiFi开关后,会更新Settings属性,对应属性如下:

Settings.GLOBAL.WIFI_ON

检查Settings代码,对应设置通过SettingsProvider.java,写入/data/system/user/0/settings_global.xml文件。

进行验证,开/关WiFi,检查xml文件,发现文件实时更新。此时通过命令行对文件进行sync操作,然后掉电状态能够保存成功。

五、根本原因

根据问题分析,原因为:WiFi状态保存磁盘后,未刷IO CACHE,导致文件系统数据未实际写入磁盘,导致掉电后数据丢失data分区是f2fs的文件系统格式,sync时掉电有概率导致settings_global.xml文件大小为0

六、解决办法

1、通过在Settings设置属性后,在代码中对/data/system/user/0/settings_global.xml文件进行sync操作,能正常保存WiFi状态。

路径:frameworks/base/core/java/android/provider/Settings.java

diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 4172a936..586250c0 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -67,6 +67,7 @@ import android.os.Build;import android.os.Build.VERSION_CODES;import android.os.Bundle;import android.os.DropBoxManager;
+import android.os.Environment;import android.os.IBinder;import android.os.LocaleList;import android.os.PowerManager;
@@ -97,6 +98,9 @@ import com.android.internal.annotations.GuardedBy;import com.android.internal.util.Preconditions;import com.android.internal.widget.ILockSettings;+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileOutputStream;import java.io.IOException;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;
@@ -16355,8 +16359,19 @@ public final class Settings {return System.putStringForUser(resolver, name, value, tag,makeDefault, userHandle, overrideableByRestore);}
-            return sNameValueCache.putStringForUser(resolver, name, value, tag,
+            //return sNameValueCache.putStringForUser(resolver, name, value, tag,
+           boolean result = sNameValueCache.putStringForUser(resolver, name, value, tag,makeDefault, userHandle, overrideableByRestore);
+           try {
+                FileOutputStream fos = new FileOutputStream(new File(Environment.getUserSystemDirectory(userHandle), "settings_global.xml"));
+                FileDescriptor fd = fos.getFD();
+                fd.sync();
+                fos.close();
+                Log.i(TAG, "sync file settings_global.xml done");
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            return result;}/**

2、板级配置中注释F2FS文件系统

路径;device/softwinner/saturn/t527-sany_v7/BoardConfig.mk

@@ -196,7 +196,7 @@ BOARD_SYSTEM_DLKM_SRC := vendor/gki/system_dlkm-5.15# Following line is copied from Google suggest system_dlkm config, haven't found android build system take advantage of it.BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm-TARGET_USERIMAGES_USE_F2FS ?= true
+#TARGET_USERIMAGES_USE_F2FS ?= true

3、需将data分区改为ext4文件系统

路径;device/softwinner/saturn/common/storage/fstab.template

diff --git a/BoardConfig.mk b/BoardConfig.mk
index 571f73b..8b34c14 100644
--- a/BoardConfig.mk
+++ b/BoardConfig.mk
@@ -196,7 +196,7 @@ BOARD_SYSTEM_DLKM_SRC := vendor/gki/system_dlkm-5.15# Following line is copied from Google suggest system_dlkm config, haven't found android build system take advantage of it.BOARD_GOOGLE_SYSTEM_DYNAMIC_PARTITIONS_PARTITION_LIST := system_dlkm-TARGET_USERIMAGES_USE_F2FS ?= true
+#TARGET_USERIMAGES_USE_F2FS ?= trueBOARD_VNDK_VERSION := currentdiff --git a/common/storage/fstab.template b/common/storage/fstab.template
index 88cd3d0..4f59fa2 100644
--- a/common/storage/fstab.template
+++ b/common/storage/fstab.template
@@ -8,7 +8,7 @@ system_dlkm                                            /system_dlkm ext4      rovendor                                                 /vendor      erofs     ro                 wait,first_stage_mount,logical,slotselectvendor_dlkm                                            /vendor_dlkm erofs     ro                 wait,first_stage_mount,logical,slotselectproduct                                                /product     erofs     ro                 wait,first_stage_mount,logical,slotselect
-/dev/block/by-name/userdata                            /data        f2fs     noatime,nosuid,inlinecrypt,nodev,discard,reserve_root=128000,resuid=0,resgid=1065 wait,check,formattable,quota,reservedsize=128M,latemount,checkpoint=fs,fileencryption=aes-256-xts:aes-256-cts,keydirectory=/metadata/vold/metadata_encryption
+/dev/block/by-name/userdata                            /data        ext4     noatime,nodiratime,nosuid,nodev,noauto_da_alloc,discard,errors=panic,reserve_root=128000,resuid=0,resgid=1065 wait,check,formattable,quota,reservedsize=128M,latemount,checkpoint=fs,fileencryption=aes-256-xts:aes-256-cts,keydirectory=/metadata/vold/metadata_encryption/dev/block/by-name/metadata                            /metadata    ext4     nodev,noatime,nosuid,errors=panic wait,first_stage_mount,formattable,check/dev/block/by-name/treadahead                          /treadahead  ext4     nodev,noatime,nosuid,errors=panic wait,first_stage_mount,formattable,check/dev/block/by-name/media_data                          /oem         vfat     ro,nodev,noatime,nosuid,context=u:object_r:oemfs:s0 wait,first_stage_mount,formattable,check

再次测试时,正常!!!

七、连接问题

1、现象:

(1)重复开关WiFi,发现WiFi无法回连。

(2)长时间连接热点,wifi经常出现掉线。显示WiFi信号比较弱。

(3)设置连接路由器,密码是正确的,但是最终显示密码错误。

2、解决办法

(1)首先检查天线是否插好。

(2)跟天线厂家确定天线是否跟整体匹配。

(3)通过频谱仪测试WiFi蓝牙射频。

(4)可以通过iperf测试网络吞吐量,如果不达标大概率硬件有问题。

(5)检查软件天线配置。(注意单双天线配置问题,部分模块存在该问题)。

注:

单天线模式

如果板子上设计了一根天线接口,那么则需要在软件上设置成单天线模式。

路径:device/softwinner/xxx(方案名)/xxx(设备名)/device-common.mk

PRODUCT_VENDOR_PROPERTIES += ro.hardware.bt.ant=5

双天线模式

如果板子上设计了两根天线接口,那么则需要在软件上设置成双天线模式。

路径:device/softwinner/xxx(方案名)/xxx(设备名)/device-common.mk

PRODUCT_VENDOR_PROPERTIES += ro.hardware.bt.ant=2

3、查看模式

cat /sys/devices/platform/aic-bsp/aicbsp_info/btmode

  • 如果 cat 出来的结果为 5,则是单天线模式

  • 如果 cat 出来的结果为 2,则是双天线模式

http://www.xdnf.cn/news/410959.html

相关文章:

  • JGEW-9液位流量压力温度实验装置
  • Genspark超级智能体调研
  • 从数据到洞察:解析结构化数据处理的智能跃迁
  • 苹果电脑笔记本macos Mac安装mixly 米思齐软件详细指南
  • 免费多线程下载工具
  • 电商物流的“速度与激情”:从城际运输到即时配送的全链路解析
  • 动态网站 LNMP
  • 每日Prompt:超现实交互场景
  • 全视通智慧病房无感巡视解决方案:科技赋能,重塑护理巡视新篇
  • 开关电源滤波器讲解
  • Cursor 配置 Browser MCP(基于浏览器底层协议控制)及浏览器插件安装
  • Blender 入门教程(一):模型创建
  • rust 全栈应用框架dioxus server
  • 大模型数据分析破局之路20250512
  • 架构、构架、结构、框架之间有什么区别?|系统设计|系统建模
  • 互联网大厂Java面试实战:Spring Boot到微服务的技术问答解析
  • Datawhale AI春训营 day
  • 基于ESP32的健康智能机器人
  • 23.(vue3.x+vite)引入组件并动态切换(component)
  • 嵌入式Linux I2C驱动开发详解
  • 火山RTC 6 自定义视频
  • BUUCTF——杂项渗透之look
  • 代理IP:电商与营销领域的“隐形加速器”
  • OpenCV实现一个视频播放器
  • 基于FastAPI框架的日志模块设计
  • 2025年网站安全防御全解析:应对DDoS与CC攻击的智能策略
  • 处理 Websocket 超时问题
  • Python 处理图像并生成 JSONL 元数据文件 - 固定text版本
  • 从 JIT 即时编译一直讲到CGI|FastGGI|WSGI|ASGI四种协议的实现细节
  • 【Java ee初阶】IP协议