类android设备reset过程

模式解析流程

  • frameworks/base/core/java/android/os/PowerManager.java
  • frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java
  • 把reason存储到SystemProperties,最后调用ShutdownThread带着reason传参
  • frameworks/base/services/core/java/com/android/server/power/ShutdownThread.java
  • 这个类中主要根据一些条件做了一些单独处理,例如recovery等可能还会展示弹窗

SystemProperties.set(“sys.powerctl”, “reboot,” + reason),这里很重要

  • 静默重启会把这个值存储到内核特定的启动参数,比如使用RTC寄存器来保存,这个参数会在下次重启时被系统拿到
  • 同时,内核还会解析reason,存储另一个SystemProperties
  • 大概流程是,lk中读到RTC的quiescent标志位,则不显示开机logo,并且在cmdline中添加androidboot.quiescent = 1; lk——》kernel——》init,init会解析cmdline,并把其中的androidboot.quiescent解析出来,并设置成ro.boot.quiescent=1;这样后续android所有地方都能知道此次是静默开机

sys.powerctl

  • 平台reboot_mode寄存器配置:
    bsp/bootloader/u-boot15/arch/arm/include/asm/arch-sharkl5pro/check_reboot.h
  • Reboot mode各模式定义:
    bsp/bootloader/u-boot15/include/boot_mode.h
  • 平台各模式注册:
    bsp/bootloader/u-boot15/board/spreadtrum/ums512_1h10/ums512_1h10.c
    从寄存器或者pmic RTC中获取各模式位和进入,记录mode到cmdline
  • check_mode驱动:
    bsp/bootloader/u-boot15/drivers/misc/check_reboot.c
  • reboot时进入的模式:
    bsp/bootloader/u-boot15/common/cmd_cboot.c
  • 各模式函数代码:
    bsp/bootloader/u-boot15/common/loader/boot_mode.c

reboot流程

  • system/core/bootstat/bootstat.cpp
  • system/core/libcutils/include/cutils/android_reboot.h
  • system/core/reboot/reboot.c:
    property_set HandlePowerctlMessage DoReboot RebootSystem
  • system/core/init/reboot_utils.cpp :
    RebootSystem 通过 syscall 系统调用转到内核层
  • 由syscall到内核层之后调用的第一个函数是 SYSCALL_DEFINE4:
    第一个参数为函数名后缀,如上图,则这个定义的函数名字为SyS_reboot。
    第二个,第三个一起看,为类型加变量名。
    可以发现一共有4组类型加变量名的 变量。所以DEFINE4 中的数字4就代表SyS_reboot有4个参数
    首先对应用层中syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
    LINUX_REBOOT_CMD_RESTART2, rebootTarget.c_str());传递进来的参数进行分析,判断校验,一些reboot命令没有重启,有可能这里解析错误
  • 然后调用kerne_restart去做kernel的重启:
    bsp/kernel/kernel4.14/kernel/reboot.c
  • 这里去处理reboot原因:
    bsp/kernel/kernel5.4/drivers/spi/spi-sprd-adi.c
    sprd_adi_restart_handler
  • 这里调用do_kernel_restart做系统复位,里面做的是发送一个通知,通知各个通过register_restart_handler注册的钩子函数,执行这个关机函数,最后我发现在我系统中是使用看门狗复位来实现重启的 bsp/kernel/kernel5.4/drivers/watchdog/watchdog_core.c
  • 对watchdog函数做溢出写入触发restart

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/27396.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码随想录算法训练营第37期 第三十七天 | LeetCode56. 合并区间、738.单调递增的数字】

代码随想录算法训练营第37期 第三十七天 | LeetCode56. 合并区间、738.单调递增的数字 一、56. 合并区间 解题代码C&#xff1a; class Solution { public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int…

网络超时

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在访问一个网页时&#xff0c;如果该网页长时间未响应&#xff0c;系统就会判断该网页超时&#xff0c;所以无法打开网页。下面通过代码来模拟一个网…

图的遍历介绍

概念 特点 无论是进行哪种遍历&#xff0c;均需要通过设置辅助数组标记顶点是否被访问来避免重复访问&#xff01;&#xff01;&#xff01;&#xff01; 类型 深度优先遍历 可以实现一次遍历访问一个连通图中的所有顶点&#xff0c;只要连通就能继续向下访问。 因此&#x…

day07--454.四数相加II+383. 赎金信+ 15. 三数之和+ 18. 四数之和

一、454.四数相加II 题目链接&#xff1a;https://leetcode.cn/problems/4sum-ii/ 文章讲解&#xff1a;https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE 视频讲解&#xff1a;https://www.bili…

【论文阅读】-- Omnisketch:高效的多维任意谓词高速流分析

Omnisketch&#xff1a;高效的多维任意谓词高速流分析 摘要1 引言2 预备知识及相关工作3 OMNISKETCH&#xff1a;使用任意谓词估计频率3.1 Sketch S0&#xff1a;Count-Min with rid-sets 用于估计带有谓词的查询3.2 Sketch S1 &#xff08;OmniSketch&#xff09;&#xff1a;…

使用ShinyCell展示你的单细胞数据

在我参与发表我的第一篇植物单细胞文章中&#xff0c;我用Shiny开发了一个简单的单细胞可视化网站&#xff0c;目前已经运行了5年了&#xff0c;有上万的访问&#xff0c;唯一的不足就是太简陋。我一直想着能不能找个一个更好的工具进行展示&#xff0c;最近发现了一个工具&…

嵌入式linux中内存管理基本原理

