Kernel

關機時最後一個功能是哪個功能?

  • June 18, 2021

我跟踪程式碼並得到:

native_machine_shutdown()

https://elixir.bootlin.com/linux/latest/source/arch/x86/kernel/reboot.c#L682

但是我沒有看到任何關閉電源或觸發哪個CPU寄存器斷電的程式碼?

我從那裡到達:

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();
}

https://elixir.bootlin.com/linux/latest/source/kernel/reboot.c#L287

它在reboot.c,並且很好地評論。

static void native_machine_power_off(void)
{
   if (pm_power_off) {
       if (!reboot_force)
           machine_shutdown();
       pm_power_off();
   }
   /* A fallback in case there is no PM info available */
   tboot_shutdown(TB_SHUTDOWN_HALT);
}

所以,pm_power_off:現在確實是特定於平台的;無論您是在遊戲機還是機架伺服器上,情況都不同。

您可能正在尋找執行此操作的 EFI 驅動程序:

efi.reset_system(EFI_RESET_SHUTDOWN, EFI_SUCCESS, 0, NULL);

在驅動程序/韌體/efi/reboot.c

引用自:https://unix.stackexchange.com/questions/654827