Добавил:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
155
Добавлен:
31.01.2021
Размер:
609.31 Кб
Скачать

дополнительных драйверов с момента последнего вызова диспетчера. После чего управление опять возвращается в фазу BDS.

Алгоритм работы UEFI Boot Manager

Концепция загрузки UEFI существенно отличается от аналогичной в BIOS. Если вспомнить BIOS, то за загрузку там отвечал код начального загрузчика int 19h (bootstrap loader), задача которого состояла лишь в том, чтобы загрузить главную загрузочную запись (MBR) с устройства загрузки в память и передать ей управление. В UEFI всё несколько интереснее, она содержит свой собственный полноценный встроенный загрузчик, который носит название UEFI Boot Manager (Менеджер загрузки UEFI или просто Boot Manager), имеющий куда более богатый функционал.

UEFI Boot Manager - стандартный типовой модуль UEFI.

Boot Manager реализует довольно широкий набор функций, в число которых входит загрузка таких UEFI-образов, как: UEFI-загрузчиков ОС первой стадии, UEFIдрайверов, UEFI-приложений. Загрузка может производиться из любого UEFI-образа, размещенного на любой поддерживаемой UEFI файловой системе, располагающейся на любом поддерживаемом платформой физическом носителе информации. UEFI Boot Manager имеет свою собственную конфигурацию, параметры которой в виде ряда переменных располагаются в общей NVRAM (Non-volatile RAM).

EFI NVRAM - общая область памяти, предназначенная для хранения параметров конфигурации UEFI, доступная для использования разработчикам прошивки, производителям оборудования, разработчикам операционных систем и пользователям.

Параметры UEFI хранятся в NVRAM в виде переменных, которые классически представлены парой "название параметра" = "значение". Эти переменные содержат большое количество параметров, которые относятся к разным функциональным частям UEFI, то есть, помимо параметров UEFI Boot Manager'а, NVRAM хранит и многие другие параметры UEFI. Однако, в контексте данной главы нас интересуют лишь переменные, относящиеся к UEFI Boot Manager. Это, в первую очередь, переменнаяBootOrder, которая указывает на переменные дескрипторов загрузки с именамиBoot####. Каждый элемент Boot#### представляет собой указатель на физическое устройство и (опционально) может описывать даже файл, представляющий собой образ UEFI, который должен с этого физического устройства грузиться.

Все загрузочные устройства описываются в виде полного пути, то есть содержат читаемое имя загрузочного файла, поэтому могут добавляться в меню загрузки.

Вот так, примерно, функционирует алгоритм перебора носителей в процессе работы UEFI:

Only for UIB groups from DobryninI.S.

Как мы видим, U EFI Boot Manager парсит BootOrder, т о есть загружает путь устройства каждог о элемента Boot#### в порядке, заданном в

переменнойBootOrder и пытается выполнить загрузку с указ анного устройства. В случае ошибки менедж ер загрузки переходит к следующему элементу. Кроме этого, формируется так называемый список загрузки. Этот список актуален для интерфейса настроек UEFI и выглядит как привычное станд артное меню загрузки

(Boot Menu).

UEFI

Bo ot

List

формируется на

основе

пе ременной BootOrder и

используется

для

в несения

пользователем

изменений в очередность и

конфигурацию

 

 

 

устройств

 

загрузки.

А как же формируетс я

сам BootOrder? А очень просто,

н апример в процессе

установки операционной системы Windows, инсталлятор с оздает раздел ESP (в случае его отсутствия) на установочном диске, форматиру ет данный раздел в файловую систему FA T, затем помещает свой загрузчик (для Windows 7+ это файлbootmgfw.efi) и некоторые другие файлы по пути \E FI\Microsoft\Boot\. По окончании установки ОС, инсталлятор Windows создает перем енную в EFI NVRAM с

именем Boot#### (где

#### - шестнадцатеричный номе р),

ссылающуюся на

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

Windows с именем bootmgfw.efi.

Затем, правит

переменную BootOrder?

 

 

Only for UIB groups from DobryninI.S.

Требования к загрузочным носителям UEFI

Спецификация UEFI, наряду с прочим, описывает и определенные требования к правилам размещения разделов и загрузчиков на носителях. И для различных классов устройств, как мы увидим далее, они существенно отличаются.

Требования для жестких дисков

Каждый загрузочный жесткий диск должен содержать специальный раздел EFI System Partition (ESP). В разделе ESP должна соблюдаться предопределенная стандартом иерархия директорий (структура): в корне раздела ESP должна размещаться директория /EFI. В папке /EFI, в свою очередь, должны располагаться подкаталоги вендоров операционных систем, производителей оборудования, общего инструментария и драйверов:

\EFI

\<директория вендора ОС 1> <файл-загрузчик-ОС1>.efi \<директория вендора ОС 2> <файл-загрузчик-ОС2>.efi

. . .

\<директория вендора ОС N> <файл-загрузчик-ОСN>.efi

\<директория производителя оборудования (OEM)> <OEM-приложение>.efi

\<директория BIOS вендора> <приложение-BIOS-вендора>.efi

\<директория вендора стороннего ПО> <стороннее-приложение>.efi

\BOOT BOOT{тип_архитектуры}.efi

Имена этих поддиректорий выбираются самими вендорами, распространенная практика заключается в корреляции имен вендоров с именами поддиректорий. В данных подкаталогах вендоров содержатся модули загрузки для ОС, которые разработаны конкретным вендором. Зарегистрированные в спецификации UEFI поддиректории вендоров можно посмотреть на официальном сайте в Реестре поддиректорий.

Вендоры, директории которых не описаны в поддиректории вендоров и которые не имеют собственных поддиректорий в папке /EFI, зачастую размещают свой загрузчик как "загрузчик по-умолчанию". К примеру, для x64 систем по пути:/EFI/Boot/bootx64.efi.

Файл загрузчика (boot loader) является типовым UEFI-приложением, имеет форматPE32+ и содержит код начальной стадии загрузки операционной системы, то

Only for UIB groups from DobryninI.S.

есть начинает процесс загрузки ОС. Его цель - подготовить структуры данных, загрузить ядро ОС в память и передать ему управление. В спецификации описана поддиректория /EFI/Boot. Данная поддиректория используется как расположение "по умолчанию", то есть в ситуации, когда по какимлибо причинам в NVRAM сбивается (не настроен) какой-либо загрузчик. Для подобного случая в данной директории располагается так называемый "загрузчик по-умолчанию" (fallback boot loader), который имеет стандартизованное наименованиеBOOT{тип_архитектуры}.efi

Требования для переносных устройств

Для переносных устройств структура несколько другая, абсолютно все загрузчики должны быть собраны в поддиректории "по умолчанию" с полным путем /EFI/Boot:

\EFI

\BOOT BOOT{тип_архитектуры}.efi

Имя файла загрузчика по-умолчанию (fallback boot loader) должно соответствовать следующим требованиям: BOOT{тип_архитектуры}.efi, где имя загрузчика может быть следующим:

 

Архитектура

 

 

Имя файла

 

 

Поле PE "machine type"

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x86 (32-битная)

 

 

BOOTIA32.EFI

 

 

0x14c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x64 (64-битная)

 

 

BOOTx64.EFI

 

 

0x8664

 

 

 

 

 

 

 

 

 

 

 

Itanium

 

 

BOOTIA64.EFI

 

 

0x200

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AArch32

 

 

BOOTARM.EFI

 

 

0x01c2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AArch64

 

 

BOOTAA64.EFI

 

 

0xAA64

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Некоторые старые реализации UEFI были "забагованы", они попросту игнорировали список загрузки в NVRAM и грузили напрямую модули/EFI/Microsoft/Boot/bootmgfw.efi либо /EFI/BOOT/bootx64.efi. Другие же, не менее "прямые" варианты UEFI не поддерживали меню загрузки и тоже всегда загружали /EFI/Boot/bootx64.efi либо/EFI/Microsoft/Boot/bootmgfw.efi в зависимости от своих таинственных предпочтений.

Загрузка в Legacy-режиме

UEFI не запускает никакого кода из классического MBR, вне зависимости от того, присутствует сектор на установленных в системе носителях или нет. Исключение составляют версии UEFI с реализацией поддержки "режима совместимости". В следствии этого, для традиционной (legacy) загрузки

Only for UIB groups from DobryninI.S.