各位开发者,大家好,今天主要给大家分享一下,如何使用linux系统中的内存管理。 前面我们学习了很多Linux内存方面的知识,比如:虚拟地址空间,进程空间,内存映射,页表机制等,我们学了这么多知识,似乎对Linux内存似懂非懂,为什么会出现这样的问题?原因在于我们缺…

redis+lua实现分布式限流

redislua实现分布式限流 文章目录 redislua实现分布式限流为什么使用redislua实现分布式限流使用ZSET也可以实现限流&#xff0c;为什么选择lua的方式实现依赖lua脚本yaml代码实现 Jmeter压测 为什么使用redislua实现分布式限流 原子性&#xff1a;通过Lua脚本执行限流逻辑&am…

无人机RTMP推流EasyDSS直播平台推流成功,不显示直播按钮是什么原因?

互联网视频云平台/视频点播直播/视频推拉流EasyDSS支持HTTP、HLS、RTMP等播出协议&#xff0c;并且兼容多终端&#xff0c;如Windows、Android、iOS、Mac等。为了便于用户集成与二次开发&#xff0c;我们也提供了API接口供用户调用和集成。在无人机场景上&#xff0c;可以通过E…

[linux]基于Ubuntu24.04原内核6.8.0升级到6.9.0

物理机操作系统&#xff1a; 虚拟机操作系统&#xff1a; Ubuntu 24.04 下载地址&#xff1a; https://mirror.nju.edu.cn/ubuntu-releases/24.04/ubuntu-24.04-desktop-amd64.iso VM版本信息&#xff1a; 内核源代码来源&#xff1a; https://ftp.sjtu.edu.cn/sites/ftp.kern…

四六级考前突击之主题词预测

考前主题词预测 时政类 Digital Economy 数字经济 (Digitalization数字化) Hong Kong Zhuhai-Macau Bridge 港珠澳大桥 Greater Bay Area 大湾区 Poverty Alleviation 扶贫 Anti-corruption campaign 反腐斗争 Rural Revitalization(注入活力) Strategy(战略,策略) 乡村振兴…

课设--学生成绩管理系统

欢迎来到 Papicatch的博客 文章目录 &#x1f349;技术核心 &#x1f349;引言 &#x1f348;标识 &#x1f348;背景 &#x1f348;项目概述 &#x1f348; 文档概述 &#x1f349;可行性分析的前提 &#x1f348;项目的要求 &#x1f348;项目的目标 &#x1f348;…

vue自定义一个回到顶部组件

1.首先创建一个backTop.vue页面&#xff1a; 页面有两个按钮&#xff0c;一个回到顶部按钮&#xff0c;一个刷新按钮(showRefresh:false将刷新按钮隐藏)&#xff0c;实现效果如下&#xff1a; 代码解析&#xff1a; domName:需要监听滚动的dom类名&#xff0c;不传默认监听bod…

搜维尔科技:特斯拉称工厂内有两台人形机器人开始自主工作

搜维尔科技消息&#xff0c;据外电报道&#xff0c;特斯拉声称&#xff0c;其目前拥有两台 Optimus 人形机器人在工厂内自主工作&#xff0c;这尚属首次。 如果目前这场薪酬方案混乱有什么好处的话&#xff0c;那就是特斯拉几乎看起来又有了一个公关部门。 当然&#xff0c;其…

记录open62541简单有效的编译生成.c和.h文件【OPCUA开源库】

一、下载和安装CMake 虽然说可以通过下面命令安装CMake,但是安装CMake时,通常会安装来自你的操作系统的软件仓库中的版本,这个版本可能不是最新的 sudo apt-get install cmake 如果安装后发现CMake版本低于CMake 3.13是没有办法进行编译的 接下来通过编译源码来升级高版本…

基数排序O(n)时间复杂度的实现

基数排序O(n)时间复杂度的实现 前言 之前写过一篇文章六种常见排序算法分析与实现&#xff0c;讲了六种常见的排序算法&#xff0c;但是没有了解到桶排序&#xff0c;基数排序这两种排序算法&#xff0c;今天刷LeetCode发现了这两种算法&#xff0c;本文先来聊聊基数排序的思…

Ubuntu字体相关

Ubuntu字体相关 解决字体相关问题 Windows字体 sudo apt install font-manager sudo apt update && sudo apt install ttf-mscorefonts-installer # 安装字体至系统范围 sudo cp *.ttf /usr/local/share/fonts/ sudo cp *.ttc /usr/local/share/fonts/ # 重建字体缓…

06 SpringBoot 配置文件详解-application.yaml

Spring Boot 提供了大量的自动配置&#xff0c;极大地简化了spring 应用的开发过程&#xff0c;当用户创建了一个 Spring Boot 项目后&#xff0c;即使不进行任何配置&#xff0c;该项目也能顺利的运行起来。当然&#xff0c;用户也可以根据自身的需要使用配置文件修改 Spring …

以太坊网络中为什么要设置Gas上限

以太坊网络中的Gas上限&#xff08;Gas Limit&#xff09;是一个重要的机制&#xff0c;它主要出于以下几个目的&#xff1a; 防止无限循环和拒绝服务攻击&#xff08;DoS&#xff09;&#xff1a; Gas上限防止了智能合约中的无限循环&#xff0c;这可以保护网络免受恶意合约的…

vue3 vant4 仿京东分类功能实现

Ⅰ- 壹 - 功能展示和使用需求 需求描述 基于vant 实现,仿京东分类功能实现样式交互等基本实现,细节可能需要优化 地址 https://gitee.com/wswhq/vue3-vant-temp/tree/master/src/view/ClassIfication 功能展示 Ⅱ - 贰 - 封装思路 不表述了自己看代码吧 Ⅲ - 叁 - 使用 …