什么是 vmlinuz.efi?

什么是 vmlinuz.efi?

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

我在浏览 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

Ubuntu ISO 中的版本明显不同。我开始认为它一定是 EFI 启动存根内核……但仍然没有找到任何可以确认或否认的东西。

答案1

EFI 存根加载器是的组成部分内核,而不是单独的程序。当 EFI 存根加载程序包含在内核中时,该内核文件对于 EFI 来说就像一个正常的 EFI 程序,但它仍然是一个正常的内核,可以由常见的 Linux 引导加载程序(GRUB、LILO、ELILO、SYSLINUX 等)加载。EFI 存根自内核 3.3.0 开始可用,据我所知,从那时起构建的所有 Ubuntu 内核都包含此功能。

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

可以从磁盘上的任何位置启动 EFI 应用程序(例如具有 EFI 存根支持的 Linux 内核)。“casper”子目录不是引导加载程序通常所在的位置,但它可以从那里启动 EFI 程序。

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

相关内容