Csm uefi что это: Немного про UEFI и Secure Boot / Habr – Что такое режим загрузки «UEFI с CSM»?

Содержание

Немного про UEFI и Secure Boot / Habr

UEFI

UEFI (Unified Extensible Firmware Interface) — замена устаревшему BIOS. Эта спецификация была придумана Intel для Itanium, тогда она еще называлась EFI (Extensible Firmware Interface), а потом была портирована на x86, x64 и ARM. Она разительно отличается от BIOS как самой процедурой загрузки, так и способами взаимодействия с ОС. Если вы купили компьютер в 2010 году и позже, то, вероятнее всего, у вас UEFI.
Основные отличия UEFI от BIOS:

  • Поддержка GPT (GUID Partition Table)

GPT — новый способ разметки, замена MBR. В отличие от MBR, GPT поддерживает диски размером более 2ТБ и неограниченное количество разделов, в то время как MBR поддерживает без костылей только 4. UEFI по умолчанию поддерживает FAT32 с GPT-разделов. MBR сам UEFI не поддерживает, поддержка и загрузка с MBR осуществляется расширением CSM (Compatibility Support Module).
  • Поддержка сервисов

В UEFI есть два типа сервисов: boot services и runtime services. Первые работают только до загрузки ОС и обеспечивают взаимодействие с графическими и текстовыми терминалами, шинами, блочными устройствами и т.д., а runtime services может использовать ОС. Один из примеров runtime services — variable service, который хранит значения в NVRAM. ОС Linux использует variable service для хранения креш дампов, которые можно вытащить после перезагрузки компьютера.
  • Модульная архитектура

Вы можете использовать свои приложения в UEFI. Вы можете загружать свои драйверы в UEFI. Нет, правда! Есть такая штука, как UEFI Shell. Некоторые производители включают его в свой UEFI, но на моем лаптопе (Lenovo Thinkpad X220) его нет. Но можно его просто скачать из интернета и поставить на флешку или жесткий диск. Также существуют драйверы для ReiserFS, ext2/3/4 и, возможно, еще какие-то, я слишком не углублялся. Их можно загрузить из UEFI Shell и гулять по просторам своей файловой системы прямо из UEFI.
Еще UEFI поддерживает сеть, так что если найдете UEFI-драйвер к своей сетевой карте, или если он включен производителем материнской платы, то можете попинговать 8.8.8.8 из Shell.
Вообще, спецификация UEFI предусматривает взаимодействия драйверов UEFI из ОС, т.е. если у вас в ОС нет драйвера на сетевую карту, а в UEFI он загружен, то ОС сможет использовать сетевую карту через UEFI, однако таких реализаций я не встречал.
  • Встроенный менеджер загрузки

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

С GPT-раздела с идентификатором EF00 и файловой системой FAT32, по умолчанию грузится и запускается файл \efi\boot\boot[название архитектуры].efi, например \efi\boot\bootx64.efi
Т.е. чтобы, например, создать загрузочную флешку с Windows, достаточно просто разметить флешку в GPT, создать на ней FAT32-раздел и просто-напросто скопировать все файлы с ISO-образа. Boot-секторов больше нет, забудьте про них.
Загрузка в UEFI происходит гораздо быстрее, например, загрузка моего лаптопа с ArchLinux с нажатия кнопки питания до полностью работоспособного состояния составляет всего 30 секунд. Насколько я знаю, у Windows 8 тоже очень хорошие оптимизации скорости загрузки в UEFI-режиме.
Secure Boot

Я видел много вопросов в интернете, вроде:
«Я слышал, что Microsoft реализовывает Secure Boot в Windows 8. Эта технология не позволяет неавторизированному коду выполняться, например, бутлоадерам, чтобы защитить пользователя от malware. И есть кампания от Free Software Foundation против Secure Boot, и многие люди были против него. Если я куплю компьютер с Windows 8, смогу ли я установить Linux или другую ОС? Или эта технология позволяет запускать только Windows?»

Начнем с того, что эту технологию придумали не в Microsoft, а она входит в спецификацию UEFI 2.2. Включенный Secure Boot не означает, что вы не сможете запустить ОС, отличную от Windows. На самом деле, сертифицированные для запуска Windows 8 компьютеры и лаптопы обязаны иметь возможность отключения Secure Boot и возможность управления ключами, так что беспокоится тут не о чем. Неотключаемый Secure Boot есть только на планшетах на ARM с предустановленной Windows!

Что дает Secure Boot? Он защищает от выполнения неподписанного кода не только на этапе загрузки, но и на этапе выполнения ОС, например, как в Windows, так и в Linux проверяются подписи драйверов/модулей ядра, таким образом, вредоносный код в режиме ядра выполнить будет нельзя. Но

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

В Secure Boot есть 2 режима: Setup и User. Первый режим служит для настройки, из него вы можете заменить PK (Platform Key, по умолчанию стоит от OEM), KEK (Key Exchange Keys), db (база разрешенных ключей) и dbx (база отозванных ключей). KEK может и не быть, и все может быть подписано PK, но так никто не делает, вроде как. PK — это главный ключ, которым подписан KEK, в свою очередь ключами из KEK (их может быть несколько) подписываются db и dbx. Чтобы можно было запустить какой-то подписанный .efi-файл из-под User-режима, он должен быть подписан ключом, который в db, и не в dbx.

Для Linux есть 2 пре-загрузчика, которые поддерживают Secure Boot: Shim и PRELoader. Они похожи, но есть небольшие нюансы.
В Shim есть 3 типа ключей: Secure Boot keys (те, которые в UEFI), Shim keys (которые можно сгенерировать самому и указать при компиляции), и MOKи (Machine Owner Key, хранятся в NVRAM). Shim не использует механизм загрузки через UEFI, поэтому загрузчик, который не поддерживает Shim и ничего не знает про MOK, не сможет выполнить код (таким образом, загрузчик gummiboot не будет работать). PRELoader, напротив, встраивает свои механизмы аутентификации в UEFI, и никаких проблем нет.

Shim зависит от MOK, т.е. бинарники должны быть изменены (подписаны) перед тем, как их выполнять. PRELoader же «запоминает» правильные бинарники, вы ему сообщаете, доверяете вы им, или нет.
Оба пре-загрузчика есть в скомпилированном виде с валидной подписью от Microsoft, поэтому менять UEFI-ключи не обязательно.

Secure Boot призван защитить от буткитов, от атак типа Evil Maid, и, по моему мнению, делает это эффективно.
Спасибо за внимание!

Что такое режим загрузки «UEFI с CSM»?

под этот вопрос, мне сказали, что» UEFI с CSM » — это, по сути, режим BIOS. Это меня очень смутило, потому что то, чему я научился за эти годы, далеко не так.

согласно моему наблюдению, я думаю, что CSM-это специальный механизм, который позволяет загружать предыдущую» не каноническую » ОС UEFI.

