Автоматический запуск приложения EFI при загрузке

Я могу создать и вручную выполнить приложение EFI в среде UEFI. Но я бы хотел, чтобы мое приложение выполнялось автоматически во время загрузки.

Есть ли способ сказать загрузчику сделать это или мне нужно включить мое приложение в драйвер, чтобы оно автоматически выполнялось? Может быть, какая-то запись в файле FDF, DEC, DSC или INF мне не хватает?


person PaulH    schedule 25.03.2014    source источник


Ответы (2)


Вы можете добавить файл сценария startup.nsh на загрузочный диск UEFI Shell, который вызывает ваше приложение.

Следующая ссылка может служить удобным справочником по работе со сценариями в оболочке: Оболочки UEFI и Скрипты. Посмотрите раздел 3 (Сценарии оболочки EFI).

Однако, если вы на самом деле создаете свою собственную прошивку, вы также можете посмотреть на создание загрузочного образа EFI и установить параметр загрузки по умолчанию для этого двоичного файла. Это наиболее полезно, если вы включаете двоичный файл как часть вашего ПЗУ, но может быть немного сложно настроить файловую систему так, чтобы она рассматривалась как обычный вариант загрузки.

Кроме того, если у вас есть полный доступ к источнику прошивки, вы также можете просто загрузить и вызвать свой двоичный файл из драйвера BDS. Я не рекомендую этот путь, если вы специально не стремитесь создать автономное устройство, которое никогда не загрузит никакой другой образ.

person Rose Lynn Embry    schedule 26.03.2014
comment
Этот ответ потрясающий. Пожалуйста, Николай, не могли бы вы рассказать мне больше о втором и третьем варианте? - person Davide Guerri; 14.02.2016

Ответ @NicholasEmbry содержит почти все, что нужно, но я хотел бы прояснить некоторые вещи и добавить последние улучшения в этой области.

Добавление образа приложения UEFI в вариант загрузки на самом деле является наиболее известным методом, когда у вас нет исходного кода вашей прошивки, что является типичной ситуацией. Вам не нужно создавать какой-либо специальный загрузочный образ, это должен быть простой образ приложения UEFI, что означает, что ваш INF должен содержать:

MODULE_TYPE           = UEFI_APPLICATION

Этот параметр предназначен не только для дополнительных ПЗУ, но и для всех читаемых носителей UEFI. Например, вы можете создать раздел FAT32 на вашем хранилище (независимо от того, USB это, жесткий диск, твердотельный накопитель и т. д., он просто должен быть доступен для чтения прошивкой) и поместить образ приложения на этот раздел. Затем загрузитесь в оболочку UEFI и используйте команду bcfg, чтобы изменить порядок загрузки.

Команда bcfg может быть заблокирована вашим поставщиком BIOS. В этом случае следуйте процедуре из этого сообщения. Это загрузка rEFInd с USB-накопителя. rEFInd содержит bcfg инструмент и дает вам возможность его использовать.

Как использовать bcfg ?

Все описано в справке help bcfg -b. -b — пейджер UEFI. Для тех, кто любит ярлыки, эта команда отобразит все параметры загрузки в системе:

bcfg boot dump -v

Вы можете добавить свое приложение с помощью команды:

bcfg boot add <boot_pos> <path_to_uefi_image> <boot_order_name>

<boot_pos> - позиция в порядке загрузки. Обратите внимание, что обычно вы хотите поместить свое приложение перед ОС. Если перед вашей ОС нет номера варианта бесплатной загрузки, вы, конечно, можете переместить свою ОС на один параметр вниз bcfg boot mv <old_pos> <new_pos>, а затем добавить образ своего приложения между ними.

<path_to_uefi_image> - путь к вашему образу UEFI. Это читаемый путь UEFI, т.е. fs0:\foobar.efi

<boot_order_name> - так ваше приложение будет видно в меню загрузки BIOS

person Piotr Król    schedule 11.01.2016