Boot from efi file: Настройка UEFI-загрузчика. Самое краткое руководство в мире / Хабр
Содержание
Настройка UEFI-загрузчика. Самое краткое руководство в мире / Хабр
Как устроена загрузка современных ОС? Как при установке системы настроить загрузку посредством UEFI, не утонув в руководствах и ничего не сломав?
Я обещал «самое краткое руководство». Вот оно:
- Создаём на диске таблицу разделов GPT
- Создаём FAT32-раздел на пару сотен мегабайт
- Скачиваем из интернета любой UEFI-загрузчик
(нам нужен сам загрузчик, это один бинарный файл!) - Переименовываем и кладем этот файл на созданный раздел по адресу /EFI/Boot/bootx64.efi
- Создаём текстовый конфиг, кладем его там, где загрузчик ожидает его увидеть
(настройка и местоположение конфига зависят от конкретной реализации загрузчика, эта информация доступна в интернете) - После перезагрузки видим меню загрузчика
(Если на диске установлена Windows 8 или 10 — с большой вероятностью это руководство сокращается до пунктов 3 — 5. )
TL;DR не надо прописывать путь к загрузчику в новых загрузочных записях UEFI — надо файл загрузчика расположить по стандартному «пути по-умолчанию», где UEFI его найдет, и вместо загрузочного меню UEFI пользоваться меню загрузчика, которое гораздо проще и безопаснее настраивается
Как делать не надо
Есть, на самом-то деле, несколько способов настроить UEFI-загрузку. Я начну с описания других вариантов — чтобы было понятно, как (и почему) делать не надо. Если вы пришли за руководством — мотайте в самый низ.
Не надо лезть в NVRAM и трогать efivars
Наиболее «популярная» процедура установки загрузчика в систему такова: установщик ОС создаёт специальный раздел, на нём — структуру каталогов и размещает файлы загрузчика. После этого он с помощью особой утилиты (efibootmgr в linux, bcdedit в windows) взаимодействует с прошивкой UEFI-чипа, добавляя в неё загрузочную запись. В этой записи указывается путь к файлу загрузчика (начиная от корня файловой системы) и при необходимости — параметры. После этого в загрузочном меню компьютера появляется опция загрузки ОС. Для linux существует возможность вообще обойтись без загрузчика. В загрузочной записи указывается путь сразу к ядру вместе со всеми параметрами. Ядро должно быть скомпилировано с опцией EFISTUB (что давно является стандартом для большинства дистрибутивов), в этом случае оно содержит в себе заголовок «исполняемого файла EFI», позволяющий прошивке его запускать без внешнего загрузчика.
При старте системы, когда пользователь выбирает нужную ему загрузочную запись, прошивка UEFI сперва ищет на прописанном в этой записи диске особый EFI-раздел, обращается к файловой системе на этом разделе (обязательно FAT или FAT32), и запускает загрузчик. Загрузчик считывает из файла настроек свой конфиг, и либо грузит ОС, либо предоставляет загрузочное меню. Ничего не замечаете? Да, у нас два загрузочных меню — одно на уровне прошивки чипа UEFI, другое — на уровне загрузчика. В реальности о существовании второго пользователи могут даже не догадываться — если в меню всего один пункт, загрузчик Windows начинает его грузить без лишних вопросов. Увидеть экран с этим меню можно, если поставить вторую копию Windows или просто криво её переустановить.
Обычно для управления загрузочными записями руководства в интернете предлагают взаимодействовать с прошивкой UEFI. Есть аж пять основных вариантов, как это можно сделать: efibootmgr под linux, bcdedit в windows, какая-то софтина на «Маках», команда bcfg утилиты uefi shell (запускается из-под UEFI, «на голом железе» и без ОС, поскольку скомпилирована в том самом особом формате) и для особо качественных прошивок — графическими средствами UEFI (говоря популярным языком, «в настройках BIOS»).
За всеми вышенаписанными «многобуков» вы могли легко упустить такую мысль: пользователь, чтобы изменить настройки программной части (например, добавить параметр запуска ОС), вынужден перезаписывать flash-память микросхемы на плате. Есть ли тут подводные камни? О да! Windows иногда способна сделать из ноутбука кирпич, linux тоже, причём разными способами. Качество прошивок часто оставляет желать лучшего — стандарты UEFI либо реализованы криво, либо не реализованы вообще. По логике, прошивка обязана переживать полное удаление всех переменных efivars без последствий, не хранить в них критичных для себя данных и самостоятельно восстанавливать значения по-умолчанию — просто потому что пользователь имеет к ним доступ, и вероятность их полного удаления далека от нуля. Я лично в процессе экспериментов неоднократно (к счастью, обратимо) «кирпичил» свой Lenovo — из загрузочного меню исчезали все пункты, включая опцию «зайти в настройки».
Работа с загрузочными записями UEFI — тоже не сахар. К примеру, утилита efibootmgr не имеет опции «редактировать существующую запись». Если ты хочешь немного изменить параметр ядра — ты удаляешь запись целиком и добавляешь её снова, уже измененную. При этом строка содержит в себе двойные и одинарные кавычки, а также прямые и обратные слеши в не особо очевидном порядке. Когда я наконец заставил эту магию работать — я сохранил её в виде bash-скриптов, которые до сих пор валяются у меня в корневой ФС:
efibootmgr -c -L "Archlinux (debug)" -l '\EFI\archlinux\vmlinuz-linux' -u "root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\initramfs-linux. img systemd.log_level=debug systemd.log_target=kmsg log_buf_len=1M enforcing=0"
Не надо использовать GRUB
Это чёртов мастодонт, 90% функциональности которого предназначено для дисков с MBR. Для настройки необходимо отредактировать ряд файлов, после чего выполнить команду генерации конфига. На выходе получается огромная малопонятная нормальному человеку простыня. В составе — гора исполняемых файлов. Ставится командой, которую просто так из головы не возьмешь — надо обязательно лезть в документацию
grub-install --target=x86_64-efi --efi-directory=esp_mount --bootloader-id=grub
Для сравнения — самый простенький UEFI-bootloader, который есть в составе пакета systemd, ставится командой
bootctl install --path=/boot
Эта команда делает ровно две вещи: копирует исполняемый файл загрузчика на EFI-раздел и добавляет свою загрузочную запись в прошивку. А конфиг для неё занимает ровно СЕМЬ строчек.
«Самое краткое руководство» — чуть более подробно
Загрузочное меню надо реализовывать на уровне загрузчика — править текстовые конфиги гораздо проще и безопасней.
Загрузочная запись нам не нужна — дело в том, что при выставлении в настройках BIOS загрузки с диска прошивка UEFI сначала ищет на нём EFI-раздел, а затем пытается исполнить файл по строго фиксированному адресу на этом разделе: /EFI/Boot/BOOTX64.EFI
Что такое «EFI-раздел»? В теории, он должен иметь особый тип «EFI System» (ef00). На практике, годится первый раздел на GPT-диске, отформатированный в FAT32 и имеющий достаточно места, чтобы разместить загрузчик и вспомогательные файлы (если есть).
Пункт 3: «Скачиваем из интернета любой UEFI-загрузчик». Что это значит? Загрузчик — это просто исполняемый файл определенного формата, к которому в комплекте идет конфиг. К примеру, если у вас есть под рукой установленный пакет с systemd — файл загрузчика можно найти по адресу /usr/lib/systemd/boot/efi/systemd-bootx64.efi, переименовать его в bootx64.efi и скопировать в /EFI/Boot/ на EFI-разделе. Нет под рукой systemd? Скачайте архив с сайта Archlinux. Или с репозитария Ubuntu. Или Debian. Есть под рукой система с Windows? Возьмите виндовый загрузчик оттуда, тоже сгодится )) Если сумеете настроить, я честно говоря не пробовал.
Пункт 4: «Настроить конфиг». Как и обычная программа, когда загрузчик запускается — он ожидает найти по определенным путям файлы конфигурации. Обычно эту информацию легко найти в интернете. Для загрузчика systemd-boot нам необходимо в корне EFI-раздела создать каталог «loader», а в нём файл «loader.conf» с тремя строчками (привожу свои):
default archlinux timeout 10 editor 1
Параметр editor отвечает за возможность отредактировать пункт загрузочного меню перед запуском.
Рядом с loader.conf необходимо создать каталог entries — один файл в нём будет отвечать за одну загрузочную запись в boot-меню. У меня там один файл arch.conf с таким содержанием:
title Arch Linux linux /efi/archlinux/vmlinuz-linux initrd /efi/archlinux/initramfs-linux. img options root=/dev/mapper/vg1-lvroot rw initrd=\EFI\archlinux\intel-ucode.img
Я не упомянул, но довольно очевидно — ядро и initramfs должны лежать в одной файловой системе с загрузчиком, то есть на EFI-разделе. Пути к ним в конфигах отсчитываются от корня этой ФС.
Другие загрузчики
systemd-boot очень простой и предоставляет спартанского вида чёрно-белое меню. Есть варианты красивей, если душа просит красоты.
rEFind — очень красивый загрузчик. Скачать можно тут в виде deb-пакета. Использую на своём ноуте. Умеет создавать загрузочное меню автоматически, без конфига — просто сканируя файлы.
Clover. Позволяет выставлять нативное разрешение экрана, имеет поддержку мыши на экране загрузки, разные темы оформления. Дефолтная тема ужасна, конфиг в виде xml нечитаем, настроить не смог.
Различные неочевидные последствия
Вы можете легко попробовать эту схему в работе. Берёте USB-флешку, форматируете в таблицу разделов GPT, создаете FAT-раздел и копируете туда загрузчик. Комп сможет с неё стартовать.
Если просто скопировать на такую флешку boot-раздел установленного linux — система будет спокойно загружаться с флешки, не видя разницы.
Efibootmgr — Gentoo Wiki
Other languages:
- Deutsch
- English
- español
- italiano
- русский
- 中文(中国大陆)
- 日本語
- 한국어
efibootmgr is a tool for managing UEFI boot entries.
It is not a bootloader. It is a tool that interacts with the EFI firmware of the system, which itself is acting as a boot manager. Using efibootmgr boot entries can be created, reshuffled and removed.
Contents
- 1 Installation
- 1.1 Kernel
- 1.2 Emerge
- 2 Configuration
- 2.1 EFI vars
- 3 Preconditions
- 4 Usage
- 4.1 Listing boot entries
- 4.2 Creating a boot entry
- 4.3 Deleting a boot entry
- 5 Removal
- 5.1 Unmerge
- 6 See also
- 7 References
Installation
Kernel
CONFIG_EFIVAR_FS support needs to be enabled:
KERNEL Enable EFI Variable filesystem support
Device Drivers ---> Firmware Drivers ---> [ ] Disable EFI runtime services support by default File systems ---> Pseudo filesystems ---> <*> EFI Variable filesystem
Note
It is not possible to use efivarfs without the EFI runtime services, which (in case they have been disabled by default, i. e. CONFIG_EFI_DISABLE_RUNTIME=y
) can also be enabled by the kernel command-line option efi=runtime.
Emerge
The sys-boot/efibootmgr package does not have any USE flags. All that is needed is to install it:
root #
emerge --ask sys-boot/efibootmgr
Configuration
EFI vars
In order to successfully use efibootmgr the EFI variables filesystem must be accessible. This requires that the system has been booted in EFI mode (and not through the firmware’s MBR mode) as otherwise the EFI variables themselves cannot be accessed. If the system is in MBR mode, reboot and do what is necessary in order to tell the system firmware to boot in EFI mode. Usually this involved either changing an option in the firmware’s settings or selecting an EFI boot entry in the system’s boot menu.
When the system is in EFI mode, run the following command to check for the existence of efivarfs:
root #
mount | grep efivars
efivarfs on /sys/firmware/efi/efivars type efivarfs (ro,relatime)
It is mounted read-only (ro) through the sysfs init script), so it needs to be remounted read-write (rw) manually using the following command:
root #
mount -o remount,rw -t efivarfs efivarfs /sys/firmware/efi/efivars
Preconditions
If an EFI System Partition (ESP) does not exist, one needs to be created, see EFI System Partition
Usage
Listing boot entries
To list the current boot entries by using the --verbose
or -v
option:
root #
efibootmgr -v
BootCurrent: 0002 Timeout: 3 seconds BootOrder: 0003,0003,0002,0000,0004 Boot0000* CD/DVD Drive BIOS(3,0,00) Boot0001* Hard Drive BIOS(2,0,00) Boot0002* Gentoo HD(1,800,61800,6d98f360-cb3e-4727-8fed-5ce0c040365d)File(\EFI\boot\bootx64. efi) Boot0003* Hard Drive BIOS(2,0,00)P0: ST1500DM003-9YN16G
Creating a boot entry
To create an EFI boot entry, a couple of arguments are passed to efibootmgr:
--create
or-c
to create a new entry;--part
or-p
followed by the partition number on which the EFI System Partition is hosted;--disk
or-d
followed by the disk on which the EFI System Partition is hosted;--label
or-L
followed by the label to use as the boot entry;--loader
or-l
followed by the path of the EFI image to boot
Important
The path of the EFI image to boot must use \ (backslash) instead of / (forward slash) as path separator.
Important
Additionally, if the ESP was already created by another OS, it might be named differently than /boot/efi. If an ESP was created by another OS, begin the EFI Boot entry using this directory name, which immediately follows /boot.
If this is the folder structure:
root #
tree /boot/ -L 3
/boot/ └── EFI ├── Grub │ └── grubx64.efi └── Gentoo └── bzImage-4.14.83.efi
then the loader paths will be:
root #
efibootmgr -c -L "Grub" -l '\EFI\Grub\grubx64.efi'
root #
efibootmgr -c -L "Gentoo" -l '\EFI\Gentoo\bzImage-4.14.83.efi'
For instance:
root #
efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l '\efi\boot\bootx64.efi'
It is also possible to add parameters — maybe not supported by all UEFI implementations[1] — to the kernel’s command line:
root #
efibootmgr -c -d /dev/sda -p 2 -L "Gentoo" -l '\efi\boot\bootx64. efi' -u 'root=/dev/sda3 initrd=\efi\boot\initramfs.img quiet'
Optionally, additional kernels can be installed and made known to the UEFI firmware. This is especially useful when wanting to test more kernels or to dual-boot with another operating system. These will be shown in the boot selection prompt, normally after a keyboard hotkey is pressed at the right time during system initialization. The latest added entry always gets highest boot priority, so it will be default. If the hotkey combination is unknown, search for official documentation from the computer manufacturer. This information is usually not difficult to find.
Deleting a boot entry
Before deleting an entry, first figure out what ID the entry has.
To delete the Gentoo entry as shown above (which has Boot0002 as the identifier), ask efibootmgr to delete the entry with id 2, passing the arguments --bootnum
or -b
with the identifier, and --delete-bootnum
or -B
to delete the entry:
root #
efibootmgr -b 2 -B
Removal
Unmerge
root #
emerge --ask --depclean --verbose sys-boot/efibootmgr
See also
- Refind — a boot manager for EFI and UEFI platforms forked from and successor to rEFIt.
- EFI stub — provides instructions on configuring and installing unsigned kernels in the EFI System Partition (ESP) of a computer running in EFI mode.
- Alternative 2: efibootmgr in the Gentoo Handbook
References
- ↑ At least for Dell EFI firmwares, a workaround was implemented in kernel 5.10: https://lkml.org/lkml/2020/9/18/228
windows 10 — создать загрузочные файлы EFI
спросил
Изменено
1 год, 1 месяц назад
Просмотрено
2k раз
После того, как я удалил дополнительный жесткий диск из своего ноутбука, он больше не загружается в Windows 10. Похоже, мне нужно как-то указать вариант загрузки BIOS UEFI. Но я не могу найти файлы *.EFI на своем основном системном диске. Где они должны располагаться? Могу ли я как-то создать их для моего диска с Windows 10?
- windows-10
- биос
- uefi
2
Если ваша система настроена на загрузку Windows в стиле UEFI, то на диске с разделами GPT должен быть раздел, отформатированный как FAT32, и с GUID типа раздела, который помечает его как системный раздел EFI или сокращенно ESP . Обычно он должен иметь размер от 100 до 260 МБ. Раздел обычно скрыт и не имеет буквы диска, поэтому его существование может остаться незамеченным, если вы специально не ищете его в «Управлении дисками».
Если вы загружаетесь с установочного носителя Windows 10, на том же экране, что и кнопка «Установить сейчас», есть опция «Восстановить компьютер», которая запускает обычный процесс установки. Он должен обнаружить наличие системного раздела Windows и попытаться восстановить загрузчик UEFI.
Но будьте осторожны: для успешного восстановления системы в стиле UEFI программа установки должна быть загружена также в стиле UEFI . Если процесс восстановления не удался, вам, возможно, придется использовать некоторые загрузочные инструменты для создания разделов, чтобы создать пустой раздел подходящего размера и сначала пометить его как раздел ESP, а затем повторно запустить процесс восстановления.
Большинство файлов загрузчика Windows в разделе ESP являются общими и могут быть просто скопированы из другой установки. Но есть один файл с именем BCD
, который содержит информацию, относящуюся к вашей установке, и его необходимо восстановить в случае потери. Процесс восстановления обычно может сделать это автоматически.
Windows связывает выбор стиля загрузки с выбором типа таблицы разделов: если ваш системный диск использует разметку GPT, то вы должны загрузиться в стиле UEFI; если ваш системный диск использует устаревшее разделение MBR, вы должны загрузить устаревший стиль MBR.
Файлы *.EFI
находятся в «системном разделе EFI», который (почти всегда) имеет формат FAT32 и поэтому должен быть отделен от раздела Windows «C:» в формате NTFS.
Возможно, когда вы установили Windows, она обнаружила существующий системный раздел EFI на «дополнительном» жестком диске и просто поместила туда все файлы — так что ваш «основной» диск оказался , а не , имеющим системный раздел EFI вообще.
Вы можете создать его с помощью любого инструмента для создания разделов, если вы установите правильный «GUID типа раздела» (например, в DISKPART используйте создать раздел efi size=100
). После этого используйте команду bcdboot
с установочного компакт-диска или USB-накопителя Windows, чтобы скопировать свежие файлы *.EFI из раздела Windows и создать конфигурацию «BCD», используемую загрузчиком Windows.
Более подробно процесс описан здесь:
- Суперпользователь — Как создать из 0 загрузочный раздел диска для windows 10?
- Microsoft — производство — разделы жесткого диска на основе UEFI/GPT
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie
.
В чем разница между «Загрузка с BIOS» и «Загрузка с UEFI»
- Как мы все знаем, BIOS является важной частью для доступа к параметрам загрузки. Так что теперь UEFI будет делать это? Как?
BIOS загружается, читая первый сектор на жестком диске и выполняя его; этот загрузочный сектор, в свою очередь, находит и запускает дополнительный код. Система BIOS очень ограничена из-за нехватки места и из-за того, что BIOS выполняет 16-разрядный код, тогда как современные компьютеры используют 32-разрядные или 64-разрядные процессоры. Напротив, EFI (или UEFI, который представляет собой просто EFI 2.x) загружается путем загрузки программных файлов EFI (с расширениями имени файла .efi
) из раздела на жестком диске, известного как системный раздел EFI (ESP). Эти программы загрузчика EFI могут использовать службы загрузки EFI для таких вещей, как чтение файлов с жесткого диска.
С практической точки зрения, если вы используете операционную систему, такую как Linux, которая имеет сложные загрузчики в режиме BIOS, загрузка в режиме EFI, вероятно, будет похожа на загрузку в режиме BIOS, поскольку GRUB 2 (самый популярный режим BIOS загрузчик для Linux) был портирован для работы в EFI, и многие дистрибутивы Linux по умолчанию устанавливают GRUB 2 в системах EFI. OTOH, вы можете заменить или дополнить GRUB 2 другими загрузчиками EFI. Действительно, само ядро Linux может быть загрузчиком EFI; для этого был добавлен код с ядром 3.3.0. При таком использовании EFI сам загружает и запускает ядро Linux, или вы можете использовать сторонний менеджер загрузки, такой как rEFInd или gummiboot, чтобы выбрать, какую ОС или ядро загружать.
- Откуда мне знать, что я загружаюсь с UEFI, а не с BIOS?
Как говорит Рут, в пользовательском интерфейсе прошивки есть подсказки; однако они ненадежны и варьируются от одного компьютера к другому. Единственный способ убедиться в этом — проверить, как загружается компьютер. В Linux, например, наличие каталога с именем /sys/firmware/efi
является диагностическим. Если он присутствует, вы загрузились в режиме EFI; если его нет, то у вас наверное загружается в режиме BIOS. (Однако при некоторых обстоятельствах этот каталог может отсутствовать при загрузке в режиме EFI.) Вывод dmesg
, относящийся к EFI, также является диагностическим при загрузке в режиме EFI. В Windows таблица разделов загрузочного диска является диагностической; если это GPT, вы загрузились в режиме EFI, а если это MBR, вы загрузились в режиме BIOS.
- Так чем реально отличается «загрузка с BIOS» и «загрузка с UEFI»?
EFI может быть быстрее, но это не точно. Самая большая разница в скорости заключается в аппаратной инициализации в начале процесса. В моих системах это часть общего времени загрузки, поэтому сокращение времени аппаратной инициализации, хотя и хорошо, не имеет большого значения для всех и . В конце концов, я не перезагружаюсь каждые десять минут.
UEFI поддерживает функцию Secure Boot , предназначенную, как следует из названия, для повышения безопасности. Для этого требуется цифровая «подпись» загрузчиков, что, в свою очередь, требует подписи ядер и так далее по цепочке. Это должно усложнить авторам вредоносных программ вставку их кода в предзагрузочный процесс, тем самым повысив безопасность. Звучит хорошо, но это также усложняет конфигурации с двойной загрузкой, поскольку такой код, как GRUB и ядро Linux, должен быть подписан. Основные поставщики дистрибутивов Linux работают над тем, чтобы сделать эти требования менее обременительными для обычных пользователей Linux, и у них уже есть готовые предварительные материалы. Однако на данный момент отключение безопасной загрузки — самый простой способ справиться с этим. Это практическая проблема в основном для совершенно новых компьютеров, которые поставляются с Windows 8, поскольку Microsoft требует, чтобы безопасная загрузка была включена, чтобы получить сертификацию Windows 8. Некоторые люди путают UEFI и безопасную загрузку (последняя является лишь одной из функций первой), но она заслуживает упоминания как разница между BIOS и UEFI, поскольку вызывает некоторые проблемы на новых компьютерах с Windows 8. Если у вас более старая система или вы достаточно знакомы с утилитами настройки прошивки, чтобы отключить безопасную загрузку, это не должно быть реальной проблемой.
Microsoft привязывает тип таблицы разделов загрузочного диска к типу прошивки (MBR к BIOS, GPT к UEFI). Поскольку MBR достигает 2 ТБ (при стандартных размерах секторов), это означает, что UEFI является практической необходимостью для загрузки Windows на дисках размером более 2 ТБ. Однако вы по-прежнему можете использовать такие большие диски в качестве дисков данных под Windows, и вы можете загружать некоторые ОС, не принадлежащие Microsoft (такие как Linux и FreeBSD), с больших дисков, используя GPT в BIOS.
С практической точки зрения, если вы обеспокоены или заинтересованы в UEFI, самая большая проблема заключается просто в том, что UEFI достаточно нов, и его поддержка немного неравномерна, особенно в некоторых старых и более экзотических ОС. UEFI сам по себе является достаточно новым, поэтому большинство его реализаций содержат ошибки, а те, которые не настолько различаются между собой, что может быть трудно описать вещи в целом. Таким образом, использование UEFI может быть проблемой. ОТО, UEFI это будущее. У него есть некоторые скромные преимущества, некоторые из которых со временем станут более важными (например, ограничение в 2 ТБ на загрузочный диск Windows). Переключение на загрузку UEFI изменит некоторые детали процесса загрузки, но общий опыт работы с компьютером не сильно изменится, как только вы преодолеете любые проблемы с загрузкой, с которыми вы можете столкнуться.
РЕДАКТИРОВАТЬ:
Не могли бы вы расширить настройки OpRom (Option Rom). Кажется, они позволяют вам выбирать между загрузкой UEFI или загрузкой «Legacy», и они применяются к видеокарте, сетевой карте и различным другим устройствам PCI.
Многие сменные карты содержат встроенное ПО, взаимодействующее с встроенным ПО на материнской плате. Два типа прошивок должны уметь «общаться», если прошивка карты должна приносить пользу. Это необходимо для использования карты перед загрузкой ОС — например, для отображения параметров прошивки или меню менеджера загрузки на видеокарте, для загрузки по сети через сетевую карту или для загрузки с жесткого диска, подключенного к плата контроллера диска.
Как и в случае с загрузчиками, код в прошивке подключаемого устройства написан для взаимодействия либо с BIOS, либо с EFI (хотя подключаемые карты могут поддерживать и то, и другое, если я не ошибаюсь). Как вы заметили, некоторые EFI предоставляют параметры для включения или отключения этой поддержки на мелкозернистой основе. В некоторых случаях EFI может использовать поддержку режима BIOS карты, чтобы позволить ей работать в режиме EFI, «переводя» вызовы. (Например, это характерно для видеокарт; часто можно подключить старую видеокарту, в прошивке которой нет ничего, кроме поддержки BIOS, и по-прежнему использовать ее для загрузки в режиме EFI.