вот мое наблюдение:

  1. полное название UEFI с CSM is

    UEFI с Модуль Поддержки Совместимости

    который, как следует из названия, является «модулем supprt» для UEFI.

  2. у меня есть три раздела на основном диске в моем компьютере. Диск отформатирован в GPT и три раздела являются один ESP (EFI System Partition) и два основных (Windows 10/Windows 7 каждый из них). Есть три варианта «режим загрузки» в настройках материнской платы, «наследие», «UEFI»и» UEFI с CSM».

    Если это установите значение «Legacy», компьютер скажет мне «операционная система не найдена». Все правильно. Если он установлен в «UEFI с CSM», оба окна загружаются нормально. Если он установлен в «UEFI», то только Windows 10 может загрузиться. Из журнала безопасной загрузки я вижу, что Windows 7 застревает в classpnp.sys.

    Я пытался удалить WindowsSystem32winload.exe С обоих томов (я сделал это в среде Windows To Go), и ничего не пошло не так, поэтому я восстановил файл.

  3. Я подключил другой диск в MBR, containint два раздела. Один основной активный с FAT32 и другой основной с NTFS, с другой установленной Windows 7. Кажется, я, однако, просто не могу заставить его загрузиться, если настройки MB установлены на «UEFI» или «UEFI с CSM», но он отлично загружается, когда установлен на «Legacy». Если я отредактирую BCD в разделе EFI на основном диске, чтобы добавить запись для этой экспериментальной установки Windows 7, он загрузится под «UEFI с CSM», но все равно застрянет в

    classpnp.sys в «UEFI».

  4. у меня есть другой компьютер с материнской платой MSI B85, который имеет переключатель с именем «CSM». Если он включен, то есть две опции, доступные в» режиме загрузки»,» UEFI «и»Legacy». Если он отключен, то режим загрузки блокируется на UEFI. В этом случае режим «UEFI» с включенным CSM позволяет Windows 7 загружаться, но он не будет загружаться с отключенным CSM.

вышеуказанные эксперименты заставили меня поверить ,что «UEFI с CSM» — это особый режим EFI, так почему я все еще говорят, что это BIOS?

источник

Что такое UEFI, и чем он отличается от BIOS? / Habr

Новые компьютеры используют прошивку UEFI вместо традиционного BIOS. Обе эти программы – примеры ПО низкого уровня, запускающегося при старте компьютера перед тем, как загрузится операционная система. UEFI – более новое решение, он поддерживает жёсткие диски большего объёма, быстрее грузится, более безопасен – и, что очень удобно, обладает графическим интерфейсом и поддерживает мышь.

Некоторые новые компьютеры, поставляемые с UEFI, по-прежнему называют его «BIOS», чтобы не запутать пользователя, привычного к традиционным PC BIOS. Но, даже встретив его упоминание, знайте, что ваш новый компьютер, скорее всего, будет оснащён UEFI, а не BIOS.

Что такое BIOS?


BIOS — это Basic Input-Output system, базовая система ввода-вывода. Это программа низкого уровня, хранящаяся на чипе материнской платы вашего компьютера. BIOS загружается при включении компьютера и отвечает за пробуждение его аппаратных компонентов, убеждается в том, что они правильно работают, а потом запускает программу-загрузчик, запускающую операционную систему Windows или любую другую, установленную у вас.

На экране настройки BIOS вы можете изменять множество параметров. Аппаратная конфигурация компьютера, системное время, порядок загрузки. Этот экран можно вызвать в начале загрузки компьютера по нажатию определённой клавиши – на разных компьютерах она разная, но часто используются клавиши Esc, F2, F10, Delete. Сохраняя настройку, вы сохраняете её в памяти материнской платы. При загрузке компьютера BIOS настроит его так, как указано в сохранённых настройках.

Перед загрузкой операционки BIOS проходит через POST, или Power-On Self Test, самотестирование после включения. Она проверяет корректность настройки аппаратного обеспечения и его работоспособность. Если что-то не так, на экране вы увидите серию сообщений об ошибках или услышите из системного блока загадочный писк. Что именно означают звуковые сигналы описано в инструкции к компьютеру.

При загрузке компьютера по окончанию POST BIOS ищет Master Boot Record, или MBR — главную загрузочную запись. Она хранится на загрузочном устройстве и используется для запуска загрузчика ОС.

Вы также могли видеть аббревиатуру CMOS, что расшифровывается, как Complementary Metal-Oxide-Semiconductor — комплементарная структура металл-оксид-полупроводник. Она относится к памяти, в которой BIOS хранит различные настройки. Использование её устарело, поскольку такой метод уже заменили флэш-памятью (также её называют EEPROM).

Почему BIOS устарел?


BIOS существует уже давно и эволюционировал мало. Даже у компьютеров с ОС MS-DOS, выпущенных в 1980-х, был BIOS.

Конечно, со временем BIOS всё-таки менялся и улучшался. Разрабатывались его расширения, в частности, ACPI, Advanced Configuration and Power Interface (усовершенствованный интерфейс управления конфигурацией и питанием). Это позволяло BIOS проще настраивать устройства и более продвинуто управлять питанием, например, уходить в спящий режим. Но BIOS развился вовсе не так сильно, как другие компьютерные технологии со времён MS-DOS.

У традиционного BIOS до сих пор есть серьёзные ограничения. Он может загружаться только с жёстких дисков объёмом не более 2,1 Тб. Сейчас уже повсеместно встречаются диски на 3 Тб, и с них компьютер с BIOS не загрузится. Это ограничение BIOS MBR.

BIOS должен работать в 16-битном режиме процессора и ему доступен всего 1 Мб памяти. У него проблемы с одновременной инициализацией нескольких устройств, что ведёт к замедлению процесса загрузки, во время которого инициализируются все аппаратные интерфейсы и устройства.

BIOS давно пора было заменить. Intel начала работу над Extensible Firmware Interface (EFI) ещё в 1998 году. Apple выбрала EFI, перейдя на архитектуру Intel на своих Маках в 2006-м, но другие производители не пошли за ней.

В 2007 Intel, AMD, Microsoft и производители PC договорились о новой спецификации Unified Extensible Firmware Interface (UEFI), унифицированный интерфейс расширяемой прошивки. Это индустриальный стандарт, обслуживаемый форумом UEFI и он зависит не только от Intel. Поддержка UEFI в ОС Windows появилась с выходом Windows Vista Service Pack 1 и Windows 7. Большая часть компьютеров, которые вы можете купить сегодня, используют UEFI вместо BIOS.

Как UEFI заменяет и улучшает BIOS


