Задать вопрос
bensaratov
@bensaratov

Как обойти uefi при создании собственной операционной системы?

Подскажите пожалуйста, в современных материнских платах установлен обновленный BIOS который считает уже не бинарный файл загрузчика, а соответственно BOOTX64.EFI. Как можно обойти данный процесс считывания во время загрузки, при создании собственной ОС?

Примечание: ОС пишется на русскоязычном синтаксисе. Архитектура х86, защищенный 32 битный режим, при созданиии используется python. Сборка осуществляется напрямую в сырой бинарный машинный код процессора x86 (опкоды). Ос пишется исключительно для души.
  • Вопрос задан
  • 116 просмотров
Подписаться 1 Сложный 8 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик + ИИ
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 1
Daemon23RUS
@Daemon23RUS
Ос пишется исключительно для души.

Так напишите его себе (BOOTX64.EFI), там же не так и сложно
Hello world
#include <efilib.h>

EFI_STATUS EFIAPI
efi_main(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
{
    InitializeLib(ImageHandle, SystemTable);
    Print(L"Hello from bootx64.efi!\n");
    // Ну и тут ваш загрузчик
    return EFI_SUCCESS;
}
sudo apt install gnu-efi gcc-x86-64-linux-gnu
x86_64-w64-mingw32-gcc -I/usr/include/gnu-efi -I/usr/lib/gnu-efi/inc \
    -DEFI_FUNCTION_WRAPPER -mno-red-zone -fpic -ffreestanding \
    -c boot.c -o boot.o
x86_64-w64-mingw32-ld -nostdlib -znocombreloc -T /usr/lib/gnu-efi/gnuefi/elf_x86_64_efi.lds \
    -shared -Bsymbolic -L/usr/lib/gnu-efi/lib -o bootx64.efi boot.o -lefi -lgnuefi

Посмотрите на https://github.com/tianocore/edk2 - там все что Вам надо есть ...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
opium
@opium
Просто люблю качественно работать
Свой bootx64.efi можно и не писать: закидываешь в заголовок бинарника мультибут2 (магик 0xe85250d6 + address tag с load_addr + отдельный entry address tag с entry_addr, если бинарник не ELF), собираешь hybrid iso через grub-mkrescue с grub-efi-amd64-bin. UEFI всё равно запускает EFI-файл, просто это будет уже GRUB, а не твой код - и он сам дергает ExitBootServices и роняет тебя в чистый 32-битный protected mode без paging прямо на entry_addr. PE32+/efi-стаб можно не писать вообще.
p.s. сегменты после прыжка в непредсказуемом состоянии, сразу перегрузи свою GDT через lgdt и обнови CS дальним jmp.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы