[RK3288][Android6.0] 系统重启调用过程小结

本文主要介绍了在Rockchip RK3288平台,搭载Android 6.0系统下,系统的两种重启方式:命令行调用和代码中调用reboot()函数。通过命令行调用涉及的源文件包括system/core/reboot/reboot.c,流程经由property中的sys.powerctl触发init进程,进一步调用kernel Restart相关函数。在代码中直接调用则直接触发__reboot()系统调用,进入内核重启流程。整个过程涉及到的内核函数包括SYSCALL_DEFINE4、kernel_restart、machine_restart和特定平台的重启实现。
摘要由CSDN通过智能技术生成

Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92

reboot方式有两种:
1. 通过命令行
2. code中调用reboot().

命令行调用:
命令调用对应的源文件:
system/core/reboot/reboot.c

本质上是通过property中的sys.powerctl来触发init进程调用
property_set(ANDROID_RB_PROPERTY, “reboot”);

init.rc中有:
on property:sys.powerctl=*
powerctl ${sys.powerctl}

它会调用powerctl ioctl, 流程如下

KEYWORD(powerctl, COMMAND, 1, do_powerctl) -> //keywords.h 根据传进来的字符串转换命令。
 android_reboot -> //android_reboot.c
  __reboot -> //reboot.h 系统调用,陷入内核。
   SYSCALL_DEFINE4 -> //kernel/sys.c
    kernel_restart ->
     machine_restart -> //arch/arm/kernel/process.c
      arm_pm_restart ->
       mdesc->restart -> //开机时在setup.c@setup_arch()中赋值
        rk3288_restart //rk3288.c

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值