UEFI заменяет традиционный BIOS на PC. На существующем PC никак нельзя поменять BIOS на UEFI. Нужно покупать аппаратное обеспечение, поддерживающее UEFI. Большинство версий UEFI поддерживают эмуляцию BIOS, чтобы вы могли установить и работать с устаревшей ОС, ожидающей наличия BIOS вместо UEFI – так что обратная совместимость у них есть.

Новый стандарт обходит ограничения BIOS. Прошивка UEFI может грузиться с дисков объёмом более 2,2 Тб – теоретический предел для них составляет 9,4 зеттабайт. Это примерно в три раза больше всех данных, содержащихся в сегодняшнем Интернете. UEFI поддерживает такие объёмы из-за использования разбивки на разделы GPT вместо MBR. Также у неё стандартизирован процесс загрузки, и она запускает исполняемые программы EFI вместо кода, расположенного в MBR.

UEFI может работать в 32-битном или 64-битном режимах и её адресное пространство больше, чем у BIOS – а значит, быстрее загрузка. Также это значит, что экраны настройки UEFI можно сделать красивее, чем у BIOS, включить туда графику и поддержку мыши. Но это не обязательно. Многие компьютеры по сию пору работают с UEFI с текстовым режимом, которые выглядят и работают так же, как старые экраны BIOS.

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

И это не просто замена BIOS. UEFI – это небольшая операционная система, работающая над прошивкой PC, поэтому она способна на гораздо большее, чем BIOS. Её можно хранить в флэш-памяти на материнской плате или загружать с жёсткого диска или с сети.

У разных компьютеров бывает разный интерфейс и свойства UEFI. Всё зависит от производителя компьютера, но основные возможности одинаковы у всех.

Как получить доступ к настройкам UEFI на современном ПК


Если вы обычный пользователь, перехода на компьютер с UEFI вы и не заметите. Загружаться и выключаться компьютер будет быстрее, а также вам будут доступны диски размером более 2,2 Тб.

А вот процедура доступа к настройкам будет немного отличаться. Для доступа к экрану настроек UEFI вам может потребоваться загрузочное меню Windows. Производители ПК не хотели замедлять быструю загрузку компьютера ожиданием нажатия клавиши. Но нам встречались и такие UEFI, в которых производители оставили возможность входа в настройки тем же способом, какой был в BIOS – по нажатию клавиши во время загрузки.

UEFI – это большое обновление, но произошло оно незаметно. Большинство пользователей ПК не заметят его, и им не нужно беспокоиться по поводу того, что их новый компьютер использует UEFI вместо обычного BIOS. ПК просто будут лучше работать и поддерживать больше современного аппаратного обеспечения и возможностей.

Более подробное объяснение отличий в загрузочном процессе UEFI можно почитать в статье Адама Уильямсона из Red Hat, и в официальном вопроснике UEFI FAQ.

UEFI with CSM что это в биосе?

Всем привет. Ребята, нам нужно разобраться с такой штукой как UEFI with CSM, вот такая сегодня у нас задача. Начал искать в интернете, наткнулся на иностранный форум, там чел пишет что UEFI with CSM это какой-то смешанный режим, в котором доступно как UEFI так и CSM (BIOS). Понимаете? UEFI это новый вид биоса, такой красочный, намного удобнее. А вот старый биос, ну я думаю он всем знакомый, то там все куда примитивнее. Мне показалось что чел в комментарии имеет ввиду что UEFI with CSM это режим типа гибридный — есть функции и UEFI и CSM (обычный биос). Вот такие ребята мои мысли =)

Вот еще на форуме читаю, чел пишет что он вынужден был поставить режим UEFI with CSM, ибо в чистом UEFI не работала загрузка с USB-DVD.

Кстати, когда перевел UEFI with CSM на русский, ну просто для интереса, то вот какой результат:

То есть так и написано — UEFI с CSM =)

Так, постараюсь еще инфы накопать.

Еще нашел такую инфу, гляньте:

Короч я немного понял. Смотрите, опция UEFI with CSM позволяет включить функции современного биоса и старого.. но вот какие именно функции? Я думаю что имеется ввиду как раз загрузочные функции. Ну я уже писал выше — чел не мог загрузиться с USB-DVD, поставил режим UEFI with CSM — и все нормалек. Я точно не знаю — но что-то типа мол современный биос может не поддерживать загрузку некоторых устройств, а вот старый — поддерживать может. И вот режим UEFI with CSM это как раз поддержка функций старого биоса и нового. Вот так я думаю ребята.

Вот еще один чел написал про UEFI with CSM, смотрите:

А вот вам картинка по поводу отличия UEFI биоса от обычного:

Ну это просто вам на заметку.

Еще я вот заметил, что если есть какие-то траблы с установкой винды — то стоит попробовать включить режим UEFI with CSM, может помочь.

Ну а вот этот пункт в биосе, как видите он идет в разделе Boot mode select (но в другом биосе может быть иначе):

Короче ребята.. почитал еще.. почитал.. и понял — UEFI with CSM не совсем понятно что это. Уверен только в одном, что этот режим совмещает функции в себе из современного биоса и старого. Какие функции? Как я писал.. вроде загрузочные. Если выставить просто UEFI — то какое-то устройство может не определиться на этапе загрузки.. или например если винда была поставлена в режиме UEFI with CSM, а вы потом выставите режим UEFI — то винда может не загрузиться.. Вы уж извините, но честно сложно понять =( В общем если все работает четко — трогать этот пункт не советую =)

На этом все друзья, извините если что не так — удачи вам и будьте счастливы, договорились?!

Поддержка CSM — что это в биосе? (Launch CSM)

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

Поддержка CSM в биосе — что это такое?

CSM — функция, позволяющая установить более старую операционку. Например Windows 7, да, это уже к сожалению считается устаревшей системой, а вот можно ли установить XP — неизвестно, вполне возможно что нет..

CSM расшифровывается как Launch Compatibility Support Module, переводится примерно как модуль поддержки запуска в режиме совместимости.

Название функции зависит от модели материнской платы, примеры названия:

  1. Launch CSM
  2. CMS Boot
  3. UEFI and Legacy OS
  4. CMS OS

Часто расположение настройки — раздел Boot (либо раздел, в названии которого указано данное слово).

Все дело в том, что новый формат биоса UEFI не поддерживает загрузку с MBR (Master Boot Record). Теперь используется новый способ разметки — GPT (GUID Partion Table), который поддерживает жесткие диски более 2 ТБ, неограниченное количество разделов и другое. А вот для поддержки и загрузки с MBR — нужна функция CSM.

Опция Launch CSM в биосе ASUS:

Разумеется:

  1. Enabled — включено.
  2. Disabled — отключено.
  3. Auto — автоматически режим, в принципе, можно его использовать, если биос корректно распознает тип загрузочной записи (MBR или GPT).

Просто так настройки биоса никогда не изменяйте. Чревато неприятными последствиями, например винда вообще перестанет загружаться!

