1

Я использую встроенную плату, которая поддерживает UEFI. Это новая платная плата, которая поставляется с американским BIOS Megatrends и оболочкой UEFI (я больше привык работать с загрузчиком, а не с BIOS на встроенной плате).

Детали платы не так важны.

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

Так как это оборудование будет УДАЛЕННЫМ элементом, нет никакой возможности уйти в никуда, вставить USB и перепрошить эту вещь.

Я хотел бы написать скрипт, чтобы заставить BIOS Shell делать это. Если машина подключена и мы повредили загрузочный сектор в развернутой системе, я хотел бы автоматически запустить последовательность восстановления. Это возможно? Могу ли я сделать это с помощью оболочки UEFI? Это выполнимо в любом случае?

Теперь я понимаю, что UEFI был создан для обеспечения «безопасной» загрузки, возможно, я делаю противоположное тому, что предполагалось сделать!

1 ответ1

2

EFI не использует загрузочный сектор диска. Таким образом, я подозреваю, что вы неправильно понимаете, что происходит с вашей системой. Я предполагаю , что вы на самом деле повреждаете записи NVRAM, которые содержат порядок загрузки устройства. Самый простой способ решить эту проблему - не использовать эти записи, а вместо этого назвать свой загрузчик EFI/BOOT/bootx64.efi (или, в более общем случае, boot{arch}.efi , где {arch} - это код архитектуры; x64 - это код архитектуры для x86-64). Если вы по какой-либо причине не хотите этого делать, и если ваша оболочка EFI является оболочкой версии 2 , вы можете использовать команду bcfg в сценарии оболочки EFI для выполнения этой работы. Эта команда документирована в разной степени в разных местах, таких как Arch Linux wiki и сайт Intel. К сожалению, более старая EFI-оболочка версии 1 не поддерживает команду bcfg , поэтому эта опция не будет работать с ней, хотя может быть возможно извлечь соответствующий код из исходного кода TianoCore и создать отдельную команду bcfg которую вы могли бы использовать. использовать со старой оболочкой.

Если вам действительно необходимо записать в MBR, то написание приложения EFI на C может быть лучшим выбором, чем попытка сделать это в оболочке EFI. Существует много документации по программированию EFI, но в большинстве своем она похожа на справочные страницы по Unix - предполагается, что вы уже знаете тему и просто должны проверить детали. Я написал краткое введение в учебное пособие, но оно очень простое и не охватывает дисковый ввод-вывод. (Вы можете использовать это и исходный код для gptsync , который включен в последние пару версий rEFInd , чтобы узнать, как читать и записывать MBR диска.)

Если я правильно понимаю, что бы вы ни делали (кроме случаев, когда достаточно использовать запасное имя файла), вам нужно будет вписать его в обычную последовательность загрузки. Это было бы возможно либо с помощью программы оболочки EFI, запущенной по умолчанию, либо в виде двоичной программы; но вы должны быть уверены, что ваша пользовательская программа завершает работу, запуская "настоящий" загрузчик, или что "настоящий" загрузчик запускается после новой программы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .