3

Это может показаться довольно простым вопросом, но у меня много проблем с поиском ответа ...

Как EFI действительно находит материал для загрузки?

По старой схеме BIOS, если MBR имеет специальный маркер, то содержимое загружается в RAM и выполняется. Что будет дальше, зависит от того, что делает этот код. Короче говоря, чтобы сделать загрузочную ОС, вам нужно установить загрузчик по вашему выбору в MBR, а затем сделать все, что ожидает выбранный вами загрузчик, для его настройки. Обычно в BIOS есть меню, позволяющее настроить порядок поиска загрузочной MBR, но это все.

Под EFI ... Я буквально понятия не имею, как это работает. Насколько я могу судить, он вообще не включает загрузочные блоки, а только системный раздел EFI. Но я не могу найти никаких подробностей помимо этого. Должны ли файлы в этом разделе находиться в определенной папке или именоваться определенным образом? Потому что мой тестовый ноутбук полностью игнорирует все, что я положил туда.

Безопасная загрузка добавляет второй уровень веселья к этому. Чтобы работать, двоичный файл должен быть подписан. Но я не могу понять, находится ли подпись внутри самого файла, или рядом с ней должен быть отдельный файл подписи ...

2 ответа2

5

Сначала прошивка ищет переменные EFI Boot#### (например, Boot0000 , Boot0001 и т.д.). Они описывают пункты меню загрузки EFI и содержат полное местоположение соответствующего исполняемого файла. Например:

$ sudo efibootmgr -v
BootCurrent: 0000
Timeout: 2 seconds
BootOrder: 0000,0001,0006,0007
Boot0000* Linux Boot Manager    HD(1,800,32000,785c8ca2-bb16-48fd-917b-19d69543338f)File(\EFI\gummiboot\gummibootx64.efi)
Boot0001* EFI Shell HD(1,800,32000,785c8ca2-bb16-48fd-917b-19d69543338f)File(\shellx64.efi)
Boot0006  Hard Drive    BIOS(2,0,00)P0: ST9640320AS               .
Boot0007  CD/DVD Drive  BIOS(3,0,00)P1: SlimtypeDVD A  DS8A5SH    .

Это описывает местоположение жесткого диска SATA; UUID раздела GPT; и путь в этом разделе.

(Обычно все загрузочные записи будут указывать на системный раздел EFI (введите код EF для MBR и C12A7328-F81F-11D2-BA4B-00A0C93EC93B для GPT - отображается как EF00 в gdisk), но это не обязательно.)

Если в микропрограмме нет сохраненных загрузочных записей или если вы загружаетесь со съемного носителя, он использует резервное расположение - он будет искать все системные разделы EFI (с соответствующим типом раздела и файловой системой FAT32) и внутри этих разделов. он ожидает найти исполняемый файл EFI в \EFI\BOOT\BOOTX64.EFI . (Этот путь предназначен для систем Intel x86_64; другие архитектуры используют разные имена файлов в одном и том же каталоге).

EFI не будет автоматически пытаться загрузить любую случайную *.EFI даже если он находится в системном разделе EFI.

Смотрите также:

0

Насколько я могу судить, похоже, что вы должны загрузить EFI, создав ESP (раздел MBR с кодом типа 0xEF, отформатированный как некоторый вариант FAT) и скопировать в него файл *.efi .

В моем тестировании все такие файлы полностью игнорируются, если только имя файла не является точным

/EFI/BOOT/bootx64.efi

Похоже, это волшебное имя, которое вы должны использовать.

На данный момент я понятия не имею, является ли это частью официальной спецификации EFI, или просто причудой моей конкретной материнской платы. Я публикую эту информацию здесь на случай, если она поможет кому-то другому ...

Используя эти знания, я смог скопировать файлы rEFInd на USB-диск, переименовать основной исполняемый файл и наблюдать, как ноутбук скулит, что двоичный файл не подписан. (Что это не так.) Так что теперь он видит, что там есть что-то потенциально загружаемое. Похоже, что если бы я мог отключить безопасную загрузку, ноутбук загрузился бы в этот момент.

(К сожалению, в настоящее время я не могу заставить Шима работать - но это другой вопрос ...)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .