Запуск приложения EFI автоматически при загрузке
Я могу создать и вручную выполнить приложение EFI в среде UEFI. Но я хотел бы, чтобы мое приложение выполнялось автоматически во время загрузки.
Есть ли способ сказать загрузчику сделать это или мне нужно превратить мое приложение в драйвер, чтобы оно автоматически выполнялось? Есть ли какая-то запись в файле FDF, DEC, DSC или INF, который мне не хватает?
2 ответа
Вы можете добавить файл сценария startup.nsh на загрузочный диск оболочки UEFI, который вызывает ваше приложение.
Следующая ссылка должна служить удобным справочником для работы со скриптами в оболочке: UEFI Shells и Scripting. Посмотрите на раздел 3 (сценарии оболочки EFI) специально.
Однако, если вы на самом деле создаете свою собственную прошивку, вы также можете взглянуть на создание загрузочного образа EFI и установить для этого параметра загрузки по умолчанию этот двоичный файл. Это наиболее полезно, если вы включаете двоичный файл как часть вашего ПЗУ, но может быть немного сложно настроить файловую систему так, чтобы она рассматривалась как обычная опция загрузки.
Кроме того, если у вас есть полный доступ к источнику прошивки, вы также можете просто загрузить и вызвать свой двоичный файл из драйвера BDS. Я не рекомендую этот маршрут, если только вы не собираетесь создавать отдельное устройство, которое никогда не загрузит другой образ.
Ответ @NicholasEmbry содержит почти все, что нужно, но я хотел бы уточнить некоторые вещи и добавить недавние улучшения в этой области.
Добавление образа приложения UEFI в опцию загрузки является наиболее известным способом, когда у вас нет исходного кода встроенного программного обеспечения, что является типичной ситуацией. Вам не нужно создавать какой-либо специальный загрузочный образ, это должен быть простой образ приложения UEFI, что означает, что ваш INF
должен содержать:
MODULE_TYPE = UEFI_APPLICATION
Эта опция предназначена не только для дополнительных ПЗУ, но и для всех читаемых носителей UEFI. Например, вы можете создать FAT32
раздел на вашем хранилище (независимо от того, USB это, HDD, SSD и т. д. он просто должен быть читаемым с помощью прошивки) и поместите образ приложения в этот раздел. Затем загрузитесь в UEFI Shell и используйте bcfg
Команда, чтобы повлиять на ваш порядок загрузки.
bcfg
Команда может быть заблокирована вашим поставщиком BIOS. В этой ситуации, пожалуйста, следуйте процедуре из этого поста. Это загрузка с помощью 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