Настройка в биосе Гигабайт, здесь она называется CSM Support:

Поддержка CSM — включать или нет?

  1. Наверно уже догадались — включать нужно если вы хотите установить старую винду. Но перед этим убедитесь о наличии дров под ваше оборудование, а также учтите, то новые процы все таки лучше работают с Windows 10. Почему? Новейшие инструкции в процессорах. Касается и Intel и AMD.
  2. Кроме отключения CSM еще часто нужно отключать настройку Secure Boot, которая запрещает устанавливать стороннюю операционную, которая отличается от той, которую предусмотрел производитель. Например — человек купил ноут с Windows 8, а семерку или даже десятку установить не может. Причина именно в этой настройке Secure Boot.

Заключение

Выяснили:

  1. Поддержка CSM — режим, при котором могут работать старые виндовсы. Какие? Именно те, которые используют загрузочную запись MBR.
  2. Включать или нет — зависит от ситуации. Нужно установить старую винду — соответственно включать.

Удачи и добра, до новых встреч!

На главную! 08.10.2019

О UEFI и BIOS — Настройка BIOS

 

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

Однако все несколько сложней…

  1. Код микропрограммы BIOS пишется на ассемблере и он выполняется в 16-битном режиме процессора, но часто совмещает и 16 битные и 32 битные команды. Адресуемая память ограничена 1 Мбайт.
  2. Код микропрограммы UEFI написан на C и выполняется в современном 64-битном режиме.

 

Но далее плюсы UEFI заканчиваются — проблемы при установки ОС, проблемы с Secure Boot UEFI как из-за сырых прошивок как и традиционного подхода корпорации Microsoft — использованием закрытого ключа.

Secure Boot

Secure Boot — это специальный механизм защиты от запуска не подписанного кода — т.е. защищает от подмены загрузчика (в случае с Microsoft – это еще и защита от не лицензионного использования ОС), но в силу ряда причин пользователи часто вынуждены его отключать или же даже по умолчанию он идет в отключенном режиме.

Но сама по себе опция SecureBoot достаточна важна, так как..

 

UEFI — это
  1. по факту самая настоящая операционная система, работающая на неограниченном уровне доступа к ресурсам «ring 0»
  2. имеет собственные драйверы, собственный сетевой стек, полный доступ к всей памяти, устройствам минуя традиционную операционную систему, т.е оборудованием типа RAID/USB/SATA/Ethernet-контролеров могут управляться драйверами UEFI.
  3. пока наиболее распространенная форма UEFI — это отдельный модуль стандартного BIOS, но уже встречаются материнские платы с в которых осуществлен вариант «наоборот».

