要实现这个需求,除了要知道在lk阶段和上层或者内核阶段如何读写分区,还要很清楚reboot流程

下面说一下以adb reboot recovery重启进入recovery模式说一下reboot流程

system/core/libcutils/android_reboot.cpp

int android_reboot(int cmd, int /*flags*/, const char* arg) {

ret = property_set(ANDROID_RB_PROPERTY, prop_value);

device/mediatek/mt6765/factory_init.rc

on property:sys.powerctl=*

powerctl ${sys.powerctl}

//Murphy.liu note:init.rc里面的这个条件就成立了

system/core/init/init.cpp

void property_changed(const std::string& name, const std::string& value) {

shutdown_command = value;

do_shutdown = true;

// Murphy.liu note:init程序的死循环里面

int main(int argc, char** argv) {

while (true) {

if (do_shutdown && !shutting_down) {

do_shutdown = false;

if (HandlePowerctlMessage(shutdown_command)) {

system/core/init/reboot.cpp

HandlePowerctlMessage(const std::string& command) {

} else if (cmd_params[0] == "reboot") {

DoReboot(cmd, command, reboot_target, run_fsck);

RebootSystem(cmd, rebootTarget);

case ANDROID_RB_RESTART2:

syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,LINUX_REBOOT_CMD_RESTART2, rebootTarget.c_str());

// Murphy.liu note:由此就进入内核进行重启了

接下来说进入内核之后的代码分析:

kernel-4.9/kernel/reboot.c

SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,void __user *, arg)

case LINUX_REBOOT_CMD_RESTART2:

kernel_restart(buffer);

machine_restart(cmd);    // Murphy.liu note:这个文件在kernel-4.9/arch/arm/kernel/reboot.c

arm_pm_restart(reboot_mode, cmd);    // Murphy.liu note:arm_pm_restart是一个函数指针

接下来说说这个arm_pm_restart函数指针指向了哪里

kernel-4.9/arch/arm/kernel/setup.c

setup_arch

arm_pm_restart = mdesc->restart;

kernel-4.9/drivers/watchdog/mediatek/wdk/wd_api.c

mtk_arch_reset_init

register_restart_handler(&mtk_restart_handler);    // Murphy.liu note:这里注册了一个重启处理函数

kernel-4.9/drivers/watchdog/mediatek/wdk/wd_api.c

mtk_restart_handler

arch_reset(mode, cmd);

} else if (cmd && !strcmp(cmd, "recovery")) {

rtc_mark_recovery();    // Murphy.liu note:drivers/misc/mediatek/rtc/mtk_rtc_common.c

好,reboot流程就分析到这里

reboot流程简述相关推荐

  1. SAP MM UB类型的退货STO流程简述

    SAP MM UB类型的退货STO流程简述 SAP系统中,UB类型的采购订单(STO)用于公司内2个工厂之间的货物调拨场景.对于这个场景里的退货业务,UB类型的STO也是可以支持的.本文就是简述一下这 ...

  2. 常见算子使用_spark快速入门(二)spark粗略流程简述及常见名词解释

    大家元旦快乐,牛年发发发~~牛气冲天o(* ̄︶ ̄*)o spark粗略流程简述 (1)有算子触发Action,Driver端和hdfs的namenode进行通信,询问元数据信息.根据元数据信息 及相应 ...

  3. Pacbio测序原理以及SMRT bell文库构建流程简述

    ​ 2018年发的老文章了,文章不错,所以决定再捞一下.文中有3段视频,如需观看请大家移步"基因Share"观看. Pacbio测序原理及SMRT bell文库构建流程简述(二)​ ...

  4. PX4源码分析2:飞控系统控制流程简述

    飞控系统控制流程简述 Created with Raphaël 2.2.0采集遥控指令,计算期望位置采集GPS数据,计算此刻实际位置计算位置差,经PID计算并输出期望角度采集IMU数据,计算此刻实际角 ...

  5. HDFS 读写流程简述

    参考:https://blog.csdn.net/litianxiang_kaola/article/details/70984777 https://blog.csdn.net/zhanglh046 ...

  6. Revit二次开发(Revit2019+VS2017)-【NO.01】开发流程简述

    Revit二次开发流程简述 一.软件的安装及配置 软件的下载与安装 软件的配置 配置AddInManager 配置RevitLookUp 检验是否配置成功 二.创建项目新建Visusl Studio项 ...

  7. 游戏公司组成架构和游戏开发流程简述

    游戏公司组成架构和游戏开发流程简述 [基本概念] 游戏公司一般是指游戏开发公司或游戏发行.代理公司. 那游戏公司开发游戏需要哪些技术人员?简单的说:需要游戏造型.游戏动画.3D美工.纹理师.原画设计师 ...

  8. 谷歌浏览器怎样设置主页 Chrome浏览器主页设置流程简述

    对大部分刚刚接触谷歌浏览器的用户来说,想要熟练地使用这款浏览器软件并不是一件轻松的事,即便是设置主页这样的小问题也很难轻易解决!那么,谷歌浏览器要怎样设置主页?下面小编就来简单介绍一下Chrome浏览 ...

  9. 蓝牙disable流程简述

    蓝牙关闭的流程比打开流程要简单,主要就是一些profile的断连以及协议栈相关结构的释放. 这里简单说一下其流程,就直接从协议栈的disable的接口说起了. static int disable(v ...

  10. linux reboot流程,从命令行到内核全解析

    针对对象 这篇文章我尽量写的细一些,主要针对于不太懂得嵌入式命令行到系统层过程的新手看,如果觉得有用可以关注一下,不定期写一些新手需要看的文章. 正文 引言 我们在做嵌入式设备的时候,经常会输入一些命 ...

最新文章

  1. iOS-仿膜拜贴纸滚动(物理仿真)
  2. ICML2020 | GCNII:使用初始残差和恒等映射解决过度平滑
  3. Chatter 导入
  4. Java操作控制台的命令
  5. 关于微信公众号小程序在运营过程中的注意事项
  6. php实战搭建博客,yii2项目实战-博客管理平台的搭建
  7. SVN 回滚(撤回)提交的代码
  8. strcpy ,strncpy ,strlcpy地用法
  9. 数据分析没价值?——深思对业务的洞察有多少?
  10. FreeMarker语言概述(1)
  11. Datagard產生gap
  12. 【转】【C#.NET】ASP.NET状态管理 APPlication,Session,Cookie和ViewStat用法
  13. C++ map, 运用map统计单词出现的次数
  14. php调用数据库字段代码,php读取数据库_php读取mysql所有数据库及表中字段的代码...
  15. 关于微信jsapi 支付签名验证失败
  16. 基于Filament引擎的Animoji效果实现
  17. 退耦电容原理--退藕电容的一般配置原则
  18. 领导力:刘邦的管理之道
  19. 力扣周赛310场题解
  20. cv岗工作做什么_2019 秋招 cv 岗求职心得

热门文章

  1. QT 之QPainter画点
  2. Release That Record Lock!
  3. 知乎8.5k赞的回答:自学编程需要注意什么?
  4. 如何快速搭建个人网站
  5. 华为云免费SSL域名证书申请_亲测成功
  6. Win10镜像下载之后怎么安装系统
  7. Java 培训四个月能学会吗?
  8. vue 动态渲染背景图片
  9. PDO简介及其基本使用
  10. uva 12307(点集的外接矩形)