2019년 3월 25일 월요일

[Kernel] System Reboot from device driver - programmable

System Reboot from device driver - programmable


#include <linux/reboot.h>
#ifdef CONFIG_MACH_RK3066_R306
        kernel_restart(LINUX_REBOOT_CMD_RESTART);
#endif

[ path : kernel/include/linux/reboot.h ]
 15 /*
 16  * Commands accepted by the _reboot() system call.
 17  *
 18  * RESTART     Restart system using default command and mode.
 19  * HALT        Stop OS and give system control to ROM monitor, if any.
 20  * CAD_ON      Ctrl-Alt-Del sequence causes RESTART command.
 21  * CAD_OFF     Ctrl-Alt-Del sequence sends SIGINT to init task.
 22  * POWER_OFF   Stop OS and remove all power from system, if possible.
 23  * RESTART2    Restart system using given command string.
 24  * SW_SUSPEND  Suspend system using software suspend if compiled in.
 25  * KEXEC       Restart system using a previously loaded Linux kernel
 26  */
 27
 28  #define  LINUX_REBOOT_CMD_RESTART    0x01234567
 29  #define  LINUX_REBOOT_CMD_HALT       0xCDEF0123
 30  #define  LINUX_REBOOT_CMD_CAD_ON     0x89ABCDEF
 31  #define  LINUX_REBOOT_CMD_CAD_OFF    0x00000000
 32  #define  LINUX_REBOOT_CMD_POWER_OFF  0x4321FEDC
 33  #define  LINUX_REBOOT_CMD_RESTART2   0xA1B2C3D4
 34  #define  LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2
 35  #define  LINUX_REBOOT_CMD_KEXEC      0x45584543

[ path : kernel/kernel/sys.c ]
 338 /**
 339  *  kernel_restart - reboot the system
 340  *  @cmd: pointer to buffer containing command to execute for restart
 341  *      or %NULL
 342  *
 343  *  Shutdown everything and perform a clean reboot.
 344  *  This is not safe to call in interrupt context.
 345  */
 346 void kernel_restart(char *cmd)
 347 {
 348     /*
 349     *  debug trace
 350     */
 351     restart_dbg("%s->%d->cmd=%s",__FUNCTION__,__LINE__,cmd);
 352
 353     kernel_restart_prepare(cmd);
 354     disable_nonboot_cpus();
 355     if (!cmd)
 356         printk(KERN_EMERG "Restarting system.\n");
 357     else
 358         printk(KERN_EMERG "Restarting system with command '%s'.\n", cmd);
 359     kmsg_dump(KMSG_DUMP_RESTART);
 360     machine_restart(cmd);
 361 }
 362 EXPORT_SYMBOL_GPL(kernel_restart);

댓글 없음:

댓글 쓰기