Kernel
關機時最後一個功能是哪個功能?
我跟踪程式碼並得到:
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