операционных систем, совместимых со стандартом разметки MBR, в UEFI предусмотрены специальные модули, которые могут быть (по усмотрению вендора) включены в прошивку. Узнать поддерживает ли конкретно Ваша UEFI-прошивка "режим совместимости" можно поискав в интерфейсе UEFI такие параметры как Legacy, Legacy CSM, Launch CSM,CSM Boot, CSM OS, Запуск CSM или CSM Support. Надо отметить что в подавляющем большинстве прошивок данный режим присутствует, что сильно упрощает жизнь пользователей, купивших новые ноутбуки или материнские платы, но так и не изменивших своих привычек в использовании "старых" операционных системам от MS :) Логично предположить, что в случае наличие CSM модуля, код прошивки при загрузке в традиционном режиме должен максимально приближаться к аналогичным функциональным особенностям традиционных BIOS, попросту эмулируя ключевые технологии. Давайте посмотрим, какие действия производит модуль поддержки совместимости (CSM) UEFI при загрузке в традиционном режиме. Приведу здесь пока лишь абстрактно-условный алгоритм загрузки в режиме Legacy/Compatibility Support Module (CSM):

1.Требуется ли загрузка в традиционном (legacy) режиме? Если нет, то уходим на обычную цепочку UEFI Boot.

2.Загружаем модуль Legacy Driver.

3.Загружаем модуль Legacy BIOS.

4.Требуется ли поддержка традиционных функций видео-BIOS (реализация функций прерывания int 10h)? Да - загружаем.

5.Требуется ли поддержка остальных традиционных расширений BIOS (int 13h..)? Да - загружаем.

6.Загружаем традиционную (legacy) ОС? Нет - уходим на нормальную загрузку UEFI.

7.Формируем SMBIOS структуры.

8.Формируем структуры Legacy Device.

9.Формируем структуру прерывания int 15h, структуру BBS (BIOS Boot Specification) API.

10.Формируем ACPI RSD PTR.

11.Загружаем совместимый SMM код.

12.Загружаем код из MBR и передаем ему управление.

Мультизагрузка в UEFI

С самого начала массового распространения персональных компьютеров, время от времени вставала задача развертывания нескольких операционных систем на одном ПК, в котором мог размещаться один или несколько физических носителей. Не так давно ситуацию существенно изменило открытие технологии виртуализации, но полностью проблему это не сняло. В классическом своём понимании, применительно к станциям, загружающимся по традиционному способу PC/AT BIOS с использованием классической разметки MBR, мультизагрузка

Only for UIB groups from DobryninI.S.

представляла собой сторонний код в главном загрузочном секторе (MBR), который загружает так называемый менеджер загрузки (мультизагрузчик), хранящий настройки для каждой установленной на компьютере операционной системы и предоставляющий меню выбора загрузки той или иной ОС. Если говорить про наше время, то есть про мультизагрузку применительно к носителя, разбитым уже при помощи GPT разметки, то теперь многое изменилось. Как мы уже отмечали, UEFI напрямую умеет работать с GPT-дисками, поэтому задача по установке нескольких операционных систем существенно упрощается. Теперь все функции мультизагрузчика берет на себя встроенный UEFI Boot Manager, принципы функционирования которого мы описали выше. Инсталлятору ОС достаточно лишь сделать то, с чем он и так прекрасно справляется: разместить загрузчик на специальный раздел ESP в "свою" иерархию директорий, после чего этот загрузчик становится "видимым" в настройках UEFI. Помимо установщика ОС, теперь и сам пользователь при помощи настроек (графического/текстового интерфейса UEFI) может вручную добавить загрузчик, находящийся на любом подключенном и видимом системой физическом носителе. Все эти добавленные различными способами загрузчики становятся доступными через Меню загрузки, которое пользователь может настраивать/вызывать непосредственно во время работы UEFI, то есть на начальной стадии загрузки ПК. Другими словами, мультизагрузка в UEFI просто вопрос запуска UEFI-приложений (загрузчиков конкретных ОС), размещающихся на подключенных носителях на специальном разделе ESP в иерархии директорий с корнем в /EFI.

Only for UIB groups from DobryninI.S.

Соседние файлы в папке 04 BIOS AIDA