sys_reboot() 系統呼叫 (需正確 MAGIC NUMBER)。notifier_call_chain 廣播重啟通知給各子系統。machine_restart() 執行架構相關重啟:reboot_thru_bios 變數決定:# 不經 BIOS (向 0xCF9 寫入 0x06 模擬 Reset) # 經 BIOS (切換實模式 ljmp $0xFFFF,$0x0000)
notifier_call_chain 廣播關機通知。machine_power_off():若 pm_power_off 函數指標非 NULL 則呼叫之。pm_power_off → apm_power_off(),透過 APM BIOS 切實模式或保護模式介面關機。apm_mainloop 偵測電源鍵 → APM_SYS_SUSPEND → apm_event_handler → check_events → suspend() 進入關機流程。apm.c 統一呼叫 exec_usermodehelper(poweroff_helper_path) 走使用者空間關機腳本,繞過驅動問題。acpid daemon 處理事件。echo 3 > /proc/acpi/sleep 進入 S3 (Suspend to RAM) 等狀態。/proc/acpi/sleep write → sm_osl_proc_write_sleep → acpi_enter_sleep_state 寫入 ACPI 暫存器。理解關機/重啟流程可針對嵌入式系統客製化、修正特定硬體相容性問題。ACPI 為未來主流,建議持續關注核心更新。