V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wniming
V2EX  ›  Linux

arm64 架构的 fedora 38 的内核的文件格式是 PE32+ executable,有老哥能解释一下这种格式的内核怎么启动吗?

  •  
  •   wniming · 2023-05-29 10:21:41 +08:00 · 1585 次点击
    这是一个创建于 531 天前的主题,其中的信息可能已经有所发展或是发生改变。

    fedora 37 的内核就是一个 gzip 格式的压缩包:

    file /boot/vmlinuz-6.0.7-301.fc37.aarch64

    /boot/vmlinuz-6.0.7-301.fc37.aarch64: gzip compressed data, max compression, from Unix, original size modulo 2^32 46483968

    而 fedora 38 的内核就不知道是什么意思了:

    file vmlinuz-6.2.9-300.fc38.aarch64

    vmlinuz-6.2.9-300.fc38.aarch64: PE32+ executable (EFI application) Aarch64 (stripped to external PDB), for MS Windows, 2 sections

    我的问题是 PE32+ executable 格式的内核是怎么被 u-boot 加载启动的? u-boot 应该不支持这个格式吧?

    7 条回复    2023-05-29 16:01:29 +08:00
    wniming
        2
    wniming  
    OP
       2023-05-29 10:40:52 +08:00
    @ysc3839 感谢回复,我知道内核可以伪装成 efi 文件让 uefi 固件来加载,u-boot 也部分实现了 uefi 协议,但 arm64 的内核不像 x86 那样还自带解压缩程序,而这个 efi 文件的大小和 fedora 37 的 gzip 格式的内核大小差不多,肯定也是被压缩过的,那么解压缩这个步骤是谁来执行呢?
    ysc3839
        3
    ysc3839  
       2023-05-29 11:48:39 +08:00 via Android
    @wniming 我不知道,有可能是 u-boot ,也有可能是内核
    yzwduck
        4
    yzwduck  
       2023-05-29 12:31:59 +08:00 via Android
    wniming
        5
    wniming  
    OP
       2023-05-29 13:39:40 +08:00
    @yzwduck 应该不是, UKI 是包含 initramfs 的,而 fedora 38 是有单独的 initramfs 文件的。
    qbqbqbqb
        6
    qbqbqbqb  
       2023-05-29 15:45:40 +08:00   ❤️ 1
    @wniming 你可以理解成开启 EFISTUB 功能就是在内核上套了一层 UEFI 的壳,其余部分的格式和原来的内核没什么差别,引导器想要绕过这层壳像原来一样直接加载启动也是可以的。

    比如说 x86-64 UEFI 的情况下,grub2-x86_64-efi 是不用 UEFI 的机制,类似传统方法自行加载内核启动的;而 rEFInd, systemd-boot 等引导器是利用 UEFI 的机制加载启动(相当于 chainload )。
    验证方法是在 secure boot 的环境下,GRUB 只需要引导器本身有签名,如果关闭了 GRUB 另带的验证机制(需要自行编译或者使用不原生支持 secure boot 的发行版;像 ubuntu 这种原生支持的一般都自带额外的验证),可以直接加载未签名的内核并启动;而 rEFInd, systemd-boot 等引导器除了引导器的 efi 文件需要签名以外,内核文件也需要签名,否则会被 UEFI 拒绝。

    所以说原来怎么解压,现在还是怎么解压。
    qbqbqbqb
        7
    qbqbqbqb  
       2023-05-29 16:01:29 +08:00   ❤️ 1
    按照 fedora 的官方说法,是使用了 CONFIG_EFI_ZBOOT 这个功能( 6.1 版本加入内核,以前为第三方补丁),可以支持 UEFI 环境下解压内核,同时兼容非 UEFI 环境,由引导器按照以前的方法解压内核。

    https://fedoraproject.org/wiki/Changes/Unified_Kernel_Support_Phase_1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1147 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:15 · PVG 02:15 · LAX 10:15 · JFK 13:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.