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 內核映像文件家族圖鑑:vmlinux、zImage、bzImage、uImage、vmlinuz、initrd 全解析

編輯:Linux 教學

編譯產物鏈路

源碼 (arch/xxx/boot/) 
   → vmlinux (ELF, 未壓縮, 含完整符號表, 用於調試/分析)
   → 經過 gzip 壓縮 + 添加解壓縮頭部
       → zImage (舊版, 解壓至低端內存 < 640KB, 適用小內核)
       → bzImage (big zImage, 解壓至高端內存 > 1MB, 現代標準, 支持大內核)
   → 針對 U-Boot 封裝 (添加 64 字節 header: 魔數、載入地址、入口點、大小、校驗和)
       → uImage (嵌入式設備啟動器專用)
   → 安裝至 /boot
       → vmlinuz (實際啟動文件, 通常是 bzImage 的副本或符號鏈接, 命名約定: vmlinuz-<版本>)
   → 配合 initrd/initramfs (臨時根文件系統)
       → 啟動流程: Bootloader → vmlinuz + initrd → 內核解壓、掛載 initrd → 執行 /init → 切換真實根分區 → 啟動 systemd

核心區別對照表

文件名全稱/含義壓縮算法解壓目標內存區適用場景備註
vmlinuxVirtual Memory Linux無 (ELF)N/A內核開發調試、SystemTap、crash 分析、生成符號表體積大 (數十~百 MB),不直接啟動
zImageCompressed zImagegzip低端內存 (前 640KB)早期架構、極小內核 (嵌入式舊平台)內核體積受限 (~512KB 壓縮後)
bzImageBig zImagegzip (非 bzip2!)高端內存 (1MB 以上)x86/ARM64 現代標準啟動映像支撐大內核模組、完整驅動,主流發行版默認
uImageU-Boot Imagegzip (內部含 bzImage/zImage)由 U-Boot 決定嵌入式設備 (ARM/MIPS/PowerPC) U-Boot 啟動頭部 64B: 0x27051956 魔數、載入/入口地址、數據大小、CRC32
vmlinuzVirtual Memory Linux + gzip (z)同 bzImage/zImage同對應源文件/boot 目錄下供 Bootloader (GRUB/LILO/系统引导) 直接加載通常指向最新 bzImage,如 vmlinuz-6.6.15-arch1-1
initrd / initramfsInitial RAM Disk / Filesystemgzip/xz/lz4/zstd (cpio 歸檔)內存磁盤臨時根文件系統,包含啟動必需模塊 (存儲/文件系統/加密/網絡)、腳本現代發行版均用 initramfs (cpio 歸檔),舊稱 initrd (映像文件)

實戰查看與驗證

file /boot/vmlinuz-$(uname -r)
# 輸出: Linux kernel x86 boot executable bzImage, version 6.6.15, RO-rootFS, swap_dev 0x3, Normal VGA

ls -lh /boot/vmlinuz* /boot/initramfs*
# 對比大小

# 解壓查看 initramfs 內容
mkdir /tmp/initramfs && cd /tmp/initramfs
zcat /boot/initramfs-$(uname -r).img | cpio -idmv

常見誤區澄清

  • bzImage 不是 bzip2 壓縮:「bz」=「big z」,而非 bzip2。內核支援 gzip/lz4/lzop/xz/zstd 多種壓縮,編譯時 CONFIG_KERNEL_GZIP/LZ4/XZ/ZSTD 選擇。
  • vmlinuz 不是固定格式:它只是「可啟動的壓縮內核映像」的約定俗成命名,實際可能是 zImage/bzImage/EFI PE/PE32+ (UEFI 直接啟動)。
  • initrd ≠ initramfs:initrd 是固定大小的映像文件 (ext2/minix 文件系統),需文件系統驅動;initramfs 是 cpio 歸檔,內核原生支持解包至 rootfs,更靈活、體積更小,現代系統全面採用 initramfs (文件名常仍叫 initrd.img)。
  • uImage 僅用於 U-Boot:x86 PC 機使用 GRUB 直接讀取 vmlinuz,不需要 uImage。

總結

從源碼到啟動:vmlinux (調試) → bzImage (標準壓縮映像) → vmlinuz (啟動副本) + initramfs (臨時根) → GRUB → 內核解壓 → 運行用戶空間。嵌入式鏈路多一步 mkimage 封裝 uImage 適配 U-Boot。理解這條鏈路,能精準定位「內核編譯失敗、啟動掛起、模塊缺失、initramfs 缺驅動」等全鏈路問題。

Copyright © Windows教程網 All Rights Reserved