UEFI

UEFI (Unified Extensible Firmware Interface) — спецификация современной прошивки, пришедшая на смену BIOS. Её разрабатывает консорциум UEFI Forum; в основе — EFI, созданный Intel в конце 1990-х.

UEFI — это не «экран настроек» и не «этап после POST». Это вся среда прошивки: набор сервисов и драйверов, который инициализирует железо, а затем загружает загрузчик и передаёт ему управление, оставаясь доступным до момента запуска ядра. POST — лишь первая часть её работы, а Setup — один из интерфейсов.

Чем UEFI отличается от BIOS

BIOS UEFI
Разрядность кода 16 бит, реальный режим 32/64 бита, защищённый режим
Разметка диска MBR, до 2 ТиБ GPT, диски любого размера
Загрузка сектор MBR, «слепое» выполнение кода файл загрузчика на разделе FAT32
Драйверы до ОС нет есть: диски, USB, сеть, видео
Проверка подписей нет Secure Boot
Сервисы для ОС исчезают после старта ОС часть остаётся (runtime)
Сетевая загрузка только через Option ROM встроенная (PXE/HTTP)
Интерфейс настроек текстовый, 16-битный графический, с мышью

Из чего состоит UEFI

Прошивка в микросхеме

Прошивка лежит в SPI-флеше на плате и собрана в тома прошивки (firmware volumes) — контейнеры с модулями: драйверами, приложениями (включая Setup и оболочку UEFI Shell), таблицами. Отдельно в той же микросхеме хранится NVRAM — энергонезависимая память с настройками и переменными UEFI.

Стадии загрузки

Порядок работы прошивки описан в спецификации PI (Platform Initialization):

  1. SEC (Security) — самый первый код, с точки входа процессора;
  2. PEI (Pre-EFI Initialization) — минимальная инициализация железа и памяти;
  3. DXE (Driver Execution Environment) — драйверы и сервисы;
  4. BDS (Boot Device Selection) — выбор и запуск загрузчика;
  5. TSL (Transient System Load) — загрузчик и ядро работают, используя сервисы прошивки;
  6. RT (Runtime) — ОС работает, от прошивки остались только runtime-сервисы.

Два вида сервисов

Это ключевое понятие UEFI — то, чего у BIOS не было:

  • Boot Services — живут до тех пор, пока ядро не вызовет ExitBootServices():
    • работа с памятью, события и таймеры;
    • протоколы устройств: Block I/O, Simple File System, Device Path, Graphics Output, Simple Text Input;
    • загрузка и запуск образов: LoadImage / StartImage.
  • Runtime Services — остаются доступными операционной системе:
    • переменные UEFI (GetVariable / SetVariable) — ими пользуются efibootmgr и загрузчики;
    • время и будильник, сброс машины, обновление прошивки (capsule), аварийные дампы.

Именно поэтому загрузчик в UEFI — обычное приложение, работающее на сервисах прошивки, а не кусок кода, которому «передали управление и ушли».

ESP — раздел EFI

Загрузчик — это файл на диске, поэтому UEFI нужен раздел, который она умеет читать: EFI System Partition (ESP) — раздел с файловой системой FAT32.

/boot/efi/EFI/BOOT/BOOTX64.EFI        # запасной путь, если записей нет
/boot/efi/EFI/<дистрибутив>/grubx64.efi
/boot/efi/EFI/<производитель>/…

Secure Boot

Цепочка доверия: прошивка проверяет подпись загрузчика, загрузчик — подпись ядра. Ключи хранятся в переменных UEFI: PK (platform key), KEK, db (разрешённые) и dbx (запрещённые). Если подпись не сходится, загрузка останавливается.

Как UEFI доходит до GRUB

  1. SEC → PEI → DXE инициализируют железо и поднимают сервисы (см. POST).
  2. BDS берёт из NVRAM список загрузочных записей и их порядок (BootOrder).
  3. Прошивка находит на ESP файл загрузчика, указанный в записи, — обычно EFI/<дистрибутив>/grubx64.efi.
  4. LoadImage загружает его в память, StartImage запускает. GRUB — это UEFI-приложение, работающее на Boot Services прошивки.
  5. GRUB читает grub.cfg, загружает ядро и initramfs и передаёт управление ядру.
  6. Ядро готовит свои драйверы и вызывает ExitBootServices() — с этого момента прошивка больше не предоставляет Boot Services, остаются только Runtime Services.

Передача загрузки: где на самом деле граница

В отличие от BIOS, в UEFI нет резкой границы «прошивка закончилась — началась ОС». Загрузчик и ядро какое-то время работают внутри прошивки, пользуясь её сервисами. Управление переходит в тот момент, когда ядро вызывает ExitBootServices(). Вот почему прошивка может, например, показать логотип, а затем её же сервисы используются для чтения файлов загрузчиком.

Как проверить режим и настройки

# система загружена в режиме UEFI (каталог существует)
ls /sys/firmware/efi

# загрузочные записи UEFI и их порядок
efibootmgr -v

# состояние Secure Boot
mokutil --sb-state

# сведения о прошивке и загрузчике
bootctl status

Ссылки

Смотрите также

  • Прошивка — что такое прошивка вообще
  • BIOS — предыдущее поколение
  • POST — инициализация железа
  • Setup — настройки прошивки
  • SEC · PEI · DXE · BDS — стадии работы прошивки
  • GRUB 2 — загрузчик, который запускает UEFI
Оценка статьи 0

Комментарии

Пока комментариев нет.