瑞芯微Rockchip开发者社区
直播中

Arvinhw

9年用户 908经验值
擅长:嵌入式技术
私信 关注
[问答]

系统重启调用的方式有哪几种?

系统重启调用的方式有哪几种?

回帖(1)

陈敏杰

2022-3-10 10:59:21
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 );
}
举报

更多回帖

发帖
×
20
完善资料,
赚取积分