Загрузка совместимого с UEFI программного обеспечения на USB и его запуск

У меня есть скомпилированный и связанный файл C, предположительно запускаемый системой UEFI в качестве ядра, и я заметил, что использование qemu для его запуска утомительно.

Есть ли способ запустить этот код, как если бы он был загрузчиком BIOS (вставьте необработанные двоичные файлы, возможно, файл EFI или IMG, на USB-накопитель и включите компьютер, к которому он подключен)?


person Néstor Llop    schedule 15.09.2020    source источник
comment
Вы можете загрузить систему UEFI с USB (при условии, что вы соответствуете спецификации безопасной загрузки). Или вместо qemu как насчет запуска виртуальной машины под vmware, xen или virtualbox?   -  person Craig Estey    schedule 16.09.2020
comment
дело в том, что я бегу? У меня есть файл EFI и файл IMG, и ни один из них не работает. VMWare напрямую занимается интернет-ОС   -  person Néstor Llop    schedule 16.09.2020
comment
Я использовал только виртуальный бокс, но если у вас есть загрузочный образ, вы можете скопировать его на один из виртуальных дисков vbox для загрузки. Или, в диспетчере устройств vbox, IIRC, вы можете сопоставить реальное устройство как загрузочное. Или вы можете создать .iso (файл образа компакт-диска) и загрузить с него виртуальную машину vbox. Вот как вы устанавливаете Linux на виртуальной машине. Так вот, есть программы/гайды для создания такого образа   -  person Craig Estey    schedule 16.09.2020
comment
@CraigEstey, я только что заметил, что безуспешно использовал некоторые конвертеры IMG в ISO, что мой файл может быть поврежден или неправильно отформатирован. Спасибо, этот вопрос будет заархивирован, пока не будет получена новая информация.   -  person Néstor Llop    schedule 16.09.2020


Ответы (1)


Чтобы UEFI загрузил исполняемый файл на флешку, вам необходимо:

  • либо разделы MBR, либо GPT на флешке; с одним разделом, отформатированным как файловая система FAT. Этот раздел, вероятно, также необходимо пометить как системный раздел EFI в таблице разделов (спецификации UEFI не очень ясны, но для меня это имеет смысл).

  • файл, который вы хотите выполнить, должен находиться в определенном каталоге и иметь определенное имя, которое зависит от платформы (например, \EFI\BOOT\BOOTx64.EFI для 64-разрядной версии 80x86)

  • Поле типа машины в PE-заголовке исполняемого файла должно совпадать с именем, которое ему было присвоено (например, 0x8664 для 64-разрядной версии 80x86).

Другое ограничение заключается в том, что вам либо нужно убедиться, что SecureBoot отключен в настройках UEFI; или выясните, как подписать исполняемый файл с помощью ключа, который принимает прошивка.

Обратите внимание, что правила для съемных носителей (например, флэш-памяти USB) отличаются от правил для фиксированных носителей (например, внутренних дисков SATA).

person Brendan    schedule 16.09.2020
comment
Обязательно ли иметь только те каталоги, которые вы упомянули, или мне разрешено находить другие произвольные вещи, скажем, в папке EFI? - person Néstor Llop; 17.09.2020
comment
@Vyber90: Вам нужно только указать загрузчику правильное имя / местоположение (чтобы UEFI мог его найти). Для всего остального вы можете делать, что хотите, но я бы рекомендовал не использовать системный раздел UEFI, потому что FAT ужасен (для ограничений/ограничений, функций, безопасности и т. д.). - person Brendan; 18.09.2020