您的位置:首页 > 移动开发 > Android开发

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

2017-09-25 10:01 357 查看
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

代码中直接调用:

其实和第一种差不多,只是它直接调用的是__reboot()而已。

int reboot (int  mode)
{
return __reboot( LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, mode, NULL );
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: