Возврат к Grub из ядра в системе UEFI - PullRequest
2 голосов
/ 21 июня 2020

Я работаю над крошечным 64-битным ядром x86, совместимым с multiboot2, ядро ​​загружается и запускается Grub. Требование состоит в том, что после того, как ядро ​​завершит свою работу, ему необходимо перезапустить Grub. В системах, не основанных на UEFI, мы использовали для достижения этого, переводя процессор обратно в реальный режим, перескакивая на адрес 0x7c00.

В системах UEFI я пытаюсь понять, возможно ли что-то подобное, один из возможных подходов в моем разум состоит в том, чтобы перезагрузить Grub из ядра, используя процедуры EFI_IMAGE_LOAD и EFI_IMAGE_START в таблице служб загрузки EFI. Мое понимание внутреннего устройства UEFI очень ограничено, было бы очень полезно, если бы кто-нибудь мог подтвердить, будет ли этот подход работать или нет.

1 Ответ

1 голос
/ 21 июня 2020

Да, это сработает, если вы можете найти образ Grub. (Это будет сложнее, если, например, Grub был загружен по сети.)

Для этого вам не нужно разбираться во внутреннем устройстве UEFI. Достаточно понимания спецификации интерфейса UEFI.

Вы не должны вызывать ExitBootServices из вашего ядра, поэтому вы в некоторой степени ограничены в возможностях вашей ОС. Например, вы должны использовать UEFI для выделения памяти. Вы должны поддерживать сопоставление виртуального и физического адресного пространства 1 к 1. Ваша способность использовать многопроцессорность может быть несколько ограничена. См. Раздел 2.3.4 UEFI spe c.

...