Как установить последовательность загрузки драйверов dxe?

#uefi #edk2

#uefi #edk2

Вопрос:

Насколько я знаю, диспетчер DXE сначала загружает драйвер, указанный в файле Apriori. Затем загружаются другие зависимости, учитывающие. Я хочу загрузить утилиту либо до AMITSE, либо после. Если после AMITSE, то идея была CreateEvent(EVT_SIGNAL_EXIT_BOOT_SERVICES, …, MAINFCN, …), но в MAINFCN я не могу обрабатывать другие события. Возможно, лучшим решением было бы загрузить UEFI_APPLICATION при получении EVT_SIGNAL_EXIT_BOOT_SERVICES?

Основная проблема, которую я хочу решить, — это выполнение драйвера между экранами AMITSE (приглашение нажимать клавиши для входа в настройки и экран настройки).

Итак, я попытался:

  1. Поместить драйвер в другое место в томе — не решило проблему (драйвер загружается после экрана приглашения AMITSE).
  2. Введите TRUE в разделе [depex] — драйвер вообще не загружался.
  3. CreateEvent (..) — не удается обработать другие события (перехватить нажатие клавиши).

Не пробовал:

  1. Драйвер, который вызывал бы событие для загрузки приложения перед завершением загрузки служб.

Может быть, есть более простые способы?

Ответ №1:

Решается путем написания драйвера, который предлагает запустить приложение.

Идея создать событие и перехватить EVT_SIGNAL_EXIT_BOOT_SERVICES не сработала бы, потому что после этого события [фактически после ExitBootServices()] нескольким полям системной таблицы EFI должно быть присвоено значение NULL. К ним относятся ConsoleInHandle, ConIn, ConsoleOutHandle, ConOut, standardrorhandle, StdErr и BootServicesTable. [Спецификация UEFI, версия 2.8, страница 218-219]