LINUX.ORG.RU

Загрузка BIOS, GPT, GRUB4DOS, MEMDISK, DUET и SHELLx64.EFI

 , ,


0

1

Есть необходимость тестировать EFI-скрипты и утилиты на машине с обычным BIOS.

Сейчас это делается с помощью пары загрузочных флэшек:

1. MBR -> GRUB4DOS -> MEMDISK -> DUET (floppy)
2. GPT -> ESP -> EFI/BOOT/bootx64.efi (он же Shellx64.efi) -> startup.nsh

Я видел как на машине с обычным BIOS с GPT-диска через CLOVER загружается OS X, а это значит, что можно сделать хакнутую GPT-флэшку, которая будет загрузочной на BIOS-машинах. Долго рылся в сети, но готового ответа пока не нашёл. Делать ESP c CLOVER не хочу, мне хватит запуска GRUB4DOS/syslinux. Помогите советом, как сделать из пары одну загрузочную флэшку.

★★

100 раз так делал.
Примерный план действий.

  • В первый сектор GPT устанавливаешь boot0af
  • В начало раздела ESP устанавливаешь boot1f32
  • В корень ESP кладёшь boot6
  • Вместо EFI\CLOVER\CLOVERX64.efi кладёшь любой efi который тебе нужно загрузить. (возможно boot6 можно пропатчить и изменить путь)

Подробней здесь https://clover-wiki.zetam.org/Installation#manual-installation
и здесь https://clover-wiki.zetam.org/What-is-what

surefire ★★★ ()
Последнее исправление: surefire (всего исправлений: 2)
Ответ на: комментарий от surefire

Похоже, что я не то или не там ищу...

В распакованном дистрибутиве клевера таких файлов найти не смог. MAC с CLOVER на борту под рукой тоже нет.

Нашёл на гите исходники и готовые бинарники, но там имена у файлов другие, и не знаю, подойдут они мне, или нет.

https://github.com/Clover-EFI-Bootloader/clover/tree/master/BootSector

Подскажите, пожалуйста, где я могу найти указанные Вами файлы? (желательно, в бинарном виде)

zzdnx ★★ ()
Ответ на: Похоже, что я не то или не там ищу... от zzdnx

Здесь https://sourceforge.net/projects/cloverefiboot/files/Bootable_ISO/

После распаковки здесь: usr/standalone/i386/

Еще на шаге

В корень ESP кладёшь boot6

нужно положить переименовав просто в boot

surefire ★★★ ()
Последнее исправление: surefire (всего исправлений: 1)
Ответ на: комментарий от surefire

ЧЯДНТ?

Подготовка флэшки:

Размечаю флэшку в GPT при помощи утилит: sgdisk или gparted.

Так как Windows нормально работает только с первой партицией - сначала создаю в конце памяти раздел «Data», а потом, на оставшемся в начале месте, «ESP».

Таблица разделов получается такая: /dev/sdd (флэшка), /dev/sdd1 (DATA в конце) и /dev/sdd2 (ESP в начале).

Установка boot-сектора:

Утилитой dd устанавливаю boot0af на /dev/sdd.

sudo dd if=boot0af of=/dev/sdd
После установки флэшка определяется как неразмеченная. Размер boot-сектора указывать пробовал - это никак не влияет на результат.

Как проверяю результат:

sudo gparted /dev/sdd
sudo kvm -drive format=raw,file=/dev/sdd -serial stdio -m 256M -cpu host -smp 2 -name "проверка загружаемости \"/dev/sdd\" на UEFI" -bios OVMF.fd >>/dev/null
sudo kvm -drive format=raw,file=/dev/sdd -serial stdio -m 256M -cpu host -smp 2 -name "проверка загружаемости \"/dev/sdd\" на BIOS"

zzdnx ★★ ()
Ответ на: ЧЯДНТ? от zzdnx

sudo dd if=boot0af of=/dev/sdd

Прямо вот так нельзя, смотри выше я давал ссылку

Там приведен такой метод:

