Linuxカーネルのどの機能がシャットダウン操作を実行しますか?

Linuxカーネルのどの機能がシャットダウン操作を実行しますか?

閉じる方法を尋ねることではありません。電源遮断方法を聞きたいです。

Linuxカーネルコードのどのような機能が電源オフ操作を実行しますか?そしてコードを説明してください。

ベストアンサー1

実際のカーネルコードはシステムアーキテクチャによって異なります。 x86システムの場合は、次の場所にあります。アーチ/x86/kernel/reboot.c

停止は機械を停止し、電源を入れたままにします。したがって、コアのみを停止するだけで、通常は電源を切ることはありません。

static void native_machine_halt(void)
{
  /* Stop other cpus and apics */
  machine_shutdown();

  tboot_shutdown(TB_SHUTDOWN_HALT);

  stop_this_cpu(NULL);
}

同時に power_off は APM/ACPI の電源供給も遮断します。pm_power_off()

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

machine_shutdown()無限ループです

tboot_shutdown()アーチ/x86/kernel/tboot.c)

このCPUの停止(null)アーチ/x86/kernel/process.c) CPU の IRQ を無効にし、CPU をオフラインに設定します。

pm_power_off()アーチ/x86/kernel/apm_32.c) は関数ポインタです。apm_power_off()

ご覧のとおり、すべての作業はアーチに依存します。すべての場合で、これはASM呼び出しを介して行われます。

~のためapm_power_off()、コードAPT_STATE_OFF(0x0003)を使用してBiosを呼び出します。

apm_bios_call_simple(APM_FUNC_SET_STATE, APM_DEVICE_ALL, APM_STATE_OFF, eax, err);

~のためNative_halt()(arch/x86/include/asm/irqflags.h) この呼び出しは、次の目的で使用されます。

asm volatile("hlt": : :"memory");

あなたの毒を選択してください:)

おすすめ記事