Extensible Firmware Interface

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Логотип UEFI
Позиция EFI в стеке программного обеспечения

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

История[править | править код]

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

Изначальное название — Intel Boot Initiative (Загрузочная инициатива Intel), позже было переименовано в EFI[1]:

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

Содержание[править | править код]

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

Сервисы[править | править код]

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

Драйверы устройств[править | править код]

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

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

Менеджер загрузки[править | править код]

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

Поддержка дисков[править | править код]

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

Оболочка UEFI[править | править код]

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

Оболочка может использоваться для выполнения других приложений 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 — полная legacy-free реализация встраиваемого ПО, обеспечивающая поддержку EFI. Tiano не включает в себя 16-битную часть CSM, но обеспечивает интерфейсы, требуемые для дополнений, реализуемых производителями BIOS. Intel не предоставляет полной реализации Tiano для конечных пользователей.

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

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

Платформы, использующие EFI или инструментарий[править | править код]

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

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

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

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[8]. Новые мобильные телефоны, настольные компьютеры и серверы, использующие инструментарий, начали производить в 2006 году. Например, все системные платы, которые построены на наборе системной логики Intel 945, используют инструментарий. Однако, производимое встраиваемое ПО обычно не включает поддержку EFI и ограничено поддержкой BIOS[9].

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

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

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

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

В дисковой разметке GPT системный раздел EFIruen (англ. 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 могло использовать UEFI при загрузке с начала 2000 года, используя загрузчик EFI elilo или появившиеся позднее EFI-версии загрузчика grub[12]. Начиная с версии 3.3 ядро Linux может быть загружено напрямую, без использования загрузчика[13].
  • ОС HP-UX начали использовать UEFI как загрузочный механизм в системах на платформе IA-64 с 2002 года. ОС OpenVMS использовала его начиная с января 2005 года.
  • Apple приняла EFI для линейки своих компьютеров, основанных на архитектуре Intel (Intel-based Macs). Mac OS X 10.4 (Tiger) для Intel и Mac OS X 10.5 (Leopard) поддерживают EFI v1.10 в 32-разрядном режиме, а также на 64-разрядных центральных процессорах (новые Macintosh имеют 64-разрядный EFI)[14].

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, определённый для данной платформы спецификацией DIG64[15].

Microsoft ввела поддержку UEFI в 64-разрядных ОС Windows начиная с Windows Server 2008 и Windows Vista Service Pack 1[16][17]. 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[18].

Графические возможности[править | править код]

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

Критика[править | править код]

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

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

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

Примечания[править | править код]

  1. Dong Wei. Beyond BIOS (foreword). Intel Press, 2006, ISBN 978-0-9743649-0-2
  2. Информация о Unified EFI Forum. Дата обращения: 13 июня 2008. Архивировано 10 июня 2008 года.
  3. Информация о драйвере FAT для EFI (недоступная ссылка) (требует регистрации)
  4. Информация об оболочке EFI. Дата обращения: 16 июня 2008. Архивировано из оригинала 28 сентября 2007 года.
  5. SourceForge.net: tianocore. Дата обращения: 6 июля 2008. Архивировано 28 апреля 2021 года.
  6. Intel Platform Innovation Framework для EFI Архивная копия от 21 августа 2011 на Wayback Machine на сайте Intel
  7. Universal Binary Programming Guidelines, Second Edition: Extensible Firmware Interface (EFI) Архивировано 3 января 2009 года. Apple Computer
  8. Framework Overview Архивная копия от 18 ноября 2008 на Wayback Machine Intel
  9. Information about EFI on Intel boards. Дата обращения: 6 июля 2008. Архивировано 27 июля 2020 года.
  10. Overview of the Intel Platform Innovation Framework. Дата обращения: 6 июля 2008. Архивировано 18 ноября 2008 года.
  11. HP Printers (недоступная ссылка)
  12. EFI version of Grub (Debian Linux). Дата обращения: 7 июля 2008. Архивировано 30 мая 2008 года.
  13. Загрузка ОС Linux без загрузчика / Хабр. Дата обращения: 21 июля 2017. Архивировано 7 августа 2016 года.
  14. rEFIt — Windows Vista and EFI. Дата обращения: 7 июля 2008. Архивировано 5 сентября 2008 года.
  15. Extensible Firmware Interface Архивировано 30 августа 2006 года. Microsoft Windows Server TechCenter
  16. Microsoft bombshell: no EFI support for Vista Архивировано 17 октября 2006 года.
  17. Mary Jo Foley. Vista SP1 beta 1 to launch in mid-July. ZDNet (8 июля 2007). Дата обращения: 20 июля 2007. Архивировано из оригинала 2 марта 2012 года.
  18. Microsoft Pre-OS Video. Дата обращения: 7 июля 2008. Архивировано 9 апреля 2008 года.
  19. Intel shows PC booting Windows with UEFI firmware Архивировано 20 декабря 2007 года.
  20. Linux: Linus On The Extensible Firmware Interface
  21. Interview: Ronald G Minnich. Дата обращения: 7 июля 2008. Архивировано из оригинала 29 января 2011 года.
  22. Will your computer’s «Secure Boot» turn out to be «Restricted Boot»? (англ.). Free Software Foundation. Дата обращения: 24 ноября 2013. Архивировано 28 ноября 2013 года.
  23. Rod Smith. Dealing with Secure Boot (англ.). Managing EFI Boot Loaders for Linux. Дата обращения: 24 ноября 2013. Архивировано 6 ноября 2013 года.

Ссылки[править | править код]