dd if=/dev/sdb count=1 bs=512 of=origMBR
cp origMBR newMBR
dd if=boot0 of=newMBR bs=1 count=440 conv=notrunc
dd if=newMBR of=/dev/sdb count=1 bs=512

Замени sdb на свой sdd и попробуй.

surefire ★★★ ()
Последнее исправление: surefire (всего исправлений: 2)
Ответ на: комментарий от surefire

boot0af: error

Странно, но если писать загрузочный сектор сразу на носитель - это повреждает таблицу разделов... Сделал строго по инструкции и таблица разделов не была испорчена при записи. ФС для ESP-партиции: FAT32, в качестве boot-сектора партиции выбран: boot1f32.

Устанавливаю boot-сектора так:

MBR=/dev/sdd
PBR=${MBR}2

dd if="${MBR}" count=1 bs=512 of=origMBR
cp origMBR newMBR
dd if=boot0af of=newMBR bs=1 count=440 conv=notrunc
dd if=newMBR of="${MBR}" count=1 bs=512

dd if="${PBR}" count=1 bs=512 of=origbs
cp boot1f32 newbs
dd if=origbs of=newbs skip=3 seek=3 bs=1 count=87 conv=notrunc
dd if=newbs of="${PBR}" count=1 bs=512

sync
При попытке загрузиться получаю:
boot0af: error

zzdnx ★★ ()
Ответ на: anonymous, от zzdnx

Re: anonymous,

Подели диск и в диск D допустим это вторая часть диска раскатай img прямо из под линя и бут флаг поставь ему esp boot итд потом на компе сделай так будто ты пошел с флешки грузиться и найдешь это как устройство нового диска , так на случай чего не убьешь впереди стоящию загрузочную запись , а она может быть у тебя как и у большинства пока линукс не стабилен имеется , так сберегаешь нервы в случае чего

anonymous ()
Ответ на: anonymous, от zzdnx

Re: anonymous,

Ещё если вы программист итд то я предлагаю именно над этим дистром работать https://www.youtube.com/watch?v=l_flDx8PLWg без шуток и не на любителя так как я много испробовал линикс вейвов итд и что я обнаружил на уровне супер юзверя в отличии от закрытых глазок школо пользователя , то что на этой машине работает в обс студио даже хромокей , в влс плеере включается захват экрана , все приложения будут есть оболочку по дефолту серого цвета , эту идею уже многие Килиманджаро сперли и давай чеканить дистрибьюшинал , а я не популярен вот с этим бы разобраться вы же головы https://www.youtube.com/watch?v=iO6krMPWW3U Да у меня быдло кодерский подход я даже не программист , но маленько секу что нужен не только вид , но и работоспособность

anonymous ()
Ответ на: комментарий от surefire

Сделано!

Загрузочные сектора из Clover: Bootable_ISO не подходят, правильный источник Clover: Latest PKG.

Распаковывается Clover*.pkg под Linux при помощи 7z и довольно муторно: github: Clover linux-installer.sh.

После распаковки Clover*.pkg потребуются файлы boot0af, boot1f32 и x64/boot7, которые можно найти по пути: BiosBoot/usr/standalone/i386/

Установка загрузочных секторов описана внутри github: Clover linux-installer.sh и в моём сообщении выше по тексту.

Загрузчик boot (он же boot7) будет искать и выполнять EFI\CLOVER\CLOVERX64.efi. Команда strings не нашла таких слов в теле файла boot, так что с большой вероятностью патчить этот путь нужно в исходных текстах этого файла.

Условия, которым должна удовлетворять ESP-партиция (найдены экспериментально):

1. Размер ESP-партиции должен быть >=33 MB и обязательно в FAT32.
   (в противном случае загрузчик EFI просто не увидит эту партицию).
2. Должна быть одной на диске (boot0af - Active First)
3. Номер партиции может быть ЛЮБЫМ (от 1 до 128).
4. Положение партиции на диске может быть ЛЮБЫМ.

Благодарю surefire за помощь! Проблема решена.

zzdnx ★★ ()
Последнее исправление: zzdnx (всего исправлений: 1)