vmlinuz.efi 是什么?

Chu*_*k R 6 live-usb boot uefi

是的,我知道这是一个内核;)

我在浏览 13.04 的 64 位 ISO 时看到了这个文件。我正在努力将它们重新混合到我的闪存驱动器上。但是,与 CD 的内核相比,我希望我的混音具有更新的内核。这意味着我必须制作一个 vmlinux.efi。

当然,要能够制造一个意味着我必须知道它是什么。

它只是一个普通的旧 64 位内核吗?可能是 EFI 引导存根吗?

引导存根方面没有意义,因为它是从 EFI 中的 GRUB 加载的,甚至不在 EFI/BOOT 中。如果它是 EFI 引导存根,也许只是面向未来?我在社区 wiki 上找到的一篇文章说“它被称为 vmlinuz.efi”,因为它是 64 位的。这也显得有些奇怪。我的意思是,它有助于区分,但如果它不是 EFI 可引导的,则可以选择更好的名称。

我觉得奇怪的一件事是 Isolinux 和 GRUB 都以相同的方式加载它,就好像它只是一个内核一样......所以它的实际目的有点神秘。EFI 引导存根也可以作为普通内核加载吗?

好吧,事实是我找不到关于为什么选择这个文件名以及它到底是什么的讨论。所以,这里希望有人知道这是什么以及它是如何工作的。

编辑:

来自 Ubuntu、Kubuntu、Xubuntu 和 Lubuntu CD 的所有内核的信息/MD5:

DISTRO: lubuntu
vmlinuz: Linux kernel x86 boot executable bzImage, version 3.8.0-19-generic (buildd@allspice) #29-Ubuntu SMP Wed Apr 17 18, RO-rootFS, swap_dev 0x5, Normal VGA
deacc3c3a21beb4913c43a00bb6d5e01  vmlinuz
DISTRO: kubuntu
vmlinuz: Linux kernel x86 boot executable bzImage, version 3.8.0-19-generic (buildd@allspice) #29-Ubuntu SMP Wed Apr 17 18, RO-rootFS, swap_dev 0x5, Normal VGA
deacc3c3a21beb4913c43a00bb6d5e01  vmlinuz
DISTRO: xubuntu
vmlinuz: Linux kernel x86 boot executable bzImage, version 3.8.0-19-generic (buildd@allspice) #29-Ubuntu SMP Wed Apr 17 18, RO-rootFS, swap_dev 0x5, Normal VGA
deacc3c3a21beb4913c43a00bb6d5e01  vmlinuz
DISTRO: ubuntu
vmlinuz.efi: Linux kernel x86 boot executable bzImage, version 3.8.0-19-generic (buildd@allspice) #29-Ubuntu SMP Wed Apr 17 18, RO-rootFS, swap_dev 0x5, Normal VGA
1919b5acd184538ecb978f6361f98bf1  vmlinuz.efi
Run Code Online (Sandbox Code Playgroud)

来自 Ubuntu ISO 的那个明显不同。我开始认为它一定是一个 EFI 引导存根内核......但仍然没有找到任何确认或否认它的东西。

Rod*_*ith 6

EFI 存根加载器是内核的一个组件,而不是一个单独的程序。当 EFI 存根加载器包含在内核中时,该内核文件对于 EFI 来说看起来就像一个普通的 EFI 程序,但它仍然是一个普通的内核,可以被通常的 Linux 引导加载器加载——GRUB、LILO、ELILO、SYSLINUX, EFI 存根从内核 3.3.0 和 AFAIK 开始可用,从那时起构建的所有 Ubuntu 内核都包含此功能。

没有任何法律规定带有 EFI 存根加载器的内核的文件名必须以.efi. 实际上,安装在硬盘上的内核缺少.efi文件扩展名;这似乎是安装光盘上的内核所独有的,至少在 Ubuntu 中是这样。EFI shell 不会运行程序,除非它有.efi扩展,不过。因此,为内核提供文件名为高级用户提供了一种恢复和测试方法,否则他们可能无法使用这些方法——即,从 EFI shell 手动启动内核。我不能确定,但​​我怀疑 Ubuntu 开发人员现在以这种方式命名他们的内核是为了提供这种启动内核的备份方式,或者可能只是为了表明它确实包含 EFI 存根支持。OTOH,32位的Ubuntu安装光盘的内核缺乏.efi扩展,但它确实包括EFI存根支持。我怀疑 Ubuntu 开发人员只是没有一致地命名他们的内核。

可以从磁盘上的任何位置启动 EFI 应用程序(例如支持 EFI 存根的 Linux 内核)。该“卡斯帕”子目录不到哪引导装载程序通常驻留的位置,但它可能推出的EFI计划从那里。

无论你读到什么来源说 64 位内核有一个.efi扩展,因为它是一个 64 位内核是错误的。实际上,Ubuntu 32 位版本的内核缺少此扩展,因此在 Ubuntu 世界中存在相关性,但不涉及因果关系。在Linux中通常,一个.efi扩展并不能表明64位内核-有大量的缺乏这种扩展的64位内核,并且可能需要命名的32位内核与32位UEFI该分机基于计算机(尽管 Ubuntu 不这样做)。该文件扩展名只是标识一个 EFI 应用程序,它可以是 32 位 (x86/IA-32)、64 位 (x86-64/AMD64) 或某些其他架构(ARM 或 Itanium)。