Как пишет Интел: «UEFI заменяет стандартные решения BIOS и отличается более высокой гибкостью, быстродействием, эффективностью и отсутствием ограничений по размеру драйверов. Модуль поддержки совместимости (CSM) используется для загрузки старых операционных систем и взаимодействия со старым встроенным ПО.»

    В результате без данной защиты процесс получивший администраторские полномочия может сделать с БИОСом что угодно: стереть его, модифицировать некоторые его модули, добавить свои.

     

    Однако учитывая некоторые практические ограничения, в том числе по безопасности пока назвать UEFI полноценной заменой BIOS не представляется возможным.

    Например, пока вы используете legacy-загрузки из MBR или с внешних устройств — Compatibility Support Module полностью обойтись без традиционного БИОС в настоящее время не получиться.

     

    Если в БИОСе нет опции загрузки с USB —  флешка и uefi ?

    Необходимо в UEFI:

    1. в опции Secure Boot поставить Disable,
    2. в опции OS Mode Selection поставить Uefi and Legacy Boot.
    3. после этого появляется возможность загрузки с USB.

     

    Справочно — Расширяемый интерфейс прошивки

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

    • Изначально UEFI поддерживали 64-разрядных ОС. Поддержка 32-двух разрядных операционных систем была включена в UEFI 2.0.
    • Интерфейс, определённый спецификацией EFI, включает таблицы данных, содержащие информацию о платформе, загрузочные и runtime-сервисы, которые доступны для загрузчика операционной системы (ОС) и самой ОС. Некоторые существующие расширения BIOS, типа ACPI и SMBIOS, также присутствуют в EFI, поскольку не требуют 16-разрядного runtime-интерфейса.
    • Менеджер загрузки EFI используется для выбора и загрузки ОС, исключая потребность в специализированном механизме загрузки (загрузчик ОС является приложением EFI).
    • EFI поддерживает графические меню и некоторые возможности, например, осуществленные Aptio или Great Wall UEFI
    • Спецификация EFI включает схему разметки дисков — Master boot record (MBR) и GUID Partition Table (GPT).
    • Расширения EFI могут быть загружены с любого энергонезависимого устройства хранения данных, присоединённого к компьютеру.
    • Прошивки UEFI предоставляет ряд технических преимуществ по сравнению с традиционной системой BIOS:
    1. Возможность загрузки с большими дисками (более 2 TiB ) с таблицей разделов GUID , GPT.
    2. CPU-независимый архитектура
    3. CPU-независимый драйверы
    4. Гибкая среда относительно ОС, в том числе возможность работы в сети
    5. Модульная конструкция

    http://ru.wikipedia.org/wiki/Extensible_Firmware_Interface

      UEFI загрузки

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

      Загрузчики операционных систем представляют собой класс из UEFI приложений. Как таковые, они хранятся в виде файлов на файловой системе , которые могут быть доступны прошивки под названием EFI системный раздел (ESP). UEFI определяет конкретную версию FAT. Поддерживаемые таблицы разделов включают схемы MBR и GPT , а также томов оптических дисков .

      UEFI не полагаться на загрузочный сектор , хотя ESP обеспечивает место для него в рамках обратной совместимости. UEFI загрузку с GPT дисков обычно называют UEFI-GPT. 

      Загрузчики также могут быть автоматически обнаружены в UEFI прошивками, чтобы позволить загрузку со съемного устройства. Автоматическое определение опирается на стандартизированной путь к файлу с загрузчиком операционной системы, в зависимости от фактической архитектуры для загрузки. Формат пути к файлу определяется как <EFI_SYSTEM_PARTITION>/BOOT/BOOT<MACHINE_TYPE_SHORT_NAME>.EFI , например /efi/BOOT/BOOTX64.EFI .

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

      Для обеспечения обратной совместимости, большинство UEFI реализации на ПК класса машин также поддерживают загрузку в стандартном режиме BIOS от МБР-разбитых на разделы дисков, через модуль совместимости поддержки (CSM), которая обеспечивает совместимость с BIOS. При таком сценарии, загрузка выполняется таким же образом, как в традиционных системах на основе BIOS, игнорируя таблицу разделов, опираясь на содержание в загрузочном секторе .

      BIOS загружающиеся с MBR -разбитых на разделы дисков обычно называют BIOS-MBR, независимо от его выполняется на UEFI или традиционные системы BIOS основе. В качестве примечания, загрузка системы устаревшие BIOS на основе из GPT дисков также можно, и это обычно называют BIOS-GPT.

      Несмотря на то, таблицы разделов MBR обязаны быть полностью поддерживается в пределах спецификации UEFI, некоторые UEFI прошивки сразу же переключается на BIOS на базе CSM загрузки в зависимости от типа таблицы разделов загрузочного диска, тем самым предотвращая UEFI загрузку должны быть выполнены из EFI Системные разделы на МБР-разбитых на разделы дисков. Такая схема обычно называется UEFI-MBR.

      Загрузка по сети

      UEFI спецификация включает в себя поддержку загрузки по сети через Preboot Execution Environment (PXE). Основополагающие сетевые протоколы включают Протокол Интернета (IPv4 и IPv6), протокол пользовательских дейтаграмм (UDP), протокол Dynamic Host Configuration (DHCP) и Упрощенный протокол передачи файлов (TFTP). 

      В комплект входит также поддержка загрузочных образов удаленно хранящиеся на сетях хранения данных (SAN), с интернет-интерфейс малых вычислительных систем (ISCSI) и Fibre Channel через Ethernet (FCoE), как поддерживаемых протоколов для доступа к сети.

      Защищенная загрузка

      UEFI 2.2 спецификация добавляет протокол, известный как Secure загрузки, который может обеспечить процесс загрузки, предотвращая загрузку драйверов или загрузчиков ОС, которые не подписали с приемлемым цифровой подписи.


        Еще по настройке БИОС (БИОЗ) плат:

        UEFI — Унифицированный расширяемый микропрограммный интерфейс

        Спецификация UEFI (Unified Extensible Firmware Interface, Унифицированный расширяемый микропрограммный интерфейс, унифицированный расширяемый интерфейс прошивки или расширяемый аппаратный интерфейс), ранее известная как Extensible Firmware Interface (EFI), определяет интерфейс между операционной системой и микрокодом (микропрограммами), управляющим оборудованием. Другими словами, UEFI это интерфейс, который располагается “поверх” аппаратных компонентов компьютера, которые, в свою очередь, функционируют на собственных прошивках (микрокодах).

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

        Для большего понимания, UEFI по сравнению с BIOS — это, грубо говоря, новый тип или следующее поколение прошивки, и оно уже не ограничено только лишь персональными компьютерами архитектуры x86 (IBM PC), но и претендует на всеплатформенный стандарт. Однако, в отличии от BIOS, UEFI базируется на принципиально новой топологии кода, которая называется «драйверность».

        • Основное назначение EFI — замена устаревающей (теряющей актуальность) технологии BIOS и связанных с ней ограничений.
        • Основная цель разработки UEFI заключается в стандартизации взаимодействия операционной системы с микропрограммами платформы в ходе процесса загрузки. В классическом BIOS основным механизмом взаимодействия с аппаратурой на этапе загрузки были программные прерывания и порты ввода-вывода, однако современные системы в состоянии обеспечить более эффективное выполнение операций ввода-вывода между оборудованием и программным обеспечением.
        • Основная задача EFI — корректно инициализировать оборудование и передать управление загрузчику операционной системы. В этом плане задача не сильно то и отличается от задачи традиционного BIOS, но алгоритмы принципиально другие.

        UEFI можно смело назвать самостоятельной миниатюрной операционной системой, которая представляет собой интерфейс между основной пользовательской операционной системой, функционирующей на компьютере и микрокодом оборудования.

        Давайте теперь совершим небольшой экскурс в историю персональных компьютеров, с целью понять причины, которые приводили к попыткам замены стандартного BIOS на что-то принципиально новое.

        Старый-добрый BIOS

        Основные принципы функционирования BIOS (базовой системы ввода-вывода) для персональных компьютеров были определены еще в конце 70х годов прошлого века. На протяжении довольно большого промежутка времени, прошедшего с той поры, компьютерная отрасль интенсивно развивалась, это приводило к тому, что на определенных этапах возможностей BIOS было недостаточно, поскольку выпускаемые производителями устройства имели на борту новые технологии, часто не совместимые с текущими версиями BIOS. Что бы уйти от подобных проблем, разработчикам приходилось порой довольно существенно модифицировать код BIOS, однако целый ряд ограничений так и остался неизменным до настоящего времени. И, если первоначально архитектура BIOS была достаточно простой, то по прошествии времени она неминуемо усложнялась, адаптируясь под все новые и новые технологии, поэтому, к определенному моменту она стала напоминать нагромождение различного рода устаревшего и плохо взаимодействующего между собой кода. Ограничения, которые и по сей день можно встретить в коде BIOS, объясняются необходимостью сохранять совместимость с базовыми функциями, необходимыми для функционирования старого ПО. Всё это привело к тому, что BIOS, по сути, стал самым устаревшим компонентом современных ПК. На данный момент BIOS мало удовлетворяет требованиям новейшего оборудования и имеет следующие недостатки:

        1. 16-битный код, реальный режим. BIOS написан на языке ассемблера и функционирует на 16-битном коде в реальном режиме (real mode) процессора со свойственными ему ограничениями, самое существенное из которых — ограничение адресного пространства памяти объемом 1 Мегабайт.
        2. Отсутствие доступа к 64-битному железу. BIOS не способна напрямую взаимодействовать с 64-битным оборудованием, доминирующим на рынке в настоящее время.
        3. Отсутствие единого стандарта. Для BIOS отсутствует единая спецификация — каждый производитель предлагает собственный вариации реализации.
        4. Сложность разработки. Проблема заключается в том, что практически для каждой очередной модели системной платы производителем разрабатывается собственная версия BIOS, в которой реализуются уникальные технические особенности данного устройства: взаимодействие с модулями чипсета, периферийного оборудования и прч. Разработку BIOS можно разделить на два этапа. На первом этапе создается базовая версия микропрограммы, в которой реализуются те функции, которые не зависят от специфики оборудования. Разработчики подобного кода хорошо известны, это такие компании как American Megatrends (AMIBIOS), Phoenix Technologies (+ приобретенная ею легендарная Award Software (AwardBIOS)) и некоторые другие. На втором этапе к разработке BIOS подключаются программисты производителя материнской платы. Тут уже базовая сборка модифицируется под специфику каждой конкретной модели платы, учитываются ее особенности. После выхода системной платы на рынок, работа над прошивкой продолжается, регулярно выпускаются обновления, в которых исправляются ошибки, добавляется поддержка нового оборудования (например, процессоров) и, иногда даже расширяются функциональные возможности прошивки.

        Все эти, а так же некоторые другие, недостатки традиционной модели BIOS и привели к тому, что коалиция производителей аппаратуры и ПО начала работать над созданием спецификации UEFI. Начиная, по собственным наблюдениям, где-то с 2010 года, спецификация UEFI начала массово внедряться во все вновь выпускаемые материнские платы ведущих производителей, поэтому на данный момент найти новый компьютер с традиционным BIOS практически невозможно. Однако, сильно огорчаться из-за этого не стоит, поскольку многие производители в своих системных платах сохраняют совместимость с функционалом традиционных BIOS. К примеру, очень важным моментом является поддержка традиционного режима загрузки при помощи MBR. С этой целью был разработан UEFI-модуль режима эмуляции BIOS, который носит название Compatibility Support Module (CSM). Правда, я так полагаю, со временем все меньше и меньше производителей будут поддерживать в своих прошивках данный режим.

        Преимущества UEFI

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

        1. Поддержка носителей информации (дисков) большого объема. Поддержкой больших дисков UEFI обязан новому стандарту таблиц разделов под названием GPT (GUID Partition Table). Традиционный способ загрузки в BIOS использовал загрузочный сектор Master Boot Record (MBR), содержащий в себе таблицу разделов, которая описывала размещение разделов (партиций) диска. У записей таблицы разделов в MBR имеется один существенный недостаток: номер первого сектора начала раздела в формате LBA (смещение 08h от начала записи о разделе), имеет разрядность всего-лишь 4 байта (32 бита), соответственно, адресовать возможно только 4 миллиарда секторов. А это, при «классическом» размере сектора в 512 байт, всего-лишь ~2 терабайта дискового пространства. UEFI же, при помощи GPT, дает возможность адресовать диски объемом до 18 экзабайт.
        2. Прямая поддержка файловых систем и таблиц разделов. UEFI имеет модули поддержки файловых систем и таблиц разделов, то есть умеет работать как с таблицами разделов, так и с файловыми системами напрямую. Спецификация подразумевает обеспечение поддержки таблицы разделов GPT, файловых системам FAT12, FAT16, FAT32 на жестких дисках и файловой системы ISO9660 на CD/DVD дисках. Это избавляет нас от необходимости писать код начальной загрузки (по аналогии с MBR), который будет по цепочке грузить загрузчики различных стадий.
        3. Отсутствие других традиционных ограничений MBR. Например больше не требуется втискивать код начальной загрузки в миниатюрный сектор размером в 512 байт. Можно сосредоточиться на написании единого модуля загрузки, который будет совмещать в себе все необходимые стадии.
        4. Независимые от платформы драйвера оборудования. UEFI имеет доступ к аппаратному обеспечению компьютера посредством платформо-независимых драйверов. Производителю устройства достаточно написать всего-лишь одну версию драйвера для всех платформ (x86, ARM, Itanium, Alpha), а это значительно упрощает разработку и ускоряет процесс выявления ошибок. Спецификация UEFI описывает взаимодействие драйверов UEFI с операционной системой, таким образом, в случае, когда в ОС отсутствует драйвер, к примеру, видеокарты, а в UEFI он присутствует, загружен и функционирует, то ОС имеет возможность выводить данные на монитор посредством стандартных интерфейсов UEFI.
        5. Поддержка стека протоколов TCP: IPv4/IPv6. Позволяет использовать богатые сетевые возможности непосредственно из интерфейса UEFI. Теперь можно разрабатывать различные загрузки по http/ftp протоколам, тут же на ум приходит загрузка с указанием URL, по которому лежит обычный EFI-модуль, либо полноценный ISO-образ. Стало возможным обойти уже успевшую стать единственно-возможным вариантом, загрузку по сети с использованием PXE/TFTP. Некоторые, особенно продвинутые реализации, могут реализовать поддержку PXE через IPv6.
        6. Поддержка традиционной модели BIOS. UEFI не нужен классический BIOS, однако многие производители встраивают код эмуляции BIOS с целью поддержки работоспособности старых операционных систем. Называется этот модуль — модулем поддержки совместимости Compatibility Support Module (CSM). CSM включает 16-битный модуль (CSM16), реализуемый изготовителем BIOS, и слой, связывающий CSM16 с инструментарием (интерфейсом и оборудованием). Совместимость подразумевает поддержку загрузки посредством MBR и поддержку на уровне кода программных прерываний (int 10h — видеосервис, int 13h — сервис работы с диском, int 15h — сервисные функции, int 16h — сервис клавиатуры, int 18h — ROM-BASIC сервис, int 19h — сервис начальной загрузки (bootstrap loader)). Поэтому те ОС и ПО, которым для работы как воздух необходим был старый-добрый BIOS, свободно могут работать и на машинах с UEFI.
        7. Интуитивно-понятный интерфейс UEFI. Так называемая “простота управления”. Достаточно спорный момент, невозможно однозначно отнести его к плюсу или минусу. Утверждается, что управление BIOS было не интуитивно, представляя собой плохо документированный, аскетичный текстовый интерфейс, разобраться в котором мог только подкованный в компьютерных технологиях пользователь. В противовес этому, во многих оболочках UEFI поддерживаются графический интерфейс, манипулятор “мышь”, которые в большинстве BIOS просто не реализованы. Однако, если мне не изменяет память, я еще в 90х годах наблюдал попытки реализации поддержки мыши в BIOS от (кажется) Phoenix. Сам интерфейс может быть графическим, по мнению некоторых — более дружелюбным и интуитивным для большинства, но может быть и традиционным, то есть схожим с классическим текстовым, тут все зависит от предпочтений разработчика и позиционирования оборудования. Имеется возможность поддержки нескольких языков.
        8. Скорость работы UEFI. Утверждается, что код UEFI выполняется быстрее кода традиционного BIOS (хотя и написан на C), за счет того, что целиком написан “с нуля”, без необходимости «волочить» за собой обоз устаревшего кода поддержки различного нестандартного железа и разнообразных логических анахронизмов.
        9. Скорость загрузки ОС. Утверждается, что с UEFI загрузка происходит существенно быстрее. Достигается это за счет распараллеливания инициализации устройств, в противоположность BIOS, который инициализировал оборудование последовательно, а так же уменьшения времени запуска по причине отсутствия необходимости искать загрузчик методом перебора всех устройств (загрузчик указывается в UEFI и вызывается непосредственно). Склонен поверить, поскольку подтвердить либо опровергнуть на данный момент не могу. Однако, если измерить сколько времени уходит на моей старой машинке на Celeron 450/GA-G31M-ES2L с SSD с момента включения и до появления окна авторизации оптимизированной Windows XP, то получится всего 23 секунды. Вероятно, для определенных категорий устройств этого будет недостаточно.
        10. UEFI — мини ОС. Можно, конечно же, обозвать UEFI миниатюрной операционной системой, и это, от части, будет справедливо, но корректнее считать её виртуальной платформой, которая предоставляет интерфейсы к оборудованию. Можно работать только в консоли, а можно написать и полноценный графический интерфейс. UEFI, при наличии модулей необходимого функционала, может, к примеру, помочь разобраться в проблемах загрузки основной ОС, или выполнить другие сервисные функции.
        11. Дополнительные программные модули. Непосредственно до загрузки операционной системы с носителя UEFI позволяет запускать собственные UEFI-модули и драйвера широкого назначения: по работе с сетью, диском (архивация/бэкап/антивирус), конфигурацией параметров, тестированию оборудования. Очевидно, что с популяризацией стандарта список UEFI-приложений будет только расширяться. Уже сейчас можно даже написать полноценную игру, разработать собственную консоль для сервисных нужд в виде отдельного UEFI-модуля (пример: shell.efi), интернет-браузер, обеспечить работу с медиаданными (просмотр фильмов, прослушивание музыки), организовать резервное копирование дисков.
        12. UEFI содержит встроенный менеджер загрузок. То есть, реализует собственный загрузчик кода ОС, который очень функционален и может выступать аналогом знакомых нам по не столь далекому прошлому мультизагрузчиков нескольких операционных систем.
        13. Размер блока ввода-вывода. В UEFI при чтении используется особый размер блока EFI ввода-вывода, позволяющий читать по 1Мб данных (в BIOS ограничение – 64Кб).
        14. Безопасность. Якобы UEFI защищена от вредоносного кода этапа загрузки. Утверждается, что вредоносный код не может загрузить себя до загрузки операционной системы, перехватив тем самым управление. Это достигается и за счет подписывания всего подряд в самой прошивке, так и за счет существования безопасной процедуры загрузки под названием “Secure Boot”.
        15. Простота масштабирования функционала. Прошивка UEFI может легко расширяться — достаточно вставить поддерживаемый накопитель (к примеру USB-флешку). После этого с внешнего устройства можно подключить дополнительные драйверы, приложения UEFI. Если подумать, тем самым открываются прекрасные возможности расширения функционала, которые нельзя было получить с помощью традиционного BIOS, поскольку он был ограничен исключительно зашитым в ROM кодом. В UEFI же можно «подсунуть» драйвер новой железки непосредственно еще на стадии работы UEFI, то есть до начала загрузки операционной системы, и получить доступ к функционалу этого устройства.
        16. Код UEFI функционирует в 32-/64-битном режиме. Со всеми вытекающими .. преимуществами. Если быть уж совсем честным, то всё же UEFI использует реальный режим в самом начале для выполнения некоторых задач инициализации платформы, однако очень быстро уходит в защищенный/длинный режим.
        17. Поддержка альтернативных средств ввода. UEFI обеспечивает поддержку альтернативных средств ввода данных, таких как виртуальные клавиатуры и сенсорные дисплеи. Это достаточно актуально в нашу эпоху различных мобильных гаджетов.

        Недостатки UEFI

        А теперь хотелось бы осветить недостатки технологии UEFI:

        1. Усложнение архитектуры. Все преимущества EFI не являются настолько уж значимыми перед основным её недостатком — усложнением структуры кода. Значительное увеличение объема кода, его логическое усложнение никак не способствуют облегчению разработки, скорее даже наоборот. А ведь до и параллельно с UEFI, альтернативой устаревшей модели BIOS были открытые реализации, к примеру OpenBIOS, которые были отвергнуты.
        2. Secure Boot. Тут разработчики операционных систем решили сразу несколько проблем: частично проблему пиратства, исключив обход активации путем внедрения активаторов в этапы загрузки, проблему вредоносного кода (вирусов) стадии загрузки и проблему сохраняющих популярность устаревших операционных систем, с которых ну никак не хотят уходить пользователи 🙂 В действительности вышло так, что в отдельных особенно умных устройствах, из-за наличия не отключаемой опции «Secure Boot», зачастую невозможно установить никаких ОС кроме систем линейки Windows версии 8+, поскольку сертифицированные загрузчики на данный момент имеют лишь последние. Согласитесь, смахивает на довольно топорный способ борьбы со скупыми пользователями и конкурентами, хотя сама Microsoft всячески отрицает подобную ситуацию. Одним словом, технология способна доставить массу неудобств, хорошо хоть у большинства вендоров эта опция (пока еще) отключается в настройках.
        3. Невозможность установки старых ОС (в некоторых случаях). Невозможно установить старые системы при отсутствии режима совместимости (CSM).
        4. Отступление от стандарта. Каждый производитель аппаратных компонентов по своему усмотрению модифицирует UEFI, тем самым создавая для пользователя дополнительные трудности, фактически возвращая нас в хаос BIOS? Например, на различных устройствах менеджер загрузки может быть реализован по-разному, при этом иметь достаточно существенные отступления от рекомендаций спецификации UEFI. На практике, иногда попадались забагованные UEFI, которые игнорировали параметры списка загрузки NVRAM и просто грузили код из \EFI\Microsoft\Boot\bootmgfw.efi или EFI/BOOT/bootx64.efi. Или менеджер загрузки в одних реализациях может содержать комбинированный список из MBR и GPT устройств, в других же разные списки загрузки, что вводит некоторую сумятицу.
        5. Внедрение средств контроля контента. Стандарт UEFI предусматривает наличие неких драйверов, которые будут перехватывать вызовы операционной системы, таким образом можно реализовать DRM (Digital Restrictions Management, технические средства защиты авторских прав). Суть алгоритма следующая: человеку, у которого все работает, предлагается за его же счет установить такое программное обеспечение или оборудование, чтобы часть функций в его работающих системах воспроизведения цифрового контента (компьютеры, мультимедиа-плееры и др.) более не работала привычным образом. Существуют небезосновательные опасения, что создание UEFI — это завуалированный способ введения в ПК нежелательных для конечного пользователя функций.
        6. Возможность внедрения нежелательных модулей. Невозможно гарантировать, что операционная система на 100% контролирует компьютер, если она загружается с помощью UEFI!

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

        В процессе разработки UEFI, разработчика, с самого начала, были установлены жесткие рамки для каждого процесса, участвующего в ходе выполнения. Первые три фазы (SEC, PEI, DXE) подготавливают платформу для загрузчика ОС, четвертая фаза (BDS) непосредственно производит загрузку загрузчика ОС. Давайте попробуем разобрать алгоритм работы UEFI и подробнее рассмотреть все его фазы.

        • Фаза SEC. (Security, Безопасность). Фаза безопасности. Все должно быть подписано и проверено иначе не будет запущено!
          • Очистка CPU кэша.
          • Запуск главной процедуры инициализации в ROM.
          • Переход в защищенный режим работы процессора.
          • Инициализируются MTRR (диапазонные регистры типа памяти) для BSP.
          • Запуск патчей микрокода для всех установленных процессоров.
          • Начальная работа с BSP/AP. BSP = Board Support Package. AP = Application Processor. Каждое ядро может быть представлено как BSP + AP. Всем AP рассылается IIPI (Init Inter-processor Interrupt), затем SIPI (Start-up Inter-processor Interrupt).
          • Передача данных и управления в фазу PEI.
        • Фаза PEI. (Pre-EFI Initialization, Пред-EFI Инициализация). Подготовка платформы (памяти и обнаруженных устройств) для главной процедуры инициализации системы в фазе DXE.
          • Перенос данных из ROM в кеш.
          • Инициализация CRTM (Core Root for Trust of Measurement). Это набор инструкций, который запускается платформой в ходе выполнения RTM-операций.
          • Загружается диспетчер PEI. Диспетчер загружает серию модулей (PEIM), которые варьируются в зависимости от платформы. Эти модули завершают оставшиеся задачи PEI. Стадия завершается, когда все модули загружены.
          • PEIM: Загружаются и запускаются модули инициализации процессоров. (пример: модуль кеша процессора, модуль выбора частоты процессора). Инициализируются процессоры.
          • PEIM: Встроенные интерфейсы платформы инициализируются (SMBus). Инициализируются MCH (Memory Controller Hub), ICH (I/O Controller Hub).
          • PEIM: инициализация памяти. Инициализация основной памяти и перенос в нее данных из кэша.
          • Проверка режима S3. Нет — передача управления в фазу DXE. Да — восстановление исходного состояния процессора и всех устройств и переход к ОС.
        • Фаза DXE. (Driver eXecution Environment, Среда загрузки драйверов). Загрузка компонентов этой фазы базируется на ресурсах, которые были инициализированы в фазе PEI. Фаза окончательной инициализации всех устройств. Запуск служб UEFI: Boot Services, Runtime Services и DXE Services.
          • Загружается ядро DXE. Создается инфраструктура DXE: создаются необходимые структуры данных, база данных хендлов. Включает основные интерфейсы DXE. Запускает ряд сервисов: сервисы этапа загрузки (Boot Services), сервисы этапа выпонения (Runtime Services), сервисы фазы DXE (DXE Services).
          • Запуск диспетчера DXE. Посредством переданного из PEI списка Hand-off Block структур (HOB list) определяет доступные Firmware Volume (FV, структурированная база данных исполняемых модулей DXE: драйверов и приложений) и ищет в них драйвера, запускает их, соблюдая зависимости. В этот момент производится активация остальных компонентов, причем одновременно нескольких. Диспетчер грузит все доступные драйвера со всех доступных носителей.
          • Загрузка драйвера SMM Init. Инициирует подфазу. SMM (System management mode) — один из привилегированных режимов исполнения кода x86-процессора, в котором процессор переключается на независимое адресное пространство, сохраняет контекст текущей задачи, затем выполняет необходимый код, затем возвращается в основной режим. Зачем нам SMM? А потому что в этом режиме можно сделать с системой все что угодно и не зависимо от ОС. Код SMM может исполняться и после окончания фазы DXE.
          • Запускается UEFI Boot Manager. Это происходит после запуска всех драйверов. Управление передается в фазу BDS.
        • Фаза BDS. (Boot Device Selection, Выбор устройства загрузки). Реализует политику загрузки платформы. Основная задача — подключить устройства, необходимые для загрузки, выбрать (вручную или автоматически) устройство загрузки и загрузиться с него. Зачастую выполняет рекурсивный поиск по всем доступным FV и пытается найти доступный для загрузки контент.
          • Инициализируются консольные устройства, описываемые переменными окружения ConOut (ConsoleOutHandle), ConIn (ConsoleInHandle), StdErr (StandardErrorHandle).
          • Загружаются UEFI-драйвера устройств, перечисленные в переменной окружения DriverOrder (содержащей опций Driver#### в порядке загрузки).
          • Загружается UEFI-приложение с устройства загрузки Boot####. Списки устройств содержатся в глобальной переменной окружения BootOrder в порядке очередности загрузки.
          • Если не смогли выполнить что-либо из вышеперечисленного, то вызываем диспетчер DXE для проверки обеспечения зависимостей дополнительных драйверов с момента последнего вызова диспетчера. После чего управление опять возвращается в фазу 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:

        Как мы видим, UEFI Boot Manager парсит BootOrder, то есть загружает путь устройства каждого элемента Boot#### в порядке, заданном значением переменной BootOrder и пытается выполнить загрузку с указанного устройства. В случае ошибки менеджер загрузки переходит к следующему элементу. Кроме этого, формируется так называемый список загрузки. Этот список актуален для интерфейса настроек UEFI и выглядит как привычное стандартное меню загрузки (Boot Menu). UEFI Boot List формируется на основе переменной BootOrder и используется для внесения пользователем изменений в очередность и конфигурацию устройств загрузки.
        А как же формируется сама BootOrder? А очень просто, например в процессе установки операционной системы Windows, инсталлятор создает раздел ESP (в случае его отсутствия) на установочном диске, форматирует данный раздел в файловую систему FAT, затем помещает свой загрузчик (для Windows 7+ это файл bootmgfw.efi) и некоторые другие файлы по пути \EFI\Microsoft\Boot\. По окончании установки ОС, инсталлятор Windows создает переменную в EFI NVRAM с именем Boot#### (где #### — шестнадцатеричный номер), ссылающуюся на менеджер загрузки Windows с именем bootmgfw.efi.

        Требования к загрузочным носителям 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

        \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+ и содержит код начальной стадии загрузки операционной системы, то есть начинает процесс загрузки ОС. Его цель — подготовить структуры данных, загрузить ядро ОС в память и передать ему управление.
        В спецификации описана поддиректория /EFI/Boot. Данная поддиректория используется как расположение «по умолчанию», то есть в ситуации, когда по каким-либо причинам в NVRAM сбивается (не настроен) какой-либо загрузчик. Для подобного случая в данной директории располагается так называемый «загрузчик по-умолчанию» (fallback boot loader), который имеет стандартизованное наименование BOOT{тип_архитектуры}.efi

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

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

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

        \EFI

            \BOOT

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

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

        АрхитектураИмя файлаПоле PE «machine type»
        x86 (32-битная)BOOTIA32.EFI0x14c
        x64 (64-битная)BOOTx64.EFI0x8664
        ItaniumBOOTIA64.EFI0x200
        AArch42BOOTARM.EFI0x01c2
        AArch64BOOTAA64.EFI0xAA64

        Некоторые реализации UEFI были «забагованы», они некорректно обрабатывали (либо попросту игнорировали) значение глобальной переменной BootOrder, содержащей порядок вариантов запуска (load option entry) и всегда первым грузили модули /EFI/Microsoft/Boot/bootmgfw.efi либо /EFI/BOOT/bootx64.efi.

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

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

        Leave a comment