Android Factory Reset flow

本文详细介绍了安卓设备上数据清除(Factory Reset)的过程,包括应用程序、内核及Bootloader的交互流程,以及recovery模式下的具体操作步骤。

===== 应用流程 =====
====>frameworks/base/services/java/com/android/server/MasterClearReceiver.java
RecoverySystem.rebootWipeUserData(context);

====>framesworks/base/core/java/android/os/RecoverySystem.java
rebootWipeUserData ===> bootCommand(context, "--wipe_data");
bootCommand写参数"--wipe_data"到/cache/recovery/command后,
调用pm.reboot("recovery");

====>frameworks/base/core/java/android/os/Power.java
reboot ===> rebootNative

====>frameworks/base/core/jni/android_os_Power.cpp
JNI 映射
{ "rebootNative", "(Ljava/lang/String;)V", (void*)android_os_Power_reboot },
android_os_Power_reboot ===> __reboot

====>bionic/libc/arch-arm/syscalls/__reboot.S
ldr r7, =__NR_reboot  // bionic/libc/include/sys/linux-syscalls.h
b  __set_syscall_errno

#define __NR_reboot  (__NR_SYSCALL_BASE + 88)

===== 内核流程 =====
====>kernel/arch/arm/kernel/calls.S
/* 88 */    CALL(sys_reboot)

====>kernel/sys.c
sys_reboot定义在kernel/include/linux/syscalls.h,实现在kernel/kernel/sys.c

在这里,判断buffer的内容,用一个寄存器记录是否是recovery mode,以便boot loader去查询。
sys_reboot会调用kernel_restart
kernel_restart调用每一个架构特定的machine_restart, 即machine_restart执行每个架构特定的函数

====>kernel/arch/arm/kernel/process.c
machine_restart==>arm_pm_restart==>arm_machine_restart==>arch_reset

====>kernel/arch/arm/mach-tegra/include/mach/system.h
arch_reset

===== bootloader流程 =====
机器重启, 重新进入bootloader。bootloader首先会读寄存器的内容, 根据这个值决定是否进入recovery模式或者其它模式。
bootloader然后加载recovery内核。

===== recovery应用流程 =====
recovery内核中的init.rc会运行recovery

recovery应用会读取cache/recovery/command
读取参数后执行相应操作, 这里参数是--wipe_data, 放在cache/recovery/command里

把DATA和CACHE清空后重启系统,此时内核重启时写的寄存器参数RB_AUTOBOOT跟前面不同的
bionic/libc/include/sys/reboot.h
#define RB_AUTOBOOT     LINUX_REBOOT_CMD_RESTART
不会再让bootloader进入recovery模式,而是正常启动。

Android 14 设备上执行恢复出厂设置(Factory Reset)是一项重要操作,通常用于将设备恢复到初始状态。该操作会删除设备上的所有用户数据,并重新初始化系统设置。以下是详细的步骤和影响分析。 ### 操作步骤 1. **通过系统设置执行恢复出厂设置**: - 打开设备上的 **设置** 应用。 - 滚动并选择 **系统** > **重置** > **恢复出厂设置**。 - 确认操作,输入设备密码或 PIN 码(如果有)。 - 点击 **重置手机** 或类似选项以开始操作。 - 设备会重启并开始恢复出厂设置,整个过程可能需要几分钟。 2. **通过恢复模式(Recovery Mode)执行**: - 关闭设备电源。 - 按住 **电源键** 和 **音量上键** 进入恢复模式。 - 使用音量键导航至 **Wipe data/factory reset**,然后按电源键确认。 - 选择 **Yes** 以确认操作。 - 操作完成后,选择 **Reboot system now** 重启设备。 ### 影响分析 - **数据丢失**:恢复出厂设置会删除所有用户数据,包括应用数据、照片、音乐、文档等。未备份的数据将无法恢复[^1]。 - **账户解除绑定**:设备上的 Google 帐户和其他账户会被解除绑定,需要重新登录。 - **系统设置重置**:所有系统设置(如 Wi-Fi 配置、显示亮度、语言等)都会被重置为默认值。 - **应用卸载**:用户安装的应用程序将被卸载,仅保留系统预装应用。 - **设备性能优化**:恢复出厂设置可以解决某些系统问题,例如设备运行缓慢、应用崩溃等,因为它会清除缓存和无效数据。 ### 注意事项 - **备份数据**:在执行恢复出厂设置之前,建议使用 Google Drive 或第三方工具备份重要数据。 - **确保电量充足**:设备电量应保持在 50% 以上,以避免操作过程中断。 - **解锁 Bootloader**:如果设备的 Bootloader 被锁定,恢复出厂设置可能无法完成。需要先解锁 Bootloader。 - **安全验证**:某些设备在恢复出厂设置后会要求验证 Google 帐户,以防止设备被盗用。 ### 示例代码:使用 ADB 命令执行恢复出厂设置 ```bash adb reboot recovery ``` 进入恢复模式后,可以通过 ADB 命令进一步操作,例如选择恢复出厂设置选项。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值