Boot legacy os: Чем uefi boot от legacy boot отличается? — Хабр Q&A
загрузка — Как загрузить устаревшую ОС на MBR-диск с кодом uefi
Во-первых: зачем беспокоиться? Это может звучать как ехидное и пренебрежительное замечание, но это серьезный вопрос. Существует законных причин для загрузки ОС в режиме BIOS на компьютере с EFI, но ваш вопрос не мотивирует для этого. С точки зрения программирования эта задача непростая; и, как вы говорите, целевой ОС является Windows 7, которая поддерживает загрузку в режиме EFI, мне даже отдаленно не ясно, стоит ли это усилий. Кроме того, есть три существующих способа сделать это без написания нового кода….
Первый способ сделать это — использовать встроенный менеджер загрузки вашего компьютера. В нем должны быть представлены варианты загрузки любой ОС в режиме EFI, которую вы установили, или в режиме BIOS/CSM/устаревшем режиме. Однако сведения о том, как получить доступ к этому меню, различаются от одного компьютера к другому, и детали того, что будет отображаться в меню, будут различаться. Чаще всего загрузки в режиме BIOS с дисков идентифицируются по производителю или номеру модели диска, тогда как записи в режиме EFI получают имена, связанные с ОС, например 9.0009 Диспетчер загрузки Windows . Результат использования этого метода будет не совсем таким, как вы описываете (а именно, запуск Windows из вашего собственного приложения EFI), но он может соответствовать вашим потребностям.
Второй способ — использовать мой диспетчер загрузки rEFInd. Как и встроенный диспетчер загрузки компьютера, rEFInd позволяет запускать загрузчики в режиме BIOS или в режиме EFI (при условии, что прошивка поддерживает оба). Одно предостережение заключается в том, что на ПК с UEFI эта функция по умолчанию отключена; вы должны отредактировать refind.conf
, чтобы раскомментировать строку scanfor
и убедиться, что среди вариантов есть hdbios
. (Если целевая ОС в режиме BIOS находится на внешнем диске или компакт-диске, для них есть другие ключевые слова — подробности см. в комментариях к файлу refind.conf
.) Подобно встроенному диспетчеру загрузки, это решение победило. ‘t ровно делайте то, что вы говорите, что хотите, но этого может быть достаточно. Кроме того, вы можете запустить приложение rEFInd, которое вы можете настроить с коротким временем ожидания для запуска ОС в режиме BIOS по умолчанию. Этот подход будет иметь именно тот эффект, который вы хотите, хотя rEFInd несет значительные накладные расходы, поэтому это будет довольно неэлегантное решение.
rEFInd также имеет отношение к вашему вопросу, потому что он включает в себя код, который делает то, что вы хотите. Вам следует сосредоточиться на файлах исходного кода refind/legacy.c
и EfiLib/legacy.c
. Имейте в виду, однако, что rEFInd включает в себя два совершенно разных пути загрузки BIOS/CSM/устаревшего режима, один для Mac и один для ПК на базе UEFI. Поскольку вы имеете в виду именно UEFI, скорее всего, вам нужен последний, а не первый. В файле refind/legacy.c
код UEFI в основном находится в функциях, имена которых содержат строку 9.0009 UEFI ; остальные функции предназначены для Mac. Файл EfiLib/legacy.c
содержит исключительно код пути UEFI; но большинство этих функций взяты из TianoCore EDK2, поэтому вам может не понадобиться их дублировать. (Поскольку rEFInd предназначен для сборки либо с EDK2, либо с GNU-EFI, в итоге я извлек много кода EDK2, чтобы его можно было собрать с помощью GNU-EFI.) OTOH, эти функции могли быть изменены по сравнению с их истоками EDK2. , поэтому вам может потребоваться дополнительная настройка, чтобы все работало правильно, если вы используете оригиналы EDK2. Обратите внимание, что rEFInd использует GPLv3, поэтому, если вы собираетесь распространять свою программу, использование кода rEFInd потребует использования GPLv3 или совместимой лицензии.
Третий способ сделать это — использовать диспетчер загрузки Clover. Это менеджер загрузки Hackintosh, который, как и rEFInd, частично получен из более старого (и теперь заброшенного) менеджера загрузки rEFIt. Как и rEFInd, Clover включает код для запуска ОС в режиме BIOS; однако он делает это иначе, чем rEFInd. Вы можете использовать Clover почти так же, как rEFInd, либо как часть вашего пути загрузки, либо как образец кода для извлечения и включения в вашу собственную программу. Хотя на странице Clover Sourceforge говорится, что она использует лицензию BSD, это не совсем так; в некоторых файлах исходного кода указано, что он использует GPL.
К сожалению, как вы скоро узнаете, если начнете просматривать код rEFInd или Clover, задача запуска загрузчика в режиме BIOS из EFI нетривиальна; Я не могу просто подбросить вам несколько строк кода. Также имейте в виду, что я сам не писал этот код; Код rEFInd был добавлен в проект кем-то другим, и хотя я просмотрел код Clover, я не могу утверждать, что понял его. Я немного изменил загрузочный код rEFInd в режиме BIOS, но, возможно, я не смогу оказать вам большую помощь в адаптации его к вашей собственной программе.
uefi — Должны ли и Windows, и Linux находиться в устаревшем режиме загрузки во время двойной загрузки?
На большинстве компьютеров две ОС не должны быть в одном и том же режиме загрузки, но полезно — очень полезно — чтобы обе они находились в одном и том же режиме загрузки.
Детали сильно различаются от одного EFI к другому, но во всех, кроме некоторых очень старых EFI, операционные системы в режиме BIOS устанавливаются с использованием модуля поддержки совместимости (CSM), который является своего рода эмулятором BIOS для прошивки EFI. CSM можно включать и выключать, либо устанавливая параметры в прошивке, либо самой прошивкой, когда она обнаруживает какие-либо ключевые вещи, запускающие использование или неиспользование CSM. К сожалению, очень мало стандартизировано то, как разные EFI (и, следовательно, компьютеры) определяют, какой режим загрузки использовать, когда оба активны. Это делает CSM темпераментной и сложной в использовании вещью. При этом обычно существует два способа управления операционными системами, использующими разные режимы загрузки:
- Использование встроенного диспетчера загрузки — Все EFI имеют какой-либо встроенный диспетчер загрузки, но сведения о том, как они используются, варьируются от одной машины к другой. Как правило, вы получаете доступ к диспетчеру загрузки, нажимая функциональную клавишу (обычно F8 или выше), Del или Enter вскоре после включения компьютера. Это действие создает меню параметров загрузки. Некоторые из них загрузят компьютер в режиме EFI, а другие — в режиме BIOS. Записи EFI обычно либо называются ОС, которая их устанавливает (например,
Ubuntu
илиДиспетчер загрузки Windows
) или включите строку «UEFI». Записи BIOS, скорее всего, описывают загрузочный носитель BIOS, например имя жесткого диска. Таким образом, вы можете переключаться между BIOS-режимом Windows и EFI-режимом Ubuntu, выбирая жесткий диск по имени вместо записи под названиемubuntu
в диспетчере загрузки. - Использование rEFInd — Мой диспетчер загрузки rEFInd представляет собой автономный диспетчер загрузки, который может делать что-то похожее на то, что может делать диспетчер загрузки EFI, но работает более или менее одинаково на любом компьютере на основе EFI. (Маки — исключение; CSM в Mac уникален, поэтому rEFInd обрабатывает Mac по-разному.) По умолчанию поддержка CSM rEFInd неактивна, поэтому вы не увидите параметры загрузки в режиме BIOS. Если раскомментировать
сканируйте строку
вrefind.conf
и убедитесь, чтоhdbios
находится среди вариантов, вы увидите серый ромбовидный значок для вашего жесткого диска, который запустит любой загрузчик режима BIOS, который он содержит. Это в дополнение к любым загрузчикам режима EFI, которые содержит диск. Таким образом, вы можете переключаться между загрузчиками BIOS-режима и EFI-режима.
Ни один из этих инструментов не гарантирует работу; в некоторых EFI отсутствуют CSM, поэтому они вообще не могут загружаться в режиме BIOS. (Очевидно, что это не ваш случай.) Кроме того, некоторые очень ранние EFI для x86-64 фактически были реализованы поверх BIOS, поэтому они загружаются в режиме BIOS с использованием базового BIOS. У этих EFI нет CSM, поэтому менеджер загрузки работает по-другому, и rEFInd не может загружаться в режиме BIOS. Скорее всего, у вас нет такой системы, но вполне возможно, что она у вас есть.
Обратите внимание, что CSM должен быть активен, чтобы он был полезен, но его активация не гарантирует (обычно) его использование. Это то, что делает возможным переключение режимов загрузки с одной загрузки на другую, не изменяя настройки прошивки. Тем не менее, если на вашем компьютере установлены только загрузчики в режиме BIOS, загрузка в режиме EFI становится невозможной (до тех пор, пока вы не подключите загрузочный носитель EFI или не установите загрузчик EFI). Еще раз, я хотел бы подчеркнуть, что существуют тонкие (и не очень) различия между компьютерами, что очень затрудняет предоставление общих советов.
С практической точки зрения, эта информация для вас в основном академическая. Учитывая существующую установку Windows в режиме BIOS, вам, вероятно, также следует установить Ubuntu в режиме BIOS. Хитрость заключается в том, чтобы знать режим, в котором загружается установщик.