電源を切るときの最後の機能はどれですか?

電源を切るときの最後の機能はどれですか?

コードをトレースすると次のようになりました:

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

答え1

にあり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);

drivers/firmware/efi/reboot.c 内

関連情報