源碼 (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
| 文件名 | 全稱/含義 | 壓縮算法 | 解壓目標內存區 | 適用場景 | 備註 |
|---|---|---|---|---|---|
| vmlinux | Virtual Memory Linux | 無 (ELF) | N/A | 內核開發調試、SystemTap、crash 分析、生成符號表 | 體積大 (數十~百 MB),不直接啟動 |
| zImage | Compressed zImage | gzip | 低端內存 (前 640KB) | 早期架構、極小內核 (嵌入式舊平台) | 內核體積受限 (~512KB 壓縮後) |
| bzImage | Big zImage | gzip (非 bzip2!) | 高端內存 (1MB 以上) | x86/ARM64 現代標準啟動映像 | 支撐大內核模組、完整驅動,主流發行版默認 |
| uImage | U-Boot Image | gzip (內部含 bzImage/zImage) | 由 U-Boot 決定 | 嵌入式設備 (ARM/MIPS/PowerPC) U-Boot 啟動 | 頭部 64B: 0x27051956 魔數、載入/入口地址、數據大小、CRC32 |
| vmlinuz | Virtual Memory Linux + gzip (z) | 同 bzImage/zImage | 同對應源文件 | /boot 目錄下供 Bootloader (GRUB/LILO/系统引导) 直接加載 | 通常指向最新 bzImage,如 vmlinuz-6.6.15-arch1-1 |
| initrd / initramfs | Initial RAM Disk / Filesystem | gzip/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
CONFIG_KERNEL_GZIP/LZ4/XZ/ZSTD 選擇。從源碼到啟動:vmlinux (調試) → bzImage (標準壓縮映像) → vmlinuz (啟動副本) + initramfs (臨時根) → GRUB → 內核解壓 → 運行用戶空間。嵌入式鏈路多一步 mkimage 封裝 uImage 適配 U-Boot。理解這條鏈路,能精準定位「內核編譯失敗、啟動掛起、模塊缺失、initramfs 缺驅動」等全鏈路問題。