You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM64平台Image与vmlinux的精确差异及QEMU启动问题咨询

ARM64 Linux内核vmlinux与Image的差异及QEMU启动问题解析

问题背景

针对ARM64平台,使用以下命令编译启用调试的默认配置最新Linux内核:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
make -j4 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-

编译后在根目录得到vmlinux文件,在arch/arm64/boot目录得到Image文件。通过QEMU测试时,启动结果存在差异:

可启动命令

qemu-system-aarch64 -semihosting -m 1024M -nographic  -machine virt,gic-version=3,virtualization=on  -cpu max -kernel mylinux/arch/arm64/boot/Image

无法启动命令

qemu-system-aarch64 -semihosting -m 1024M -nographic  -machine virt,gic-version=3,virtualization=on  -cpu max -kernel linux/vmlinux

file命令输出

$ file vmlinux
vmlinux: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), statically linked, BuildID[sha1]=65799dedbc4bed593ecec1fe49d7b267, with debug_info, not stripped

$ file arch/arm64/boot/Image
arch/arm64/boot/Image: MS-DOS executable PE32+ executable (EFI application) Aarch64 (stripped to external PDB), for MS Windows

vmlinux与Image的精确差异

  • vmlinux

    • 是编译过程生成的原始ELF格式内核文件,未经过任何启动包装或压缩处理
    • 保留完整的调试信息和符号表(not stripped、with debug_info),主要用于内核调试、符号分析、性能 profiling 等开发场景
    • 仅包含内核核心代码,缺少硬件启动必需的引导初始化逻辑
  • Image

    • 是经过内核镜像工具处理后的可引导镜像,因默认defconfig开启EFI支持,生成了PE32+格式的EFI应用
    • 包含启动必需的引导代码:比如MMU初始化、栈设置、EFI启动协议兼容的头部信息,能被QEMU或真实硬件的EFI固件识别
    • 已剥离调试符号(stripped to external PDB),体积更小,适配启动介质的要求

QEMU能启动Image却无法启动vmlinux的原因

QEMU的-kernel参数针对ARM64 virt平台,默认需要带有引导加载逻辑的可启动镜像:

  1. vmlinux是纯ELF格式的内核文件,缺少QEMU启动时所需的硬件初始化引导代码和平台兼容的启动头部,QEMU无法直接解析纯ELF格式的内核完成启动流程(比如初始化内存、设置异常向量表、跳转到内核入口)
  2. Image是专门为启动场景生成的镜像,包含QEMU virt平台能识别的EFI引导头部和初始化逻辑,QEMU可以直接加载并执行该镜像,完成硬件初始化后再进入内核主程序

内容的提问来源于stack exchange,提问作者Little Tree

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:01:05