Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 關機與重啟流程核心原始碼分析

編輯:Linux 教學

觸發路徑

  1. 使用者空間:sys_reboot() 系統呼叫 (需正確 MAGIC NUMBER)。
  2. 硬體事件:APM/ACPI 設備檔案操作 (如按下電源鍵)。

重啟流程 (sys_reboot → LINUX_REBOOT_CMD_RESTART)

  1. notifier_call_chain 廣播重啟通知給各子系統。
  2. machine_restart() 執行架構相關重啟:
  • SMP 環境:僅一 CPU 執行,其餘進入等待。
  • 依 reboot_thru_bios 變數決定:
# 不經 BIOS (向 0xCF9 寫入 0x06 模擬 Reset)
# 經 BIOS (切換實模式 ljmp $0xFFFF,$0x0000)

關機流程 (sys_reboot → LINUX_REBOOT_CMD_POWER_OFF)

  1. notifier_call_chain 廣播關機通知。
  2. machine_power_off():若 pm_power_off 函數指標非 NULL 則呼叫之。
  3. APM 載入時 (非 SMP) pm_power_off → apm_power_off(),透過 APM BIOS 切實模式或保護模式介面關機。

APM 驅動內部關機

  • 核心執行緒 apm_mainloop 偵測電源鍵 → APM_SYS_SUSPEND → apm_event_handler → check_events → suspend() 進入關機流程。
  • 若特定驅動未正確處理 APM 詢問導致死機,可 hack apm.c 統一呼叫 exec_usermodehelper(poweroff_helper_path) 走使用者空間關機腳本,繞過驅動問題。

ACPI 簡述 (核心 2.4.20 實驗階段)

  • APM 載入優先,ACPI 退讓。
  • 依賴 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 為未來主流,建議持續關注核心更新。

Copyright © Windows教程網 All Rights Reserved