kernel_shutdown_prepare
时间: 2023-07-22 21:15:02 浏览: 51
`kernel_shutdown_prepare()` 是 Linux 内核中的一个函数,用于准备系统关机的操作。它在关机过程中被调用,可以执行一些必要的准备工作。
具体来说,`kernel_shutdown_prepare()` 函数的作用是在系统关机之前执行一些准备工作,例如释放资源、关闭设备、停止服务等。它通常被用于执行与关机过程相关的清理操作。
在 Linux 内核源代码中,`kernel_shutdown_prepare()` 函数的实现可以在 `kernel/reboot.c` 文件中找到。它通常会在关机的不同阶段被调用,以确保系统在关机时正常关闭。
需要注意的是,具体的 `kernel_shutdown_prepare()` 函数的实现可能因不同的 Linux 内核版本和配置而有所差异。在阅读和理解该函数时,建议参考相应版本的内核源代码和文档以获取准确的信息。
相关问题
static void kernel_shutdown_prepare(enum system_states state) { blocking_notifier_call_chain(&reboot_notifier_list, (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL); system_state = state; usermodehelper_disable(); device_shutdown(); static void kernel_shutdown_prepare(enum system_states state) { blocking_notifier_call_chain(&reboot_notifier_list, (state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF, NULL); system_state = state; usermodehelper_disable(); device_shutdown(); }
这段代码展示了 Linux 内核中的 `kernel_shutdown_prepare()` 函数的实现。它的作用是准备系统关机操作,并执行一些必要的准备工作。
具体来说,这段代码中的 `kernel_shutdown_prepare()` 函数实现了以下操作:
1. `blocking_notifier_call_chain(&reboot_notifier_list, ...)`:调用 `reboot_notifier_list` 中注册的通知链,通知注册的监听器系统即将进入关机状态。这里使用了 `blocking_notifier_call_chain()` 函数来触发通知。
2. `(state == SYSTEM_HALT) ? SYS_HALT : SYS_POWER_OFF`:根据传入的系统状态参数 `state`,确定要发送给通知监听器的通知类型。如果系统状态为 `SYSTEM_HALT`,则发送 `SYS_HALT` 类型的通知,否则发送 `SYS_POWER_OFF` 类型的通知。
3. `system_state = state`:将系统状态变量 `system_state` 更新为传入的系统状态参数 `state`。
4. `usermodehelper_disable()`:禁用用户模式助手(usermodehelper),它是一个用于执行系统关机期间的用户模式任务的机制。通过禁用它,可以确保在关机过程中不会启动新的用户模式任务。
5. `device_shutdown()`:执行设备关机操作,关闭和停止相关设备。
这段代码是 Linux 内核中负责准备系统关机操作的一部分。它通过调用通知链、更新系统状态、禁用用户模式助手和执行设备关机操作来确保系统在关机过程中执行必要的准备工作。
reboot.c里的kernel_power_off 有如下代码: kernel_shutdown_prepare(SYSTEM_POWER_OFF); migrate_to_reboot__cpu(); syscore_shutdonw(); kmsg_dump(KMSSG__DUMP_POWEROFF); machiine_power_off(); 这里是如何调用到我之前说的那个.shutdown = smb5_shutdown的?
在`kernel/power/shutdown.c`文件中,`kernel_power_off()`函数会调用`kernel_shutdown_prepare()`函数,该函数会触发系统关机的准备工作,其中就包括了遍历所有设备驱动程序中的`.shutdown`函数。`kernel_shutdown_prepare()`函数会调用`device_shutdown()`函数,该函数会遍历所有已注册的设备驱动程序中的`.shutdown`函数,并将它们全部调用一遍。因此,当系统关机或重启时,内核会自动调用`smb5_shutdown`函数,这是由内核中的`device_shutdown()`函数触发的,而不是由具体的系统关机代码直接调用的。