전원을 끌 때 마지막 기능은 무엇입니까?

전원을 끌 때 마지막 기능은 무엇입니까?

코드를 추적하여 다음을 얻었습니다.

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에서

관련 정보