Interested Article - Extensible Firmware Interface

Логотип UEFI
Позиция EFI в стеке программного обеспечения

Extensible Firmware Interface ( EFI ) (с англ. — «интерфейс расширяемой прошивки ») — интерфейс между операционной системой и микропрограммами , управляющими низкоуровневыми функциями оборудования, его основное предназначение: корректно инициализировать оборудование при включении системы и передать управление загрузчику или непосредственно ядру операционной системы. EFI предназначен для замены BIOS — интерфейса, который традиционно используется всеми IBM PC-совместимыми персональными компьютерами. Первая спецификация EFI была разработана Intel , позднее от первого названия отказались и последняя версия стандарта носит название Unified Extensible Firmware Interface ( UEFI ). В настоящее время разработкой UEFI занимается .

История

Изначально EFI создавалась для первых систем Intel-HP Itanium в середине 1990-х годов. Ограничения PC-BIOS (16-битный исполняемый код, адресуемая память 1 Мбайт, аппаратные ограничения IBM PC/AT и т. д.) были, очевидно, недопустимы в больших серверных платформах, для использования в которых планировался Itanium. Изначальное название — Intel Boot Initiative ( Загрузочная инициатива Intel ), позже было переименовано в EFI :

  • спецификация EFI 1.02 была выпущена Intel 12 декабря 2000 года (версия 1.01 имела юридические проблемы, связанные с торговой маркой, и была быстро изъята);
  • спецификация EFI 1.10 была выпущена 1 декабря 2002 года. Она включала модель драйвера EFI, а также несколько незначительных улучшений по сравнению с версией 1.02;
  • в 2005 году Intel внесла эту спецификацию в UEFI Forum, который теперь ответственен за развитие и продвижение EFI . EFI был переименован в Unified EFI (UEFI), чтобы отразить это изменение, при этом большая часть документации использует оба термина;
  • UEFI Forum выпустил спецификацию 2.1 UEFI 7 января 2007 года. Она добавила и улучшила криптографию, установление подлинности сети и архитектуру пользовательского интерфейса ;
  • версия 2.3.1 была принята в апреле 2011 года;
  • версия 2.4 была принята в июле 2013 года;
  • версия 2.5 была принята в апреле 2015 года.
  • версия 2.6 была принята в январе 2016 года.

Содержание

Интерфейс, определённый спецификацией EFI, включает таблицы данных, содержащие информацию о платформе, загрузочные и runtime-сервисы, которые доступны для загрузчика операционной системы (ОС) и самой ОС. Некоторые существующие расширения BIOS , типа ACPI и SMBIOS , также присутствуют в EFI, поскольку не требуют 16-разрядного runtime-интерфейса.

Сервисы

EFI определяет «загрузочные сервисы», которые включают поддержку текстовой и графической консоли на различных устройствах, шин, блоков и файловых сервисов, а также runtime-сервисы, например: дата, время и энергонезависимая память.

Драйверы устройств

В дополнение к стандартным, архитектурно-зависимым драйверам устройств, спецификация EFI предусматривает независимую от платформы среду драйверов, названную EFI Byte Code (EBC). От системного встраиваемого ПО ( firmware ) спецификацией UEFI требуется иметь интерпретатор для любых образов EBC, которые загружены или могут быть загружены в среду. В этом смысле EBC подобен Open Firmware , независимому от аппаратных средств встраиваемому ПО, используемому в компьютерах Apple Macintosh и Sun Microsystems SPARC .

Некоторые архитектурно-зависимые (non-EBC) типы драйверов EFI могут иметь интерфейсы для использования ОС. Это позволяет ОС использовать EFI для базовой поддержки графики и сети до загрузки драйверов, определённых в ОС.

Менеджер загрузки

Менеджер загрузки EFI используется для выбора и загрузки ОС, исключая потребность в специализированном механизме загрузки (загрузчик ОС является приложением EFI).

Поддержка дисков

В дополнение к стандартной схеме разметки дисков MBR EFI имеет поддержку GPT , которая свободна от характерных для MBR ограничений. Спецификация EFI не включает описания для файловых систем, однако реализации EFI обычно поддерживают FAT32 как файловую систему .

Оболочка EFI

Сообщество EFI создало открытую среду оболочки ( англ. EFI shell) . Пользователь для выполнения некоторых операций может загрузить оболочку EFI вместо того, чтобы загружать ОС. Оболочка — приложение EFI; она может постоянно находиться в ПЗУ платформы или на устройстве, драйверы для которого находятся в ПЗУ.

