SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg)//kernel/sys.c
-->...
-->case LINUX_REBOOT_CMD_RESTART:
-->kernel_restart(NULL);
-->kernel_restart_prepare(cmd);
-->...
-->machine_restart(cmd);
-->...
-->case LINUX_REBOOT_CMD_POWER_OFF:
-->kernel_power_off();
-->if (pm_power_off_prepare)//如果实现了平台相关的函数则执行
--> pm_power_off_prepare();
-->...
-->machine_power_off();
-->machine_shutdown();
-->if (pm_power_off)//如果实现了平台相关的函数则执行
--> pm_power_off();
-->do_exit(0);
-->...
其中:pm_power_off_prepare()以及pm_power_off()与具体平台相关
Freescale i.MX6:
mx6_sabresd_board_init(void)-->pm_power_off = mx6_poweroff;
static void mx6_poweroff(void)
{
mx6q_board_powerctrl(0);//仅仅是断开电源
}