EFI 如何找到引导加载程序?

Mat*_*hid 9 boot uefi

这似乎是一个相当基本的问题,但我在寻找答案时遇到了很多麻烦......

EFI 如何真正找到要启动的东西?

在旧的 BIOS 方案下,如果 MBR 具有特殊标记,则内容将被加载到 RAM 中并执行。接下来会发生什么取决于该代码的作用。简而言之,要使操作系统可启动,您需要将您选择的引导加载程序安装到 MBR 中,然后执行您选择的引导加载程序期望的任何其他操作以对其进行配置。通常 BIOS 有一些菜单让您配置它搜索可引导 MBR 的顺序,但仅此而已。

在 EFI 下......我真的不知道这些东西是如何工作的。据我所知,它根本不涉及引导块,只涉及 EFI 系统分区。但除此之外我找不到任何细节。此分区中的文件是否必须位于某个文件夹中或以特定方式命名?因为我的测试笔记本电脑完全忽略了我放在那里的任何东西。

安全启动为此增加了第二层乐趣。为了工作,必须对二进制文件进行签名。但是我无法弄清楚签名是否在文件本身内部,或者旁边是否应该有一个单独的签名文件......

use*_*686 9

首先,固件查找EFI 变量 Boot####(例如Boot0000,,Boot0001等等)。它们描述了 EFI 引导菜单条目,并包含相应可执行文件的完整位置。例如:

$ 须藤efibootmgr -v
引导电流:0000
超时:2 秒
引导顺序:0000,0001,0006,0007
Boot0000* Linux 启动管理器    HD(1,800,32000,785c8ca2-bb16-48fd-917b-19d69543338f)File(\EFI\gummiboot\gummibootx64.efi) 
Boot0001* EFI Shell HD(1,8060ca,-bb16-48fd-917b-19d69543338f) 19d69543338f)文件(\shellx64.efi)
Boot0006 硬盘 BIOS(2,0,00)P0: ST9640320AS 。
Boot0007 CD/DVD 驱动器 BIOS(3,0,00)P1: SlimtypeDVD A DS8A5SH 。

这描述了 SATA 硬盘的位置;一个 GPT 分区 UUID;以及该分区内的路径。

一般,所有的引导入口将指向EFI系统分区(类型代码EF为MBR,及C12A7328-F81F-11D2-BA4B-00A0C93EC93B用于GPT -示出为EF00GDISK),但是这不是必需的。)

如果固件没有存储任何启动条目,或者如果您从可移动媒体启动,它会使用回退位置 - 它将查找所有 EFI 系统分区(具有匹配的分区类型和 FAT32 文件系统),并在这些分区内它将期望在\EFI\BOOT\BOOTX64.EFI. (此路径适用于 Intel x86_64 系统;其他体系结构在同一目录中使用不同的文件名)。

EFI不会自动尝试引导任何随机*.EFI文件,即使它位于 EFI 系统分区上。

也可以看看: