当上层调用reboot命令时,就会调用到arch/arm64/kernel/process.c 中的SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd,void __user *, arg)
{
struct pid_namespace *pid_ns = task_active_pid_ns(current);
char buffer[256];
int ret = 0;
mutex_lock(&reboot_mutex);
switch (cmd) {
case LINUX_REBOOT_CMD_RESTART:
kernel_restart(NULL);
break;
case LINUX_REBOOT_CMD_POWER_OFF:
kernel_power_off();
do_exit(0);
break;
}
我们重点开看请参数是LINUX_REBOOT_CMD_RESTART时,会调用kernel_restart->machine_restart
void machine_restart(char *cmd)
{
kernel 调用uefi的run time service 关机
于 2017-02-08 15:27:08 首次发布