Оболочка может использоваться для выполнения других приложений EFI, таких как настройка, установка ОС, диагностика, утилиты конфигурации и обновления прошивок. Она также может использоваться, чтобы проиграть CD- или DVD-носители, не загружая ОС, при условии, что приложения EFI поддерживают эти возможности. Команды оболочки EFI также позволяют копировать или перемещать файлы и каталоги в поддерживаемых файловых системах, загружать и выгружать драйверы. Также оболочкой может использоваться полный стек TCP/IP.

Оболочка EFI поддерживает сценарии в виде файлов .nsh , аналогичных пакетным файлам в DOS . При этом файл сценария с именем startup.nsh исполняется при загрузке автоматически.

Названия команд оболочки часто наследуются от интерпретаторов командной строки ( COMMAND.COM или Unix shell ). Оболочка EFI может рассматриваться как функциональная замена интерпретатора командной строки и текстового интерфейса BIOS.

Расширения

Расширения EFI могут быть загружены с практически любого энергонезависимого устройства хранения данных, присоединённого к компьютеру. Например, OEM-производитель может продать систему с разделом EFI на жёстком диске, который добавил бы дополнительные функции к встраиваемому ПО EFI, размещённому в ПЗУ системной платы.

Реализация

Intel Platform Innovation Framework для EFI

Intel Platform Innovation Framework для EFI ( рус. инновационный инструментарий Intel) — ряд спецификаций, разработанных Intel совместно с EFI. Если EFI определяет интерфейс между ОС и firmware, то инструментарий определяет структуры, используемые для создания встраиваемого ПО на более низком уровне, чем интерфейс между ОС и firmware.

В частности, инструментарий поддерживает все шаги, необходимые для инициализации компьютера после включения. Эти внутренние возможности встраиваемого ПО не определены как часть спецификации EFI, но включены в спецификацию инициализации платформы ( Platform Initialization Specification ), разработанную UEFI . Инструментарий был проверен на платформах: Intel XScale , Intel Itanium и IA-32 .

Совместимость с ОС для платформы x86, требующей для работы интерфейса «legacy BIOS», достигается с помощью модуля поддержки совместимости (CSM). CSM включает в себя 16-битную программу (CSM16), реализуемую изготовителем BIOS, и слой, связывающий CSM16 с инструментарием.

Intel разработал эталонную реализацию для инструментария под кодовым названием «Tiano». Tiano — полная реализация встраиваемого ПО, обеспечивающая поддержку EFI. Tiano не включает в себя 16-битную часть CSM, но обеспечивает интерфейсы, требуемые для дополнений, реализуемых производителями BIOS. Intel не предоставляет полной реализации Tiano для конечных пользователей.

Часть Tiano была выпущена в виде исходных текстов TianoCore проекта как EFI Developer Kit (EDK) . Эта реализация включает в себя EFI и некоторый код инициализации аппаратных средств, но не раскрывает полностью особенностей непосредственно встраиваемого ПО. Несколько лицензий использовались для этого кода, включая BSD license и Eclipse Public License .

Продукты, основанные на EFI, UEFI и спецификациях инструментария, доступны через независимых производителей BIOS, например, American Megatrends (AMI) и . Некоторые реализации производителей полностью основаны на Tiano, в то время как другие соответствуют спецификациям, но не основываются на эталонной реализации Intel .

Платформы, использующие EFI или инструментарий

Выпущенные в 2000 году Intel системы на платформе Itanium поддерживали EFI 1.02. Выпущенные в 2002 году Hewlett-Packard системы на платформе Itanium 2 поддерживали EFI 1.10; они могли загружать Windows , Linux , FreeBSD и HP-UX . Все системы Itanium или Itanium 2, которые выпускаются с EFI-совместимым встраиваемым ПО, должны соответствовать спецификации .

В ноябре 2003 года представила Gateway 610 Media Center — первую x86 компьютерную систему на основе Windows, использующую встраиваемое ПО, основанное на инструментарии InsydeH2O от Insyde Software. Поддержка BIOS была реализована с помощью модуля поддержки совместимости (CSM) для загрузки Windows.

