BDS

UEFI

BDS (Boot Device Selection) — четвёртая стадия работы прошивки UEFI: выбор загрузочного устройства и запуск загрузчика. Именно здесь заканчивается POST и начинается загрузка операционной системы.

К этому моменту железо инициализировано, драйверы работают, сервисы подняты (см. DXE). Задача BDS — решить что загружать и запустить это.

Откуда BDS знает, что загружать

Список загрузки живёт в NVRAM прошивки — это переменные UEFI, которые задаёт Setup и изменяет операционная система:

  • BootOrder — порядок, в котором перебираются записи;
  • Boot#### — сами записи: имя и путь к загрузчику (например, «ubuntu» → HD(1,GPT,…)/File(\EFI\ubuntu\grubx64.efi));
  • BootNext — «загрузить вот это один раз» (используется установщиками и обновлениями);
  • BootCurrent — чем загрузились сейчас.

Посмотреть и изменить этот список из Linux можно командой efibootmgr.

Что делает BDS

  1. Читает список загрузки из NVRAM и порядок записей.
  2. Проверяет доступность каждого устройства из списка: подключено ли оно, читается ли.
  3. Показывает меню, если записей несколько или если пользователь нажал клавишу вызова загрузочного меню (F12, F11, Esc — зависит от производителя). Меню может быть и скрытым — тогда BDS идёт по списку сам.
  4. Загружает выбранный образ: сервис LoadImage помещает файл загрузчика в память, StartImage запускает его.
  5. Передаёт управление загрузчику — обычно GRUB 2.
  6. Если ничего не сработало — переходит к запасному пути: файл \EFI\BOOT\BOOTX64.EFI на любом подходящем разделе. Именно поэтому система часто остаётся загружаемой даже после сброса настроек прошивки.

Что видит пользователь

  • меню выбора ОС при включении — если записей несколько (несколько Linux, Windows и Linux, разные ядра);
  • подсказку «Press F12 for boot menu» или логотип производителя;
  • ошибки: No bootable device, Boot device not found — BDS не нашёл ни одной рабочей записи;
  • порядок загрузки — тот самый список, который можно переставить в Setup или через efibootmgr.

После BDS: TSL и RT

BDS не «выключает» прошивку. По спецификации дальше идут ещё две стадии:

  • TSL (Transient System Load) — загрузчик и ядро работают, пользуясь Boot Services прошивки: читают файлы, выводят на экран, работают с устройствами;
  • RT (Runtime) — ядро вызывает ExitBootServices(), Boot Services становятся недоступны, остаются только Runtime Services (переменные, время, обновление прошивки).

Вот где на самом деле проходит граница между прошивкой и операционной системой — см. UEFI.

Как посмотреть загрузку из системы

# записи BDS и их порядок
efibootmgr -v

# чем загрузились и какие записи есть
cat /sys/firmware/efi/efivars/BootCurrent-* 2>/dev/null
bootctl status

Частые проблемы

  • сбился порядок загрузки — после обновления прошивки или установки второй системы: лечится в Setup или efibootmgr -o;
  • пропала запись — например, после переустановки загрузчика: запись добавляется efibootmgr -c или создаётся заново установкой GRUB;
  • не загружается ничего — проверяют, есть ли вообще файл загрузчика на ESP и доступен ли раздел;
  • загрузка через CSM вместо UEFI — система установлена в режиме совместимости; тогда /sys/firmware/efi отсутствует.

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

  • UEFI — среда, в которой работает BDS
  • DXE — предыдущая стадия
  • Setup — где задаётся порядок загрузки
  • POST — что происходит до BDS
  • GRUB 2 — загрузчик, который запускает BDS
Оценка статьи 0

Комментарии

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