问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android 关机(reboot)流程

发布网友 发布时间:2022-11-24 15:35

我来回答

1个回答

热心网友 时间:2024-07-21 06:59

->PowerManagerService中
lowLevelReboot()
SystemProperties.set("sys.powerctl", "reboot," + reason); //就传给Kernel进入reboot了

=》
那么接下来,走到哪里去了?
sys.powerctl 的配置在init.rc 当中,可以参考
on property:sys.powerctl=*
powerctl ${sys.powerctl}

然后执行system/core/init/builtins.c#do_powerctl 函数,call android_reboot 重启或者关机。
为何工厂模式下无法adb reboot ? 正常情况下adb reboot 可以重启, 其关键就是因为mediatek/config/{platform}factory_init.rc 中没有定义
on property:sys.powerctl=*
powerctl ${sys.powerctl}

如果要添加此功能,只有在factory_init.rc 中添加这两行即可
继续跟

=》在init.rc中和一个相关的on 触发器
396 on property:sys.powerctl=*
397 powerctl ${sys.powerctl}

=》会调用 builtins.c 的,参考间reboot,recovery
int do_powerctl(int nargs, char **args)

=>
return android_reboot(cmd, 0, reboot_target);
cmd = ANDROID_RB_RESTART2 //在android_reboot.h中#define ANDROID_RB_RESTART2 0xDEAD0003
reboot_target =第二个参考recovery

=》
/system/core/libcutils/android_reboot.c 中的执行android_reboot();

case ANDROID_RB_RESTART2:
121 ret = __reboot(LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2,
122 LINUX_REBOOT_CMD_RESTART2, arg); //arg = recovery

=>
这个在bionic/libc/include/sys/reboot.h中定义的。说明这是一个标准的系统调用
extern int __reboot(int, int, int, void *);

具体位于bionic/libc/arch-arm/syscalls/__reboot.S
1 /* autogenerated by gensyscalls.py */
2 #include <asm/unistd.h>
3 #include <linux/err.h>
4 #include <machine/asm.h>
5
6 ENTRY(__reboot)
7 mov ip, r7
8 ldr r7, =__NR_reboot
9 swi #0
10 mov r7, ip
11 cmn r0, #(MAX_ERRNO + 1)
12 bxls lr
13 neg r0, r0
14 b __set_errno
15 END(__reboot)

=》最后会进入Kernel
kernel/sys.c
case LINUX_REBOOT_CMD_RESTART2:
kernel_restart(buffer); //buffer = arg= recovery

=>machine_restart()

=>arch/arm/kernel/process.c
void machine_restart(char *cmd)

=》
void (*arm_pm_restart)(char str, const char *cmd) = arm_machine_restart;
=》
void arm_machine_restart(char mode, const char *cmd)
{
...
aml_write_reg32(P_AO_RTI_STATUS_REG1, reboot_reason); //这一个标志寄存器
...

arch_reset(mode, cmd); // mode = 'h' cmd = "recovery"
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
中国福利彩票龟兔赛跑出现两个箭头算不算中奖 ...都没有笑了感觉活得好麻木完全没有意义我该怎么办?? 我的情感很麻木,可以改变或改善吗? 我觉得我麻木不仁,如何改变? 我高二时候突然变得很麻木 应该怎样解脱出来? 曹颖代言的CC换颜祛斑的精油重庆哪里有卖? 第三套人民币蕴含的巨大增值潜力 租赁合同≠租赁凭证!深圳租房家长不要再搞错了!否则申请不了公办学位... 仓埠街道革命传统 ...当归 黄芪 三七一起吃了,有什么功效,吃了会长胖吗?拜托了各位... 北京宏利保险代理有限公司甘肃分公司怎么样? 北京宏利保险代理有限公司陕西分公司怎么样? 北京宏利保险代理有限公司怎么样? 倾斜摄影三维建模 读书时需要的心境有哪些? 为什么北宋时期南方经济得以快速发展? 中国为什么经济重心从北方移到南方 历史的南方指什么 当时经济状况如何? 南方的经济重心是什么时候开始逐渐取代北方地区的? 原民办教师、代课教师、幼儿教师是一个概念吗?有什么区别呢? 标准盒模型和IE盒模型 什么是盒模型 借呗额度突然降到1000咋回事? 小米手环包装为什么有大盒子有小盒子 qq邮箱号码在哪里看 小鹏计划2025年开始,向全面自动驾驶、无人驾驶进,目前发展程度如何... 精密无缝钢管有什么特点 钢管规格是多少 哪位大神可告知,ps这个红点怎么调出来 ps中如图,黄色圈圈外面的红点是怎么画的?求图片过程 满月风俗额头上涂红点怎么画、用什么涂 小米手机一直显示“抱歉,进程com.android.phone已停止运行”是因为什... 退保险需要什么资料办手续? 2018年内蒙古养老金上调方案细则 2018年内蒙养老金调整方案 粉皮放冰箱一夜还可以吃吗 凉皮放冰箱里第二天还能吃吗 面皮存冰箱一18度还可吃吗? 在吗?我想问下铁精粉的国税发票是什么样的~最好是有图! 哪位大侠知道使用彩博士的时候出现以下这种情况,是怎以回事啊,求解答... 彩博士怎么样 妄想改造人改藏的故事简介 正版领航\彩博士新年特惠活动 请问吉林省有什么好的彩票报纸吗? 宁夏银川杨文彩博士的书法收藏之路 下一期6+1的号码和生肖是多少? 赵丽颖是娱乐圈里的一股清流,演技可圈可点,你喜欢她的哪部作品? 你最喜欢谁扮演的爱情剧? 看看近年来主演剧收视率破一数量最多的几位女演员,你最爱哪一位? 以收和已收的区别 穷途末路指针怎么转 求救:专业英语