В январе 2006 года Apple Inc. представила первые компьютеры Macintosh на платформе Intel . Эти системы используют EFI и инструментарий вместо Open Firmware , который использовался на предыдущих системах платформы PowerPC .

5 апреля 2006 года Apple выпустила пакет Boot Camp , который позволяет создать диск с драйверами Windows XP, а также содержит неразрушающий инструмент разметки дисков, позволяющий установить Windows XP совместно с Mac OS X. Также было выпущено обновление встраиваемого ПО, которое добавило поддержку BIOS для данной реализации EFI. Последующие модели Macintosh были выпущены с обновлённым встраиваемым ПО. Теперь все современные компьютеры Macintosh могут загружать BIOS -совместимые ОС, такие как Windows XP, Vista и Windows 7.

Большое количество системных плат фирмы Intel выпускается со встраиваемым ПО на основе инструментария [ уточнить ] . Так, в течение 2005 года было выпущено более одного миллиона систем Intel . Новые мобильные телефоны, настольные компьютеры и серверы, использующие инструментарий, начали производить в 2006 году. Например, все системные платы, которые построены на наборе системной логики Intel 945, используют инструментарий. Однако, производимое встраиваемое ПО обычно не включает поддержку EFI и ограничено поддержкой BIOS .

С 2005 года EFI начал применяться в архитектурах, несовместимых с PC , таких как встраиваемые системы на ядре XScale .

EDK включает цель NT32, которая позволяет встраиваемому ПО EFI и приложениям EFI выполняться в приложениях Windows.

В 2007 году компания Hewlett-Packard выпустила многофункциональный принтер серии 8000, оснащённый встраиваемым ПО, совместимым с EFI .

Как происходит загрузка в UEFI

В дисковой разметке GPT en ( англ. ESP) помечается GUID C12A7328-F81F-11D2-BA4B-00A0C93EC93B, а в MBR типом раздела 0xEF. Раздел отформатирован в FAT32 и содержит файлы с именами вида \efi\[имя ОС]\boot[название архитектуры].efi (например: \EFI\MICROSOFT\BOOT\bootx64.efi. ). Загрузчик EFI BIOS загружает и запускает такой файл, соответствующий архитектуре компьютерной системы.

Например, чтобы создать загрузочную флешку с Windows , достаточно просто разметить флешку в MBR, создать на ней активный раздел с файловой системой FAT32 и идентификатором раздела 0xEF, затем скопировать все файлы с компакт-диска с дистрибутивом операционной системы.

Пример создания GPT-диска в операционной системе GNU/Linux:

  • С помощью gdisk или fdisk создать раздел GPT или MBR соответственно, указав тип EFI System — EF00 в gdisk или 0xEF в fdisk (EF00 в gdisk является мнемоникой для соответствующего GUID). Затем надо отформатировать раздел в файловую систему FAT32 командой mkfs.fat -F32 /dev/<раздел диска> ;
  • GNU Parted : создать раздел FAT32 и затем установить (активировать) загрузочный флаг (но не флаг legacy_boot) на этот раздел.

Также в большинстве реализаций UEFI возможна загрузка в режиме совместимости с диска с разметкой MBR.

Apple не использует ESP для загрузки, bootstrap передаёт управление по адресу, записанному в NVRAM (BootRom): /System/Library/CoreServices/boot.efi с помощью утилиты bless [ пользователь может изменить это значение посредством этой же утилиты ], с её помощью можно так же посмотреть текущее загрузочное устройство и параметры загрузки:

bless --info --getBoot --verbose

Операционные системы

  • Ядро Linux могло использовать EFI при загрузке с начала 2000 года, используя загрузчик EFI или появившиеся позднее EFI-версии загрузчика grub . Начиная с версии 3.3 ядро Linux может быть загружено напрямую, без использования загрузчика .
  • ОС HP-UX начали использовать EFI как загрузочный механизм в системах на платформе IA-64 с 2002 года. ОС OpenVMS использовала его начиная с января 2005 года.
  • Apple приняла EFI для линейки своих компьютеров, основанных на архитектуре Intel (). Mac OS X 10.4 (Tiger) для Intel и Mac OS X 10.5 (Leopard) поддерживают EFI v1.10 в 32-разрядном режиме, а также на 64-разрядных центральных процессорах (новые Macintosh имеют 64-разрядный EFI) .

Microsoft Windows

Itanium версии Windows 2000 (Advanced Server Limited Edition и Datacenter Server Limited Edition) получили поддержку EFI 1.1 в 2002 году.

