для Multiboot2;Поведение по умолчанию в системах UEFI заключается в том, что загрузчик (например, GRUB) вызывает ExitBootServices()
, а ОС ничего не делает.Чтобы изменить это, вам нужно использовать специальные теги в заголовке мультизагрузки (см. 3.1.12 EFI boot services tag
в спецификации Multiboot2), чтобы сообщить загрузчику, что вы не хотите, чтобы он вызывал ExitBootServices()
.
для Multiboot1;не было поддержки UEFI.В этом случае;если загрузчик поддерживает запуск из UEFI, он должен вызвать ExitBootServices()
перед запуском ОС, соответствующей Multiboot1.Обратите внимание, что технически это нарушает спецификацию Multiboot1, которая гласит, что загрузчик должен оставить прошивку в пригодном для использования состоянии, но это невозможно (например, загрузчик не может сообщить ОС, где находится системная таблица EFI) и не может использоваться.на практике (например, ОС, разработанная для Multiboot1, может в любом случае принять «BIOS» и аварийно завершить работу, потому что ОС не может угадать, какая это была прошивка).
Для других поддерживаемых «специфичных для ОС» методовGRUB;некоторые вообще не могут использоваться в системах UEFI (например, старый де-факто стандарт «цепной загрузки» из BIOS), а другие (если они работают) будут соответствовать требованиям любой операционной системы, в которой они были созданы (например, «загрузка Linux»).протокол ", который разработчики Linux создали для Linux," протокол загрузки NetBSD ", который используется NetBSD и FreeBSD и т. д.).Я понятия не имею, что происходит для какого-либо конкретного случая ОС (это довольно неважно, если вы не работаете в ОС, которая его использует).
Примечание. Не стесняйтесь заменять каждое вхождение "ОС" на "hyper-visor "(или" kernel "или что-то еще, что GRUB может передавать управление).