Как можно записать загрузчик, написанный на сборке x86, на USB-накопитель и поддерживать как BIOS, так и UEFI?

Недавно написал загрузчик на сборке x86. В данный момент загрузчик не делает ничего особенного, но я планирую загрузить собственное ядро ​​с помощью этого загрузчика. Я могу записать загрузчик на мой USB-накопитель, отформатированный в FAT32, и он будет правильно загружен BIOS.

Как сделать USB-накопитель загрузочным как для BIOS, так и для UEFI?


person Michiel Pater    schedule 30.03.2015    source источник


Ответы (2)


Съемный носитель не обязательно должен быть отформатирован в GPT, чтобы с него загружался UEFI. Вам необходимо создать папку efi/boot в разделе FAT на съемном носителе и поместить туда загрузчик UEFI. Имя файла должно быть bootx64.efi для архитектуры X86-64. Загрузка в режиме Legacy или BIOS будет производиться без изменений - через MBR. В чистом режиме загрузки UEFI он будет читать /efi/boot/bootx64.efi файл.
Также обратите внимание, что раздел FAT должен адресоваться первой записью раздела MBR и быть активным.

person Alexander Zhak    schedule 30.03.2015
comment
Спасибо. На моем USB-накопителе нет MBR. Это просто один раздел FAT32. Было бы хорошо? Могу ли я загрузить свой код сборки из загрузчика UEFI? - person Michiel Pater; 30.03.2015
comment
Хм, честно говоря, я никогда не пробовал подключать USB-накопители, отформатированные как дискеты (без разбиения на разделы MBR / GPT). UEFI переходит в длительный режим перед загрузкой bootx64.efi. По сути, исполняемый файл UEFI представляет собой немного настроенный PE-файл (Win DLL). Затем вы можете загрузить свое ядро ​​и все, что хотите, с помощью служб UEFI. Прерывания BIOS не работают. Пожалуйста, обратитесь к спецификации для получения подробной информации www.uefi.org/sites/default/files/resources/2_4_Errata_B.pdf. - person Alexander Zhak; 30.03.2015
comment
Кстати, мне не удалось отформатировать флешку в FAT32 с MBR и записать загрузчик в активный раздел. Не могли бы вы дать мне какое-нибудь руководство, как это сделать в Windows 7? Если я отформатирую свой USB-накопитель в FAT32, у него будет только один раздел и нет MBR. - person Michiel Pater; 30.03.2015
comment
MBR - это структура, которая находится в самом первом секторе среды. Он содержит небольшую загрузочную программу (не более 440 байт), которая загружает загрузочный сектор активного раздела, и таблицу разделов (4 записи), описывающую разделы на носителе. Если вы форматировали диск под Windows, то MBR уже есть. - person Alexander Zhak; 30.03.2015
comment
И как мне узнать, какой сектор является загрузочным сектором активного раздела, куда я могу записать свой загрузчик? - person Michiel Pater; 30.03.2015
comment
О структуре MBR читайте в Интернете. Это не сложная, но довольно большая тема для комментариев. Я предлагаю начать с wiki.osdev.org/MBR, thestarman.pcministry.com/asm/mbr/95BMEMBR.htm, en.wikipedia.org/wiki/Master_boot_record - person Alexander Zhak; 30.03.2015
comment
Давайте продолжим это обсуждение в чате. - person Michiel Pater; 30.03.2015
comment
У меня есть загрузчик на USB-накопителе. Он отлично загружается в лаборатории моего университета, которая специально настроена для загрузки этих флешек. Но я не могу заставить его загрузиться на моем старом HP Elitebook (2530p). BIOS настроен на загрузку с USB. Есть ли что-нибудь, что может помешать его загрузке? - person francisaugusto; 21.03.2016

Для этого вам необходимо перезагрузить компьютер. После первого запуска вам нужно нажать клавишу параметров загрузки. Обычно это F2 или Del. Оттуда вы можете выбрать, с какого устройства будет загружаться ваш компьютер.

Однако будьте осторожны и убедитесь, что вы на 100% знаете, что делаете. Вместо этого я бы порекомендовал вам установить виртуальную машину и использовать ее в качестве объекта тестирования для создаваемой вами ОС. Таким образом, вам не придется перезагружать компьютер так часто, и снижается риск его повреждения.

person CMilby    schedule 30.03.2015
comment
Спасибо, но я знаю, как загружаться с UEFI. Мой вопрос How can I make the USB Flash drive bootable by both BIOS and UEFI?. - person Michiel Pater; 30.03.2015