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

RISC-V交叉编译Linux内核能否生成ELF?QEMU -kernel是否支持?

RISC-V交叉编译内核格式与QEMU加载问题

我在进行RISC-V交叉编译Linux内核时,生成的arch/riscv/boot/Image文件为EFI格式,执行file命令结果如下:

file arch/riscv/boot/Image
arch/riscv/boot/Image: MS-DOS executable PE32+ executable (EFI application) RISC-V 64-bit (stripped to external PDB), for MS Windows

而AMD64机器上的内核文件为ELF格式,file命令结果如下:

file /boot/vmlinuz-5.10.0-23-amd64
/boot/vmlinuz-5.10.0-23-amd64: Linux kernel x86 boot executable bzImage, version 5.10.0-23-amd64 (debian-kernel@lists.debian.org) #1 SMP Debian 5.10.179-1 (2023-05-12), RO-rootFS, swap_dev 0x6, Normal VGA

我已了解EFI STUB相关内容,现咨询两个问题:

  • 是否可以控制RISC-V交叉编译的输出,生成ELF格式的Linux内核?
  • QEMU RISC-V的-kernel参数是否支持加载ELF格式的内核文件?

问题解答

1. 能否生成ELF格式的RISC-V Linux内核?

可以。你得到的EFI格式Image是因为编译时开启了CONFIG_EFI_STUB选项,该选项会将内核打包为EFI可执行文件。要生成纯ELF格式内核,只需关闭该选项后重新编译:

  • 方法一:执行make menuconfig,进入Firmware Drivers -> EFI Support,取消勾选EFI stub support
  • 方法二:直接在.config文件中设置CONFIG_EFI_STUB=n

重新编译后,arch/riscv/boot/Image会变为ELF格式,执行file命令会显示类似结果:

arch/riscv/boot/Image: ELF 64-bit LSB executable, UCB RISC-V, version 1 (SYSV), statically linked, stripped

2. QEMU RISC-V的-kernel参数是否支持ELF格式内核?

完全支持。QEMU对RISC-V的-kernel参数同时兼容ELF和EFI格式的内核镜像。在无EFI环境的QEMU虚拟机(比如使用OpenSBI作为固件的场景)中,ELF格式内核是更常用的加载方式,QEMU可直接解析ELF文件的段信息,将内核加载到正确内存地址并启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:52:40