首页 > 代码库 > Linux电源管理(3)_Generic PM之Reboot过程(转自蜗窝科技,www.wowotech.net)
Linux电源管理(3)_Generic PM之Reboot过程(转自蜗窝科技,www.wowotech.net)
Linux电源管理(3)_Generic PM之Reboot过程
1. 前言
在使用计算机的过程中,关机和重启是最先学会的两个操作。同样,这两个操作在Linux中也存在,称作shutdown和restart。这就是本文要描述的对象。
在Linux Kernel中,主流的shutdown和restart都是通过“reboot”系统调用(具体可参考kernel/sys.c)来实现的,这也是本文 使用“Generic PM之Reboot过程”作为标题的原因。另外,除了我们常用的shutdown和restart两类操作之外,该系统调用也提供了其它的reboot方 式,也会在这里一一说明。
2. Kernel支持的reboot方式
也许你会奇怪,reboot是重启的意思,所以用它实现Restart是合理的,但怎么用它实现关机操作呢?答案是这样的:关机之后,早晚也会开机啊!所以关机是一种特殊的Restart过程,只不过持续的时间有点长而已。所以,内核根据不同的表现方式,将reboot分为如下的几种方式:
* Commands accepted by the _reboot() system call.
* RESTART Restart system using default command and mode.
* CAD_ON Ctrl-Alt-Del sequence causes RESTART command.
* POWER_OFF Stop OS and remove all power from system, if possible.
* SW_SUSPEND Suspend system using software suspend if compiled in.
#define LINUX_REBOOT_CMD_RESTART 0x01234567
#define LINUX_REBOOT_CMD_CAD_ON 0x89ABCDEF
#define LINUX_REBOOT_CMD_POWER_OFF 0x4321FEDC
#define LINUX_REBOOT_CMD_SW_SUSPEND 0xD000FCE2
#define LINUX_REBOOT_CMD_KEXEC 0x4558454
RESTART,正常的重启,也是我们平时使用的重启。执行该动作后,系统会重新启动。
HALT,停止操作系统,然后把控制权交给其它代码(如果有的话)。具体的表现形式,依赖于系统的具体实现。
CAD_ON/CAD_OFF,允许/禁止通过Ctrl-Alt-Del组合按键触发重启(RESTART)动作。
注1:Ctrl-Alt-Del组合按键的响应是由具体的Driver(如Keypad)实现的。
POWER_OFF,正常的关机。执行该动作后,系统会停止操作系统,并去除所有的供电。
RESTART2,重启的另一种方式。可以在重启时,携带一个字符串类型的cmd,该cmd会在重启前,发送给任意一个关心重启事件的进程, 同时会传递给最终执行重启动作的machine相关的代码。内核并没有规定该cmd的形式,完全由具体的machine自行定义。
SW_SUSPEND,即前一篇文章中描述的Hibernate操作,会在下一篇文章描述,这里就暂不涉及。
KEXEC,重启并执行已经加载好的其它Kernel Image(需要CONFIG_KEXEC的支持),暂不涉及。
Linux电源管理(3)_Generic PM之Reboot过程(转自蜗窝科技,www.wowotech.net)