yuanix
V2EX  ›  问与答

RISC-V/ARM64 交叉编译 Linux 生成生成的是 EFI 文件而不是 ELF?能不能生成 ELF?

  •  
  •   yuanix · Jun 25, 2023 · 1279 views
    This topic created in 1052 days ago, the information mentioned may be changed or developed.

    这是 RISC-V 交叉编译生成的 Linux 内核,file 命令查看发现是 EFI 格式

    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 /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 ([email protected]) #1 SMP Debian 5.10.179-1 (2023-05-12), RO-rootFS, swap_dev 0x6, Normal VGA
    

    RISC-V 交叉编译的内核输出文件能否控制格式,生成 ELF ? 查了一下,了解了 EFI STUB ,不过还是好奇能不能生成 ELF 格式的 RISC-V Linux 内核? 以及 QEMU RSIC-V 的-kernel参数是否支持加载 ELF 格式的内核文件?

    希望大佬指点一下,查了半天没找到什么资料

    Supplement 1  ·  Jun 25, 2023

    更新一点现在我知道的东西:

    qemu-system-riscv64 的 -kernel 参数至少可以接受

    • flat binary: U-Boot编译目标文件 u-boot.bin
    • ELF: U-Boot编译目标文件 u-boot
    • EFI: Linux kernel编译目标文件 Image
    2 replies    2023-06-25 22:50:52 +08:00
    ysc3839
        1
    ysc3839  
       Jun 25, 2023 via Android
    CONFIG_EFI_STUB?
    yuanix
        2
    yuanix  
    OP
       Jun 25, 2023
    @ysc3839 在 make defconfig 的基础上,把 CONFIG_EFI=y 改成 CONFIG_EFI=n ,可以使生成的 Image 变成 flat binary 格式,设置 CONFIG_EFI_STUB=n 似乎是无效的,仍然生成 EFI 格式的 Image
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   923 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 20:42 · PVG 04:42 · LAX 13:42 · JFK 16:42
    ♥ Do have faith in what you're doing.