iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0
Security

現在是pwn的天下!系列 第 27

【Day-27】Booting:Linux Kernel 如何從零啟動

  • 分享至 

  • xImage
  •  

前言

昨天我們用 QEMU 成功跑起自己的 Kernel,但 Kernel 怎麼從「完全沒電」的狀態,到可以開始執行我們寫的程式呢?
今天我們就來揭開 Linux Booting(開機) 的流程,理解它如何一步步掌控整個系統

什麼是 Booting?

Booting 就是「開機流程」,負責把電腦從關機狀態喚醒,然後載入作業系統。

可以把它想像成:

  1. 電腦從睡眠中醒來
  2. 系統 BIOS / UEFI 檢查硬體
  3. 尋找可以啟動的磁碟或映像
  4. 將 Linux Kernel 載入記憶體,交給它完全控制

Linux Booting 流程概覽

Linux 的 Booting 可以分成幾個階段:

1. BIOS / UEFI 初始化

  • 開機時,CPU 先執行 BIOS 或 UEFI 固件
  • 檢查硬體(RAM、CPU、磁碟)是否正常
  • 根據設定找出啟動裝置(Boot Device)

2. Bootloader 載入

  • 常見 Bootloader:GRUB

  • 功能:

    • 選擇 Kernel 版本
    • 將 Kernel 與 initramfs 載入記憶體
    • 將控制權交給 Kernel
  • 在 QEMU 測試時,如果直接用 -kernel,其實 Bootloader 步驟被省略,由 QEMU 幫我們跳過

3. Kernel 初始化

  • Kernel 開始執行 start_kernel() 函數

  • 初始化:

    • 記憶體管理 (Memory)
    • 排程器 (Scheduler)
    • 中斷 (Interrupts)
    • 驅動程式 (Drivers)
  • 這時候,Kernel 已經可以管理硬體了

4. 根檔系統 (Root Filesystem) 啟動

  • Kernel 掛載 initramfs 或根磁碟
  • 啟動第一個進程 /sbin/init 或 systemd
  • 系統正式進入 User Space,可以執行應用程式

Booting 在 QEMU 的應用

qemu-system-x86_64 \
  -kernel arch/x86/boot/bzImage \
  -initrd initramfs.cpio.gz \
  -append "console=ttyS0" \
  -nographic
  • QEMU 幫我們模擬了 Bootloader
  • Kernel 從 bzImage 開始初始化
  • initramfs 提供最基本的根檔系統,Kernel 才能成功進入 User Space

如果成功,終端機會顯示 Kernel log,最後看到 /init 啟動訊息。

總結

  • Booting 是 Linux 系統從零開始啟動的完整流程

  • 核心階段:BIOS/UEFI → Bootloader → Kernel Init → Root FS → User Space

  • 在 QEMU 測試時,我們可以快速觀察 Kernel 的啟動過程,理解每個階段的作用

  • 理解 Booting,對 Kernel 開發、模組測試、資安研究都非常重要


上一篇
【Day-26】QEMU:在虛擬世界中跑起自己的 Linux Kernel
下一篇
【Day-28】撰寫第一個 Linux Kernel Module
系列文
現在是pwn的天下!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言