Windows Server 2003 для IA-64 , 64-разрядная версия Windows XP и Windows 2000 Advanced Server Limited Edition, предназначенные для семейства процессоров Intel Itanium , поддерживают EFI, определённый для данной платформы спецификацией .

Microsoft ввела поддержку UEFI в 64-разрядных ОС Windows начиная с Windows Server 2008 и Windows Vista Service Pack 1 . Microsoft утверждает, что отсутствие официальной поддержки EFI на 32-разрядных ЦП происходит из-за недостаточной поддержки изготовителями ПК и поставщиками. Миграция Microsoft к 64-разрядным ОС не позволяет использовать EFI 1.10, так как 64-разрядные расширения процессора, необходимые этим ОС, не поддерживаются окружением процессора. Поддержка x86-64 была включена в UEFI 2.0.

Microsoft выпустила видео с Эндрю Рицом ( англ. Andrew Ritz) и Джейми Шварцем ( англ. Jamie Schwarz), разъясняющим реализацию поддержки UEFI в Windows Vista и Windows Server 2008 .

Графические возможности

EFI поддерживает графические меню и некоторые возможности, например, осуществленные Aptio или Great Wall UEFI .

Критика

EFI критиковался за то, что он привёл к усложнению системы, не давая существенных преимуществ , и за отказ от альтернативных загрузчиков с полностью открытыми исходными текстами — OpenBIOS и coreboot .

В 2011 году пользователи и разработчики операционных систем на ядре Linux предупреждали, что внедрение технологии Secure Boot способом, требуемым Microsoft для устройств с Windows 8 , существенно ограничит свободу пользователей этих устройств в выборе операционной системы или действиях с ней .

В сентябре 2018 года одна из антивирусных компаний опубликовала доклад о LoJax — первый известный руткит для системы UEFI, замеченный в реальном употреблении. Инженерами компании был обнаружен случай успешного поражения подсистемы SPI и сохранения руткита во флэш-накопителе этой подсистемы. Благодаря этому вредоносное ПО могло оставаться в компьютере не только при переформатировании жёсткого диска, а также при замене самого жёсткого диска. Единственный шанс избавиться от такого руткита — перезапись флэш-памяти встроенного ПО системы UEFI.

Примечания

  1. Dong Wei. Beyond BIOS (foreword). Intel Press, 2006, ISBN 978-0-9743649-0-2
  2. (неопр.) . Дата обращения: 13 июня 2008. 10 июня 2008 года.
  3. (недоступная ссылка) (требует регистрации)
  4. (неопр.) . Дата обращения: 16 июня 2008. Архивировано из 28 сентября 2007 года.
  5. (неопр.) . Дата обращения: 6 июля 2008. 28 апреля 2021 года.
  6. от 21 августа 2011 на Wayback Machine на сайте Intel
  7. 3 января 2009 года. Apple Computer
  8. от 18 ноября 2008 на Wayback Machine Intel
  9. (неопр.) . Дата обращения: 6 июля 2008. 27 июля 2020 года.
  10. (неопр.) . Дата обращения: 6 июля 2008. 18 ноября 2008 года.
  11. (недоступная ссылка)
  12. (неопр.) . Дата обращения: 7 июля 2008. 30 мая 2008 года.
  13. (неопр.) . Дата обращения: 21 июля 2017. 7 августа 2016 года.
  14. (неопр.) . Дата обращения: 7 июля 2008. 5 сентября 2008 года.
  15. 30 августа 2006 года. Microsoft Windows Server TechCenter
  16. 17 октября 2006 года.
  17. Mary Jo Foley. (неопр.) . ZDNet (8 июля 2007). Дата обращения: 20 июля 2007. Архивировано из 2 марта 2012 года.
  18. (неопр.) . Дата обращения: 7 июля 2008. 9 апреля 2008 года.
  19. 20 декабря 2007 года.
  20. (неопр.) . Дата обращения: 7 июля 2008. Архивировано из 29 января 2011 года.
  21. (англ.) . Free Software Foundation . Дата обращения: 24 ноября 2013. 28 ноября 2013 года.
  22. Rod Smith. (англ.) . Managing EFI Boot Loaders for Linux . Дата обращения: 24 ноября 2013. 6 ноября 2013 года.

Ссылки


Same as Extensible Firmware Interface