Что такое efi uefi: Что такое система EFI или раздел UEFI ? Компьютерная помощь в компании Serty
Содержание
Booting или как работает EFI?
Доброго времени суток, читатели!
Сегодня мы начнем погружаться в загрузочные системы или booting systems. В англоязычных статьях слово booting описывает весь процесс загрузки компьютера. Однако для начала мы поговорим об общих понятиях и начнем с UEFI (Unified Extensible Firmware Interface) или просто EFI — UEFI более новое название этой системы.
Также предупрежу, что данная статья составлена по отчету, который был в формате «Вопрос — ответ». Вопросы могут показаться не связанными, но я надеюсь на ваше терпение! Также для торопливых напоминаю о комбинации Cntr+F.
UEFI или BIOS Legacy?
UEFI — это своего рода стандарт для всех современных загрузочных систем. Поэтому он сейчас присутствует во всех новых ноутбуках или материнских платах. И, по-моему, некоторые производители прекратили давать пользователю возможность использовать Legacy BIOS, и при острой необходимости, скорее всего, придется перепрошивать загрузочную систему.
Говоря о плюсах UEFI по сравнению с BIOS:
- У UEFI нет ограничения на размер в 2,2 ТБ в отличии от BIOS. Это возможно благодаря новому подходу к системе разделов диска. В UEFI используется GPT вместо MBR.
- Скорость загрузки UEFI быстрее, чем BIOS.
О всех возможностях UEFI вы можете узнать на официальном сайте в спецификациях. Однако, 1000 страниц счастья на английском языке мало кому по силам, поэтому могу посоветовать почитать статьи @CodeRush на хабре.
Что такое PXE Booting?
PXE расшифровывается как Preboot eXecution Environment. Основная цель данной фичи — возможность загрузки и установки системы через сеть. Администраторы в современных компаниях используют данную функцию для дистанционной установки системы сразу на десятки или сотни машин.
PXE Booting дает возможность загрузить систему как в Legacy BIOS, так и EFI режимах. (Legacy BIOS — загрузочная система для старых систем, например Windows XP).
Как работает PXE?
- Клиент подключается к DHCP-серверу с помощью широковещательного запроса (67 / UDP), также он называется пакетом DHCPDISCOVER для предоставления IP-адреса и маски. DHCP не всегда выдает свободный адрес, зачастую стоит range на выдачу, но с PXE это не очень верно работает. — комментарий специалиста. Далее DHCP сервер помогает клиентскому PXE найти следующий IP-адрес сервера для скачивания NBP* файла по протоколу TFTP.
- Далее клиент устанавливает NBP пакет, скаченный в RAM (random-access memory или просто — оперативку).
Тут можно хоть немного некорректно, но сравнить с cloud.init когда ВМ разворачивается в виртуальном окружении. Например, для винды этот файл будет BCD — комментарий специалиста. До процесса установки ресурсы самого жесткого диска не используются.
Загрузка по PXE дает немалую автоматизацию, так, например, с помощью Cobbler и правильно настроенного пакета, что передается (NBP), мы можем получить уже настроенную установленную ось. — комментарий специалиста.
*NBP содержит в себе первичные драйвера для работы с компонентами компьютера и скрипты для успешной загрузки и установки образа уже полноценной системы. Если вы найдёте расшифровку аббревиатуры NBP, пишите в комментариях. Буду признателен… )
Что такое GPT?
GPT (таблица разделов GUID) — стандарт для компоновки таблицы разделов на жестком диске. Это часть интерфейса Extensible Firmware Interface (EFI) или на новый лад — Unified Extensible Firmware Interface (UEFI) .
Фактически, EFI использует формат таблицы разделов GPT, также как BIOS использует MBR (Master Boot Record).
В GPT реализована современная система логической блок-адресации LBA (Logic Block Address) вместо CHS (Cylinder, Head, Sector) в MBR. LBA0 и LBA1 содержат защищенные от редактирования заголовки MBR и GPT. Да-да в GPT есть кусочек MBR. LBA (2-33) включают информацию о всем диске с таблицами разделов и GUID (Global Unic ID или глобальный уникальный идентификатор). Кроме того, GPT содержит информацию о таблице разделов и в начале, и в конце диска.
Что такое LBA или логический блок в GPT?
LBA — логический блок размером 512 байт, который используется для структурирования и распределения информации на диске. На картинке ниже вы можете видеть за что отвечает тот или иной LBA.
LBA 0 — «Защищенный» MBR — это стандартный MBR, однако он находится в начале диска и имеет префикс (0xEE). Он обеспечивает защиту от редактирования или удаления структуры диска для старых систем, которые работают только с MBR, например Windows XP (32 бит). На практике он почти не используется. Вся информация о цепочке загрузок хранится на отдельном EFI разделе.
LBA 1 — Сводная информация о самом GPT диске.
LBA 2-33 — Информация о разделах диска.
Весьма ёмкое объяснение дано на wiki.
Для чего нужны разделы дисков (partitions)?
Разделы диска необходимы для разграничения используемого пространства под программные или системные нужды. В частности создание backup-ов или dual-boot систем. Существуют первичные, логические и расширяемые разделы дисков.
Первичные — основные разделы дисков с системой. Логические работают также как и первичные, однако, Windows может запускаться только с первичного раздела. Для MBR есть ограничение в 4 первичных диска, в то время как для GPT такого ограничения нет. Расширяемые — тип разделов, которые не существуют без первичного и не имеют собственной файловой системы.
Protective MBR на практике
На Linux изучать свой диск гораздо проще, поэтому используем bash для чтения первых 512 байт:
sudo dd if=/dev/sda of=/home/nikitas/hex512.dump bs=512 count=1
Я сразу помечу важные значения цветом:
EB 63 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 00 08 10 00 00 00 00 00 FF FA 90 90 F6 C2 80 74 05 F6 C2 70 74 02 B2 80 EA 79 7C 00 00 31 C0 8E D8 8E D0 BC 00 20 FB A0 64 7C 3C FF 74 02 88 C2 52 BB 17 04 F6 07 03 74 06 BE 88 7D E8 17 01 BE 05 7C B4 41 BB AA 55 CD 13 5A 52 72 3D 81 FB 55 AA 75 37 83 E1 01 74 32 31 C0 89 44 04 40 88 44 FF 89 44 02 C7 04 10 00 66 8B 1E 5C 7C 66 89 5C 08 66 8B 1E 60 7C 66 89 5C 0C C7 44 06 00 70 B4 42 CD 13 72 05 BB 00 70 EB 76 B4 08 CD 13 73 0D 5A 84 D2 0F 83 D0 00 BE 93 7D E9 82 00 66 0F B6 C6 88 64 FF 40 66 89 44 04 0F B6 D1 C1 E2 02 88 E8 88 F4 40 89 44 08 0F B6 C2 C0 E8 02 66 89 04 66 A1 60 7C 66 09 C0 75 4E 66 A1 5C 7C 66 31 D2 66 F7 34 88 D1 31 D2 66 F7 74 04 3B 44 08 7D 37 FE C1 88 C5 30 C0 C1 E8 02 08 C1 88 D0 5A 88 C6 BB 00 70 8E C3 31 DB B8 01 02 CD 13 72 1E 8C C3 60 1E B9 00 01 8E DB 31 F6 BF 00 80 8E C6 FC F3 A5 1F 61 FF 26 5A 7C BE 8E 7D EB 03 BE 9D 7D E8 34 00 BE A2 7D E8 2E 00 CD 18 EB FE 47 52 55 42 20 00 47 65 6F 6D 00 48 61 72 64 20 44 69 73 6B 00 52 65 61 64 00 20 45 72 72 6F 72 0D 0A 00 BB 01 00 B4 0E CD 10 AC 3C 00 75 F4 C3 00 00 00 00 00 00 00 00 01 00 EE FE FF FF 01 00 00 00 AF 44 F2 1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
На самом деле, на новеньком диске не будет так много информации. Всё перед красной пометкой будет заполнено 00
. В моём случае игры с разделами и проверки влияния «защищённого» MBR на GPT привели к захламлению.
Red:
— 00 — Boot Indicator. Флаг загрузки. Если равен 00, то раздел не является загрузочным.
— 00 — Starting Head.
— 01 — Starting Sector.
— 00 — Starting Cylinder.
Напомню, что MBR работает с заголовками, секторами и цилиндрами. Поэтому эти три параметра нужны, чтобы указать правильный адрес на LBA. Как видите 00 01 00 = LBA 1
— EE — Флаг, показывающий, что описываемый раздел является одним и не должен быть удален.
— FE — Ending Head.
— FF — Ending Sector.
— FF — Ending Cylinder.
Соответственно, конец диска.
Green:
— 01 00 00 00 — Номер первого LBA
— AF 44 F2 1B — Количество LBA
Blue:
— 55 AA — Номер последнего LBA.
LBA 2 и LBA 3 под микроскопом
LBA 2 и LBA 3 — это следующие два блока по 512 байт.
sudo dd if=/dev/sda of=/home/nikitas/hex1536.dump bs=1536 count=1
Мы увидем следующее:
45 46 49 20 50 41 52 54 00 00 01 00 5C 00 00 00 7A 0D D7 79 00 00 00 00 01 00 00 00 00 00 00 00 AF 44 F2 1B 00 00 00 00 22 00 00 00 00 00 00 00 8E 44 F2 1B 00 00 00 00 16 46 11 5A 0C 0D A0 4A AF 58 E6 05 C7 3A 9D 8D 02 00 00 00 00 00 00 00 80 00 00 00 80 00 00 00 46 F9 0F B7 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B 0D 99 8E 53 06 C0 A2 4E 83 73 40 A0 88 6B 44 3A 00 08 00 00 00 00 00 00 FF 07 10 00 00 00 00 00 00 00 00 00 00 00 00 00 45 00 46 00 49 00 20 00 53 00 79 00 73 00 74 00 65 00 6D 00 20 00 50 00 61 00 72 00 74 00 69 00 74 00 69 00 6F 00 6E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AF 3D C6 0F 83 84 72 47 8E 79 3D 69 D8 47 7D E4 1C 0A 23 30 18 44 FD 43 8D 10 F3 8C 73 32 4D 10 00 08 10 00 00 00 00 00 FF 47 1F 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 AF 3D C6 0F 83 84 72 47 8E 79 3D 69 D8 47 7D E4 8C 3E B9 DA 5A 6F DA 47 85 7D 21 3E 19 DC E8 36 00 48 1F 00 00 00 00 00 FF 3F F2 1B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Red:
— 45 46 49 20 50 41 52 54 — (EFI PART) Используется для определения всех EFI совместимых заголовков
— 00 00 01 00 — EFI спецификация, которая обозначает версию. В нашем случае Version 1 ➔ ..01..
Green:
— 5C 00 00 00 — Размер заголовка в байтах. 5C 00 00 00 ➔ 92 bytes
— 7A 0D D7 79 — CRC32 Checksum (Контрольная сумма)
— 00 00 00 00 — Зарезервировано
Небольшое отступление. Big и Little означают правило чтения. Big ending — чтение БАЙТОВ слева направо (как мы привыкли). Little ending — справа налево. Отмечу, что именно байты, а не вся строка. В диске могут быть записи и так, и этак. Зависит от производителя. В нашем случае были почти все в Little ending.
Blue: 01 00 00 00 00 00 00 00 — Primary LBA (Первоначальный LBA)
Pink: AF 44 F2 1B 00 00 00 00 — Backup LBA. Номер LBA c бэкапом первоначального. Так что AF 44 F2 1B 00 00 00 00 ➔ 468862127 в Big ending.
Brown:
— 22 00 00 00 00 00 00 00 — Адрес первого используемого LBA — 22 00 00 00 00 00 00 00 ➔ 34 (big ending).
— 8E 44 F2 1B 00 00 00 00 — Адрес последнего используемого LBA. — 8E 44 F2 1B 00 00 00 00 ➔ 468862094 (big ending).
Coral: 16 46 11 5A 0C 0D A0 4A AF 58 E6 05 C7 3A 9D 8D — GUID самого диска
DarkOliveGreen: 02 00 00 00 00 00 00 00 — Адрес первого LBA в разделе указанного GUID ➔ 2
DeepSkyBlue:
— 80 00 00 00 — Количество заголовков разделов. ➔ 128 (big ending) Следует отметить, что это значение по-умолчанию. В некоторых случаях увеличиваемое, но не уменьшаемое.
— 80 00 00 00 — Размер заголовков в bytes. По-умолчанию ➔ 128 bytes (big ending)
GoldenRod: 46 F9 0F B7 — Чек сумма заголовка раздела CRC32
Black: 00 00 .. — Зарезервировано
28 73 2A C1 1F F8 D2 11 BA 4B 00 A0 C9 3E C9 3B — UID типа раздела. В нашем случае EFI System partition. Этот индефикатор одинаков для всех EFI разделов.
0D 99 8E 53 06 C0 A2 4E 83 73 40 A0 88 6B 44 3A — Уникальный GUID EFI раздела.
SlateBlue:
— 00 08 00 00 00 00 00 00 — Адрес первого LBA раздела ➔ 2048 (На самом деле число очень большое и логичнее предположить, что это должен быть LBA 4. Но в документации иначе)
— FF 07 10 00 00 00 00 00 — Адрес последнего LBA раздела ➔ 1050623
SeaGreen: 00 00 00 00 00 00 00 00 — Attribute Bits. Описывает как используется раздел.
- 45 00 46 00 49 00 20 …- Название раздела. Длина в 36 символов в формате Unicode.
AF 3D C6 0F 83 84 72 47 8E 79 3D 69 D8 47 7D E4 — UID типа раздела
1C 0A 23 30 18 44 FD 43 8D 10 F3 8C 73 32 4D 10 — Уникальный GUID раздела
Blue:
— 00 08 10 00 00 00 00 00 — Адрес первого LBA раздела ➔ 1050624
— FF 47 1F 00 00 00 00 00 — Адрес последнего LBA раздела ➔ 2050047
Pink: 00 00 00 00 00 00 00 00 — Attribute Bits. Описывает как используется раздел.
AF 3D C6 0F 83 84 72 47 8E 79 3D 69 D8 47 7D E4 — UID типа раздела
8C 3E B9 DA 5A 6F DA 47 85 7D 21 3E 19 DC E8 36 —Уникальный GUID раздела
Pink: 00 00 00 00 00 00 00 00 — Attribute Bits. Описывает как используется раздел.
Blue:
— 00 48 1F 00 00 00 00 00 — Адрес первого LBA раздела ➔ 2050048
— FF 3F F2 1B 00 00 00 00 — Адрес последнего LBA раздела ➔ 468860927
С какого байта фактически начинается таблица разделов в GPT?
C 1024 байта (включая) или с 0x400 в hex формате. Пруф:
Заключение
Сегодня мы разобрали основные моменты загрузочных систем (Booting System). Повторим главные пункты:
- UEFI и BIOS (Legacy)
- PXE загрузка
- GPT и MBR
Весь описанный материал можно считать поверхностным, особенно тот, что относится к UEFI. Однако, в следующей статье мы продолжим говорить о цепочке загрузки компьютера с участие EFI boot manager и NVRAM.
Так что дальше будет интересно, оставайся с нами =)
Как я могу определить, была ли моя система загружена как EFI / UEFI или BIOS? — Yodo.im
yodo.im
#1
Как мне определить, была ли загружена конкретная запущенная система Ubuntu с использованием EFI / UEFI или BIOS?
Savva_P
#2
Самый простой способ — проверить, есть ли /sys/firmware/efi
существует. Он не отображается, если вы загрузились с помощью традиционного BIOS.
#!/bin/bash[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
Motya
#3
Осуждаемый
Приведенный ниже ответ — это метод, который может не всегда работать.
Вместо этого используйте Ответ Колина основанный на/sys/firmware/efi
.
Очень легко определить, была ли система загружена в EFI (или нет, и в этом случае она должен быть BIOS):
Просто используйте dmesg | grep "EFI v"
Это вернет строку, подобную этой, если система была загружена с EFI:
[ 0.000000] EFI v2.00 от American Megatrends
Или ничего не возвращать, если это не так, и в этом случае он был загружен из BIOS
Пример использования скрипта bash на основе
grep — это код выхода:
...dmesg | grep -q "EFI v" # -q скажите grep, чтобы он ничего не выводил, если [ $? -eq 0 ] # проверьте код выхода; если 0 EFI, в противном случае BIOSthen выдает эхо "Вы используете загрузку EFI". В противном случае отображается эхо "Вы используете загрузку BIOS"fi...
Источник: О том, как определить, использует ли система EFI эмуляцию устаревшего BIOS или нет, а также дополнительную информацию о тестировании на совместимость с EFI и EFI, а также строки для ряда поставщиков / версий EFI, см. эта страница с саммита разработчиков Ubuntu для точной.
Anna4ka
#4
Код на Python для проверки загрузки системы с помощью UEFI или ROM BIOS:
импорт ос,sysdef main(): если(os.path.exists("/sys/firmware/efi")): выведите "\n\n Система загружается с помощью uefi!" еще: выведите "\n\n Система загружается с помощью rom bios"main()sys.exit(0)
Danil4ik
#5
Darya_D
#6
Интересный вопрос. Не совсем обман, но попробуйте ответить здесь, на аналогичный вопрос.
UEFI (унифицированный расширяемый интерфейс прошивки)
Получить эту книгу -> Задачи на массив: для интервью и конкурентного программирования
UEFI (Unified Extensible Firmware Interface) — это интерфейс между операционной системой и прошивкой низкоуровневой инициализации. Он инициализирует аппаратные компоненты и отвечает за выполнение ОС, хранящейся на загрузочном устройстве.
Содержание.
- Введение.
- Возможности UEFI.
- Последовательность загрузки UEFI.
- Резюме.
- Ссылки.
Введение.
EFI/UEFI определяет интерфейс между операционной системой и прошивкой низкоуровневой инициализации.
Он состоит из таблиц данных, содержащих информацию о платформе, загрузки и времени выполнения служебных вызовов, доступных для операционной системы и ее загрузчика.
Это улучшение по сравнению с BIOS;
- Прошивка UEFI отвечает за выбор ОС, а не загрузчика, поэтому загрузчик нам не нужен.
- Позволяет поставщикам создавать драйверы, которые нельзя реконструировать.
- Может быть запрограммирован на языке высокого уровня, таком как C.
- Его интерфейс является объектно-ориентированным.
Спецификация EFI стала общим стандартом, теперь известным как UEFI .
Чтобы понять UEFI, давайте вспомним, что мы узнали о BIOS: во время запуска BIOS считывает первый сектор загрузочного диска, такого как жесткий диск или USB, чтобы найти следующую инструкцию перехода, в которой находится код (загрузчик), который необходимо выполнить. .
С другой стороны, UEFI работает с файлом .efi , который используется для хранения всей информации об инициализации и запуске, которая ранее была встроена в прошивку.
Этот файл хранится в системном разделе EFI (ESP) , в котором также будут храниться загрузчики ОС.
Возможности UEFI.
UEFI является заменой BIOS из-за его замечательных функций, которые нельзя реализовать с помощью BIOS. Некоторые включают;
1. Скорость и производительность.
UEFI не зависит от платформы, поэтому мы можем улучшить время загрузки и скорость компьютера, это полезно, когда у нас есть большие диски.
Программисты также могут использовать оболочку UEFI для выполнения команд из других приложений UEFI, тем самым оптимизируя производительность системы.
Скорость и производительность зависят от конфигурации UEFI.
2. Безопасность.
UEFI отдает приоритет безопасности по сравнению с BIOS. Он поставляется с безопасной загрузкой , благодаря чему он позволяет загружать только подлинные драйверы и службы во время загрузки. Это хороший способ предотвратить загрузку вредоносных программ в ОС.
Безопасная загрузка в Windows является причиной того, что трудно установить другую операционную систему на машину с Windows.
3. Ограничения по размеру.
В то время как BIOS использует MBR , UEFI использует GPT (таблица разделов GUID) . Первый, MBR , использует 32-битные записи в своей таблице, что означает, что у нас может быть только 4 физических раздела (не логических).
GPT использует 64-битные записи в своей таблице, что расширяет поддержку больших размеров.
UEFI также поддерживает большие жесткие и твердотельные диски, т. е. > 9 зеттабайт , в то время как BIOS может загружаться только с <= 2,2 ТБ .
Дополнительные функции UEFI:
- UEFI написан на языке программирования высокого уровня C, который удобочитаем, поэтому его можно легко изменить или обновить по сравнению с BIOS, написанным на низкоуровневом ассемблере, зависящем от архитектуры.
- UEFI работает в 32-битном или 64-битном режиме, тогда как BIOS работает только в 16-битном режиме, используя только 1 МБ исполняемой памяти.
- UEFI поставляется с интуитивно понятным графическим интерфейсом, в котором мы можем перемещаться с помощью клавиатуры или мыши.
- UEFI поддерживается отраслевым форумом интерфейсов и, таким образом, более не зависит от производителя, чем BIOS.
Последовательность загрузки UEFI.
Последовательность загрузки UEFI состоит из трех этапов;
1. SEC — Фаза безопасности.
На этом этапе весь код инициализации процессора написан на ассемблере, и он отвечает за следующее;
- Создание временного хранилища памяти.
- Это корень доверия в системе
- Обрабатывает все события перезапуска.
2. PIE — этап инициализации до EFI.
На этом этапе происходит настройка всей платформы, загрузка и загрузка DXE (среды выполнения драйверов).
Другие обязанности;
- Инициализация дополнения постоянной памяти.
- Передача управления фазе DXE — следующая фаза.
- Описание местоположений прошивки (HOB).
- Описание блоков передачи памяти (HOB).
3. DXE — среда выполнения драйверов.
UEFI теперь загружает драйверы для настроенных устройств. Когда управление передается ОС, среда выполнения DXE остается резидентной, чтобы она могла обрабатывать любые вызовы UEFI из/в операционную систему.
4. BDS — Выбор загрузочного устройства.
Этот этап реализован как часть архитектурного протокола BDS, за который он отвечает; инициализация консольных устройств, загрузка драйверов, загрузка вариантов загрузки и их выполнение.
5. TSL — переходная загрузка системы и RT — время работы.
TSL — это основной загрузчик, предоставляемый поставщиком ОС. Обе эти стадии TSL и RT обеспечивают доступ к постоянному контенту через драйверы и приложения UEFI.
6. AL — Жизнь после смерти.
Эта фаза состоит из постоянных драйверов UEFI, которые сохраняют состояние системы во время упорядоченного перехода в спящий режим, гибернацию, перезагрузку или завершение работы.
Резюме.
UEFI не зависит от платформы. Поэтому производители не заботятся о конкретной ОС, которая может работать на компьютерах.
Конфигурация UEFI хранится в указанном разделе ESP, смонтированном в /EFI и не протравленном непосредственно в оборудовании.
С UEFI нет необходимости в загрузчике, таком как GRUB.
Все эти функции делают UEFI превосходным интерфейсом по сравнению с устаревшим, однако бывают случаи, когда BIOS предпочтительнее, например, когда нам нужна двойная загрузка или когда у нас меньше 2 ТБ дискового пространства.
Ссылки.
- БИОС
Что делать с UEFI?
Кажется, есть два лагеря: небольшая группа людей, которым небезразличен UEFI, и все остальные, которым на самом деле все равно, пока работает их компьютер. Итак, давайте поговорим о том, что такое UEFI, как он появился, для чего он подходит и почему вас это должно (или не должно) волновать.
Что такое UEFI?
UEFI означает Unified Extensible Firmware Interface, стандарт, поддерживаемый организацией, известной как United EFI Forum. Intel выпустила EFI (Extensible Firmware Interface), а позже опубликовала спецификацию как UEFI. В спецификации детали реализации различаются между поставщиками и производителями, но цель состоит в том, чтобы представить стандартную и понятную структуру загрузчика ОС. Это значительно упрощает написание ОС, поскольку вам больше не нужно беспокоиться обо всех хлопотах по фактическому запуску набора микросхем.
Несколько IBV (независимых поставщиков BIOS) предлагают свои реализации UEFI, которые OEM-производители материнских плат могут лицензировать и использовать в своих продуктах. Некоторыми примерами могут быть AMI, Phoenix и InSyde. Вы, вероятно, видели их логотип или просто текст их имени, который ненадолго вспыхивает на экране, прежде чем выбранная вами ОС загрузится должным образом.
Давайте поговорим о том, как загружается UEFI. Как правило, есть несколько разных фаз. Обычно мы говорим, поскольку существует множество реализаций, и многие из них не соответствуют спецификации. Существует три основных этапа: безопасность (SEC), инициализация до EFI (PEI) и среда выполнения диска (DXE). Каждая представляет собой мини-операционную систему. Поскольку именно Intel запустила EFI, а затем превратила его в UEFI, большая часть дизайна построена на том, как загружаются процессоры Intel. Другие платформы, такие как ARM, могут мало что сделать на этапе SEC или PEI.
Процесс загрузки процессоров X86 немного странный. Они запускаются в реальном режиме (хотя большинство современных процессоров технически нереальны) с 20-битным адресным пространством (1 МБ адресуемой памяти) по соображениям обратной совместимости. Поскольку процессор продолжает загружаться, он переключается в защищенный режим, а затем, наконец, в длительный режим. В многоядерной системе все процессоры соревнуются за получение семафора или чтение EAX, и один из них назначается BSP (процессор начальной загрузки). Все проигравшие останавливаются до тех пор, пока BSP не запустит их через IPI (межпроцессорное прерывание). Обычно имеется встроенная микросхема флэш-памяти SPI с прошивкой, отображаемой в конец физической 32-битной области памяти. Процессор Intel Management Engine (ME) или AMD Platform Security Processor (PSP) выполняет большую часть фазы SEC, например, очищает кэш и запускает процессоры.
После запуска процессоров PEI официально начался. В системах Intel в большинстве PEI отсутствует системная оперативная память. Это связано с тем, что память должна быть обучена, а ссылки инициализированы, прежде чем процессор сможет их использовать. Постоянное неустанное стремление к все большей и большей скорости от ОЗУ означает, что ОЗУ необходимо тестировать, калибровать и настраивать при каждой загрузке, поскольку разные модули ОЗУ имеют другие параметры. Многие системы кэшируют эти параметры для более быстрой загрузки, но их часто необходимо сделать недействительными и переобучить по мере старения планок ОЗУ. PSP выполняет тренировку памяти и загрузку UEFI в некоторых системах AMD до того, как основной процессор x86 выйдет из режима перезагрузки. Для систем Intel они используют трюк под названием XIP (выполнение на месте), который превращает различные кэши во временную оперативную память. Есть только небольшой стек, крошечный объем кучи и нет статических переменных для PEI. Многие серверные платформы Intel полагаются на контроллер управления платой (BMC) для обучения памяти, поскольку обучение больших объемов памяти занимает очень много времени.
После инициализации ОЗУ и переноса содержимого временного кеша переходим к DXE. Фаза DXE предоставляет два типа служб: загрузку и выполнение. Службы времени выполнения предназначены для использования операционной системой, такие службы, как энергонезависимые переменные. Загрузочные службы уничтожаются после вызова ExitBootServices (обычно загрузчиком ОС), но это такие службы, как ввод с клавиатуры и графические драйверы. BDS (выбор загрузочного устройства) работает в DXE и именно так система определяет, с какого диска загрузиться (жесткий диск, USB и т. д.).
Это был очень подробный и специфичный для x86 обзор. Многие архитектуры, такие как ARM, отказываются от UEFI в пользу чего-то вроде coreboot, linuxboot или LK, где загружается маленькое ядро Linux, которое затем преобразуется kexec в гораздо большее ядро. Однако многие платформы ARM также могут использовать UEFI. Только время покажет, в каком направлении движется индустрия.
Как это произошло
В 2005 году UEFI полностью заменил EFI (Extensible Firmware Interface), стандарт, предложенный Intel несколькими годами ранее. EFI многое позаимствовал у Windows того периода, форматы образов PECOFF, а UEFI, в свою очередь, позаимствовал наработки у EFI. До EFI был старый добрый BIOS (Basic Input Output System). Название произошло от систем CP/M 1975. В тот период BIOS был способом загрузки системы и предоставления в некотором роде единообразного интерфейса для приложений за счет вызовов прерываний BIOS. Вызовы позволяли программе получать доступ к входам и выходам, таким как последовательные порты, RTC и шина PCI. Феникс и другие перепроектировали проприетарный интерфейс, созданный IBM для производства машин, совместимых с IBM, что в конечном итоге привело к созданию чего-то близкого к стандарту.
Это лучше, чем BIOS?
Да и нет, в зависимости от вашей точки зрения. Многим поставщикам ОС нравится UEFI, потому что они обычно облегчают их жизнь, поскольку предоставляемые услуги упрощают однородную загрузку. Сообщество Linux, вообще говоря, в лучшем случае настроено агностически, а в худшем — враждебно по отношению к UEFI. Интерфейсу BIOS на момент написания статьи исполнилось 45 лет, и он во всех смыслах считается устаревшим. Еще одним преимуществом UEFI является то, что он облегчает выбор различных загрузочных устройств и обновление прошивки на вашем компьютере. UEFI использует таблицу разделов GUID (GPT) поверх основной загрузочной записи (MBR) — это считается плюсом, поскольку MBR несколько негибкая. Многие поставляемые сегодня платформы основаны на проекте EDK2 с открытым исходным кодом от TianoCore, реализации UEFI, поддерживающей X86, ARM и RISCV.
Самая большая жалоба на UEFI заключается в том, что это закрытый черный ящик с невообразимым доступом к вашему компьютеру, который остается резидентным после загрузки компьютера. BIOS привлекателен тем, что интерфейс хорошо известен и, как правило, является нерезидентным. UEFI легче обновлять, но он также нуждается в обновлениях гораздо более жизненно. Обновление UEFI может полностью заблокировать вашу систему. Он не загружается, а из-за того, что на блоке перегорели предохранители, починить его практически физически невозможно даже для производителя. Для этих обновлений проводится значительное количество тестов, но большинство из них не решается выпускать много обновлений из-за объема требуемой работы.
Почему вас это должно или не должно волновать
В конце концов, вы заботитесь о том, можете ли вы использовать свой компьютер для важных для вас вещей. Будь то игра, написание электронного письма или создание нового компьютера, это не имеет значения, пока компьютер делает то, что вы хотите.