这两个函数一般是在紧急或特殊情况下执行的硬件层面关机和重启函数(比如过温)。即非正常关机和重启流程(不含系统层面的关机重启前进程清理资源释放等过程)。
关机函数:void kernel_power_off(void)
定义代码文件:kernel-5.10\kernel\reboot.c,如下:
/**
* kernel_power_off - power_off the system
*
* Shutdown everything and perform a clean system power_off.
*/
void kernel_power_off(void)
{
kernel_shutdown_prepare(SYSTEM_POWER_OFF);
if (pm_power_off_prepare)
pm_power_off_prepare();
migrate_to_reboot_cpu();
syscore_shutdown();
pr_emerg("Power down\n");
kmsg_dump(KMSG_DUMP_SHUTDOWN);
machine_power_off();
}
EXPORT_SYMBOL_GPL(kernel_power_off);
内核其他代码中使用时:1,使用extern引用函数;2,直接调用函数。参考如下:
引用:
extern void kernel_power_off(void);
调用:
kernel_power_off();
重启函数:void kernel_restart(char *cmd)
定义代码文件:kernel-5.10\kernel\reboot.c,如下:
/**
* kernel_restart - reboot the system
* @cmd: pointer to buffer containing command to execute for restart
* or %NULL
*
* Shutdown everything and perform a clean reboot.
* This is not safe to call in interrupt context.
*/
void kernel_restart(char *cmd)
{
kernel_restart_prepare(cmd);
migrate_to_reboot_cpu();
syscore_shutdown();
if (!cmd)
pr_emerg("Restarting system\n");
else
pr_emerg("Restarting system with command '%s'\n", cmd);
kmsg_dump(KMSG_DUMP_SHUTDOWN);
machine_restart(cmd);
}
EXPORT_SYMBOL_GPL(kernel_restart);
内核其他代码中使用时:1,使用extern引用函数;2,直接调用函数。参考如下:
引用:
extern void kernel_restart(char *cmd)
调用:
kernel_restart(NULL);