Прошивка BIOS обычно представляется в формате бинарного файла, который может иметь различные расширения, такие как .bin, .rom или .cap, в зависимости от производителя материнской платы. Этот файл содержит код, критически важный для инициализации оборудования и загрузки операционной системы.
При обновлении BIOS важно использовать совместимую прошивку, специфичную для вашей модели материнской платы, так как несовместимые файлы могут привести к неполадкам или полной неработоспособности системы. В большинстве случаев, производители предоставляют программные утилиты, которые упрощают процесс обновления и помогают загрузить прошивку в нужном формате.
Формат файла биос для прошивки
BIOS, или базовая система ввода-вывода, является ключевым компонентом любого компьютера. Он выполняет критически важные задачи при загрузке операционной системы и управляет основными функциями системы. Если необходимо обновить BIOS, потребуется специальный файл прошивки, который обладает своим уникальным форматом.
Файловый формат BIOS для прошивки может отличаться в зависимости от производителя материнской платы или компьютера. Среди популярных форматов можно выделить BIN, ROM, CAP и другие. Каждый из этих форматов имеет свои характеристики и требует специфического программного обеспечения для корректной прошивки.
Как правило, файлы BIOS названы в соответствии с моделью материнской платы или компьютера, для которых они предназначены. Эти файлы можно скачать с официального сайта производителя или получить от реселлеров оборудования. Крайне важно проверить, что выбранная вам версия прошивки соответствует специфическим требованиям вашей системы, чтобы предотвратить потенциальные проблемы и несовместимости.
Процесс прошивки BIOS представляет собой ответственную задачу, которая требует надежного и стабильного соединения с электропитанием компьютера, а также аккуратности и внимания к деталям. Если неправильно прошить BIOS, это может привести к неполадкам системы и даже поломке компьютера.
Что такое BIOS?
Основные задачи BIOS включают проверку и тестирование компонентов системы при включении компьютера, настройку и инициализацию аппаратных устройств, управление энергетическими ресурсами, а также предоставление интерфейса для операционной системы и различных программ.
BIOS передает системе информацию и осуществляет функции сохранения и загрузки конфигураций, таких как дата и время, порядок загрузки устройств, а также различные параметры BIOS. Кроме того, BIOS отвечает за своё обновление, что обычно осуществляется с помощью процедуры, известной как "обновление прошивки" или "флэш-прошивка".
Существует несколько разновидностей BIOS, включая традиционный стандартный BIOS и современный UEFI (Unified Extensible Firmware Interface). UEFI предоставляет более прогрессивный и адаптивный метод управления системой, обладая рядом преимуществ по сравнению с обычным BIOS, такими как поддержка большого числа устройств и возможность разделения жесткого диска на несколько разделов размером свыше 2 ТБ.
В целом, BIOS является важным компонентом компьютерной системы, выполняющим ключевую функцию инициализации и настройки оборудования при запуске компьютера.
Определение BIOS и его назначение
BIOS (Basic Input Output System), или базовая система ввода-вывода, представляет собой программное обеспечение, которое встроено в материнскую плату компьютера. Оно отвечает за инициализацию и проверку работоспособности аппаратных компонентов, а также за загрузку операционной системы компьютера.
Основная функция BIOS заключается в обеспечении необходимого взаимодействия между аппаратными компонентами и программным обеспечением компьютера. Оно выполняет несколько ключевых задач:
- Инициализация аппаратных компонентов. BIOS проверяет, что все аппаратные устройства находятся в исправном состоянии и готовит их к работе перед загрузкой операционной системы.
- Запуск операционной системы. После завершения проверки аппаратных компонентов BIOS передает управление операционной системе, начиная процесс ее загрузки с устройства хранения, такого как жесткий диск или CD-ROM.
- Управление периферийными устройствами. BIOS отвечает за настройки и управление различными периферийными устройствами, такими как клавиатура, мышь, монитор и принтер, обеспечивая их правильную работу и взаимодействие с операционной системой.
- Конфигурация системных настроек. BIOS предоставляет возможность пользователю регулировать различные системные настройки, включая порядок загрузки устройств, параметры оперативной памяти, частоты процессора и прочие. Эти параметры сохраняются в памяти BIOS и используются при каждом включении компьютера.
Таким образом, BIOS играет ключевую роль в работе компьютера, обеспечивая его нормальную функциональность, согласованное взаимодействие аппаратных компонентов и загрузку операционной системы. Без BIOS компьютер не будет способен выполнять свои функции и решать поставленные задачи.
Зачем нужен файл BIOS для прошивки?
Обновление BIOS требуется для модернизации устаревших версий, устранения неполадок и повышения функциональных возможностей ПК. С помощью прошивки можно внедрять новые особенности и функции, а также исправлять существующие ошибки и проблемы.
Обновление BIOS может стать необходимым при установке нового оборудования, поскольку это позволяет системе правильно идентифицировать и взаимодействовать с новыми компонентами. К тому же, обновление BIOS может повысить стабильность работы системы и улучшить совместимость с операционной системой.
Файл для прошивки BIOS имеет специфичный формат, разработанный производителями материнских плат. Этот формат может отличаться у разных брендов, но, как правило, файл BIOS представляет собой исполняемый код, который загружается при старте компьютера.
Процесс загрузки файла BIOS осуществляется в ходе прошивки, выполняемой с использованием специализированного программного обеспечения. Важно проявлять осторожность во время прошивки, так как ошибочные действия могут вызвать серьезные неисправности в работе компьютера.
Файл BIOS, предназначенный для прошивки, играет ключевую роль в функционировании компьютера, и его обновление способно существенно изменить производительность системы и доступные функции. Поэтому следует регулярно проверять актуальность версии BIOS и обновлять ее, если это необходимо.
Объяснение непосредственного значения файла BIOS при прошивке
В ходе прошивки файл BIOS играет ключевую роль. Он содержит коды и настройки, которые определяют функционирование компьютера, а также параметры и опции, контролируемые BIOS.
Файл BIOS содержит инструкции для работы процессора, чипсета, контроллеров устройств и системных настроек. При прошивке он заменяет предыдущую версию BIOS, что позволяет обновить функциональность и устранить ошибки.
Важно отметить, что файл BIOS должен быть совместим с конкретной моделью материнской платы и оборудованием компьютера. Файл BIOS, предназначенный для одного компьютера, может не работать на другом, так как разные модели могут иметь различные характеристики и требования.
При обновлении BIOS настоятельно рекомендуется использовать только официальные версии, предлагаемые производителем компьютера или материнской платы. Это гарантирует совместимость и надежность функционирования системы.
Неправильная прошивка BIOS может повредить систему, и восстановление может потребовать специальных знаний или помощи экспертов.
Файл BIOS критически важен при обновлении, так как он определяет работу аппаратных компонентов и настройки системы, следовательно, прошивка должна выполняться с осторожностью и в соответствии с рекомендациями производителя.
Каковы форматы файлов BIOS?
Файлы BIOS представлены в уникальных форматах, разработанных для обновления материнских плат и прочих приборов. Каждый производитель зачастую применяет индивидуальный формат, что может создать проблемы с совместимостью.
Тем не менее, можно выделить несколько наиболее популярных форматов файлов BIOS:
Тип файла | Описание |
AMI BIOS | Тип файла, который применяется в BIOS от компании American Megatrends Inc. (AMI). Обычно имеет расширение .ROM или .BIN. |
Phoenix BIOS | Тип файла, который используется в BIOS от Phoenix Technologies. Обычно обладает расширением .WPH или .ROM. |
UEFI BIOS | Тип файла, используемый в BIOS UEFI (Unified Extensible Firmware Interface). Обычно заканчивается на .CAP. |
Intel HEX | Тип файла, предназначенный для представления данных в виде шестнадцатеричного кода. Обычно имеет расширение .HEX. |
Каждый из этих форматов имеет свои специфические черты и требует определенных инструментов для их записи на устройства. При обновлении BIOS очень важно применять правильный тип файла, чтобы избежать потенциальных проблем с совместимостью и повреждением устройства.
Обзор доступных форматов файла BIOS и их особенности
Файлы BIOS применяются для обновления микропрограммы управляющей платы компьютера. Существует множество известных форматов BIOS-файлов, каждый из которых обладает своими уникальными характеристиками и достоинствами.
ROM | Запись BIOS осуществляется прямо на микросхему ROM | — |
EEPROM | BIOS записывается в энергонезависимую электрически перепрограммируемую память EEPROM | Обновление прошивки без замены микросхемы |
Утилита обновления BIOS | Программа для обновления BIOS через операционную систему | Легкость и удобство в процессе обновления |
USB-накопитель | Загрузка прошивки BIOS с USB-устройства | Удобство и высокая совместимость |
Сетевой загрузчик | Загрузка BIOS по сети | Обновление BIOS на удаленных системах |
Определение формата файла BIOS должно основываться на конкретной ситуации и требованиях пользователя. Необходимо учитывать, как формат будет совместим с аппаратным обеспечением системы, а также какие методы обновления прошивки доступны для данной ситуации.
Как прошить BIOS с помощью файла?
Для того чтобы выполнить прошивку BIOS с использованием файла, нужно придерживаться нескольких простых шагов:
- Подготовка: Загрузите файл прошивки BIOS с официального сайта производителя вашей материнской платы, следуя рекомендациям по формату файла. Убедитесь, что версия прошивки совместима с вашей материнской платой.
- Подключение USB-накопителя: Вставьте USB-накопитель в компьютер и переместите файл прошивки BIOS в корень накопителя. Проверьте, чтобы на USB-накопителе не было важных данных, так как обновление BIOS может потребовать его форматирования.
- Запуск в режиме прошивки: Перезагрузите компьютер и войдите в режим прошивки BIOS. Способ доступа зависит от вашего материнского устройства. Обычно нужно нажать определённую клавишу или комбинацию клавиш (например, Del, F2, F10) при старте компьютера.
- Обновление BIOS: В меню прошивки BIOS найдите пункт «Обновление BIOS» или аналогичный. Выберите его и укажите путь к файлу прошивки BIOS на вашем USB-накопителе. Важно: не отключайте компьютер от сети и не перезагружайте его в процессе обновления BIOS.
- Завершение обновления: По окончании обновления BIOS устройство автоматически перезапустится. Убедитесь, что USB-накопитель отключён, и проверьте работу BIOS – убедитесь, что новая версия прошивки установлена корректно и нет никаких сбоев.
Важно помнить, что прошивка BIOS – это ответственная процедура, которая должна быть выполнена с осторожностью и вниманием к деталям. Неправильная прошивка BIOS может привести к непредвиденным последствиям, включая неработоспособность компьютера.
Если у вас есть сомнения по поводу своих умений или вы не обладаете необходимым опытом, стоит обратиться к специалистам или связаться со службой поддержки производителя материнской платы для получения дополнительных рекомендаций.
Тем не менее, процесс обновления BIOS с использованием файла является значимой процедурой, способной улучшить производительность вашего компьютера и устранить некоторые неполадки с аппаратным обеспечением.
Обновляем BIOS с флешки
Кратко обсудим BIOS и процесс его обновления через флеш-накопитель.
Что такое BIOS?
В данном случае речь идет о первичном программном обеспечении, которое инсталлируется на специальный микрочип, расположенный на материнской плате. Это свод приложений, который запускается сразу после включения компьютера и обеспечивает гармоничное взаимодействие всех компонентов системы.
Кроме того, BIOS выполняет множество важных функций устройства, которые необходимы для детальной настройки компьютера, а также для восстановления и переустановки операционных систем, таких как Windows или Linux.
Зачем прошивать BIOS?
В общем, без особой необходимости вмешиваться в BIOS не рекомендуется, а тем более проводить его обновление или перепрошивку. Важно понимать, какие действия вы собираетесь предпринять с вашим компьютером.
Почему же все-таки выполняется прошивка BIOS?
- Прошивка происходит в случае, если при запуске компьютера начали появляться ошибки. Например, некоторые компоненты перестали функционировать, как, например, если у ноутбука не включается экран, или BIOS не распознает определенное устройство. Подобные проблемы часто решаются посредством перепрошивки BIOS.
- Кроме того, установку новой прошивки делают те пользователи, которые хотят расширить функциональные возможности своего компьютера. Например, на определенные модели ноутбуков можно добавить поддержку виртуализации, которая активируется только на уровне BIOS и лишь если используемая версия BIOS предусматривает данную функцию.
- Этим также занимаются эксперты сервисных центров. Это может понадобиться в случае, если требуется восстановить компьютер клиента или если пришел пользователь, который хочет обновить свою версию БИОС.
На этом, пожалуй, все. Нет других существенных причин для перепрошивки BIOS. Поэтому стоит хорошо подумать, прежде чем принимать это решение. Процесс прошивки, безусловно, несложен, но существует риск повредить материнскую плату, если что-то пойдет не так.
Обновляем BIOS с флешки
Сначала необходимо узнать, какая версия BIOS установлена в чипе материнской платы. Для этого выполните следующие шаги:
- Включите компьютер.
- Во время загрузки нажмите специальную клавишу для доступа к меню BIOS.
- На главном экране найдите строку с информацией о поставщике и версии BIOS. Рядом с ними будет указана текущая версия прошивки и её разработчик.
Есть масса других способов узнать точную версию БИОС, установленного на вашем компьютере.
Теперь переходим к следующему этапу.
- Переходим на официальный сайт изготовителя нашей материнской платы и BIOS.
- Находим раздел поддержки.
- Среди информации ищем пункт с обновленной версией BIOS.
- Скачиваем файл на компьютер.
Теперь нужно записать прошивку на флешку и выполнить установку.
Обновление можно провести двумя способами (это зависит от конкретной модели материнской платы).
Перед началом процесса убедитесь в наличии стабильно работающего электропитания. Отсутствие питания во время установки новой прошивки может привести к необратимым повреждениям материнской платы.
Если вы выбираете обновление через BIOS, то:
- Скопируйте файл с прошивкой на флешку.
- Включите компьютер и нажмите клавишу для доступа к настройкам BIOS.
- Переключаемся на вкладку Advanced (если она доступна).
- Здесь находим меню Instant Flash.
- После открытия Instant Flash ищем внешний диск с необходимой прошивкой, выделяем его и нажимаем клавишу «Ввод».
Обновление должно начаться автоматически.
Данный метод может не подходить для всех версий BIOS. Если вы не обнаружили пункт Instant Flash по указанным выше шагам, не беспокойтесь. Вероятно, его просто нет. Переходите ко второму методу.
Второй вариант более сложный, но универсальный, поэтому обязательно сработает на любой версии BIOS.
С помощью пакета USB DOS
- Скачиваем программу Rufus и образ USB DOS с соответствующей операционной системой.
- Устанавливаем утилиту Rufus на компьютер.
- Подключаем флешку, на которую будет записываться прошивка BIOS.
- Запускаем программу Rufus.
- В разделе «Устройство» выбираем нашу флешку.
- Кликаем на кнопку «ВЫБРАТЬ» и находим папку с образом USB DOS.
- Ставим галочку напротив опции Create a DOS Bootable disk.
- Нажимаем кнопку «СТАРТ» для начала процесса.
- После того как флешка станет загрузочной, копируем на нее файл прошивки BIOS.
- Далее щелкаем правой кнопкой на свободном месте на флешке.
- Наводим курсор на пункт «Создать» в контекстном меню.
Вот важный элемент
- В открывшемся меню выбираем «Документ текста».
- Вводим в него строки awdflash flash.bin /cc/cd/cp/py/sn/e/f
Вот как должно выглядеть содержимое файла
- Далее, одновременно нажимаем клавиши Ctrl + S.
- В качестве имени файла вводим awdflash.bat.
Важно указать расширение именно здесь, чтобы система распознала файл как Bat, а не текстовый документ
- После этого перезагрузите компьютер.
- В меню загрузки выбираем нашу флешку.
- Как только загрузится DOS-система с накопителя, находим файл awdflash.bat и запускаем его, нажав клавишу «Ввод».
Другие способы
Производители материнских плат размещают на своих сайтах специальное программное обеспечение для обновления BIOS. Оно запускается прямо из WIndows и не требует никаких особых навыков. Там даже есть возможность загрузить подходящую версию прошивки автоматически. То есть не придется ничего определять и искать самостоятельно.
Устройство файла UEFI BIOS, часть вторая: UEFI Firmware Volume и его содержимое
В данной части статьи я расскажу о форматах файлов версии 2, так как именно они применяются во всех современных BIOS. В новейших версиях стандарта PI было добавлено описание форматов версии 3, однако они необходимы для файлов размером свыше 16 Мб, которые в настоящее время отсутствуют ни на одной из материнских плат. Тем не менее, компания Gigabyte уже приблизилась к этому порогу на своих платах с чипсетом Z87. На всех актуальных платах Intel регион Descriptor поддерживает не более двух микросхем, каждая из которых имеет емкость не более 16 Мб, поэтому использование форматов версии 3 придется отложить до следующего поколения чипсетов Intel, как минимум.
- Выберите любой Hex-редактор, я использую HxD
- Утилита PhoenixTool v2.xx, доступная для скачивания в теме на форуме MDL
Firmware Volume
- Name: для обозначения FV и всех его компонентов используется их GUID
- Размер: охватывает все данные, заголовки и доступное пространство
- Формат: определяет тип файловой системы в рамках FV, различные типы обладают различными GUID’ами
- Выравнивание: требует, чтобы первый байт FV был размещен на заданной границе, являющейся степенью двойки. Выравнивание FV не должно быть хуже выравнивания всех файлов внутри него, за исключением случаев, когда в заголовке установлен флаг EFI_FVB_WEAK_ALIGNMENT. В этом случае выравнивание может быть выполнено по любой степени 2, но этот FV нельзя будет перемещать далее
- Атрибуты, отвечающие за защиту от чтения и записи, а также для отключения данной защиты
- OEM-атрибуты, устанавливаемые по усмотрению производителя
typedef struct < UINT8 ZeroVector[16]; UINT8 FileSystemGuid[16]; UINT64 FvLength; UINT32 Signature; UINT32 Attributes; UINT16 HeaderLength; UINT16 Checksum; UINT16 ExtHeaderOffset; UINT8 Reserved[1]; UINT8 Revision; EFI_FV_BLOCK_MAP BlockMap[]; >EFI_FIRMWARE_VOLUME_HEADER; typedef struct < UINT32 NumBlocks; UINT32 Length; >EFI_FV_BLOCK_MAP
ZeroVector: в начале FV выделяется 16 байт для обеспечения совместимости с процессорами, для которых reset vector располагается по адресу ноль.
По наличию хотя бы одного значения, отличного от нуля, в данном блоке можно без труда идентифицировать Boot Firmware Volume среди прочих. FileSystemGuid: указывает на файловую систему, применяемую внутри этого FV. FvLength: общая длина FV вместе со всеми заголовками. Signature: используется для обнаружения FV и по стандарту всегда равна 0x4856465F, что соответствует . Attributes: это те самые атрибуты, о которых мы упоминали ранее.
Их довольно много, однако для нас наиболее важными являются упомянутые ранее EFI_FVB_WEAK_ALIGNMENT, который делает FV неподвижным после его установки, а также один из параметров из группы EFI_FVB_ALIGNMENT, варьирующийся от EFI_FVB_ALIGNMENT_1 до EFI_FVB_ALIGNMENT_2G, и EFI_FVB_ERASE_POLARITY, обозначающий, каким битом осуществляется стирание микросхемы flash. Остальные атрибуты необходимы коду, работающему с FV как с участком памяти, и они не представляют интереса для нас, поэтому не будем их перечислять.
HeaderLength: длина заголовка, исключая extended header, о котором будет рассказано позже. Checksum: 16-битная контрольная сумма для заголовка. Верный заголовок должен складываться в 0x0000. ExtHeaderOffset: место начала extended header. В нем могут содержаться GUID описываемого FV, перечень OEM-типов файлов с соответствующими GUID’ами, а также цифровая подпись.
На сегодняшний день мне не попадались FV с заполненным extended header, поэтому мы не будем его анализировать. Если у FV отсутствует дополнительный заголовок — в этом поле будет 0x0000. Reserved: резервное поле, всегда равно 0x00. Revision: стандарт PI определяет структуру только одной версии — второй, поэтому в этом поле всегда будет 0x02.
BlockMap представляет собой карту блоков, которая хранится в формате списка структур EFI_FV_BLOCK_MAP и завершается аналогичной структурой с нулями в обоих полях. Поскольку современные флеш-микросхемы обладают одинаковыми характеристиками (то есть имеют блоки одного размера), весь список обычно включает всего две записи.
Давайте проверим наш пример на соответствие указанным выше характеристикам. Откроем файл BIOS в hex-редакторе и перейдем на смещение 0x500000, в начало области BIOS.
Мы наблюдаем, что в начале присутствует 16 нулей, обнаружен GUID файловой системы, размер данного FV составляет 0x020000, сигнатура соответствует требованиям, атрибуты правильно заданы, заголовок имеет объем 0x48 байтов, контрольная сумма была вычислена, расширенный заголовок отсутствует, зарезервированные поля также на месте, и внутри данного FV располагается 20 блоков по 0x1000, что в сумме соответствует значению, указанному в поле FvLength. В большинстве случаев в BIOS можно найти несколько различных FV, предназначенных для различных задач, однако это не является обязательным, и все можно упаковать в одно. Лидером по степени вложенности FV и файлов друг в друга среди всех производителей UEFI BIOS является Intel, где уровень вложения достигает 12. Несмотря на то, что для FV теоретически могут быть применены разные файловые системы, на практике используется лишь одна — PI FFS, о которой мы сейчас и поговорим.
Файловая система прошивки
Это плоская файловая система без каталогов и иерархии, все файлы которой находятся в коневом каталоге. Получение списка файлов требует прохода по ФС от начала до конца. Все файлы должны иметь определенный стандартом заголовок.
Файлы должны быть расположены по восьмибайтовой границе от начала файловой системы; для этого используется специальный файл-заполнитель для выравнивания по более крупным границам. В стандарте указан файл VTF, который должен находиться в конце каждого FV, но на практике его можно встретить только в конце последнего FV в образе BIOS. Он размещен таким образом, что его последний байт совпадает с последним байтом всей микросхемы. В этом файле содержится код, необходимый для начальной загрузки в фазе SEC.
typedef struct < UINT8 Name[16]; UINT8 HeaderChecksum; UINT8 DataChecksum; UINT8 Type; UINT8 Attributes; UINT8 Size[3]; UINT8 State; >EFI_FFS_FILE_HEADER;
Имя: GUID файла, который выполняет функцию имени. В пределах одного FV нельзя иметь два файла с идентичным GUID, за исключением PAD-файлов, о которых будет упомянуто ниже. HeaderChecksum: контрольная сумма заголовка, состоящая из восьми битов, не включая поле DataChecksum. Правильный заголовок должен суммироваться в 0x00.
DataChecksum: восьмибитная контрольная сумма содержимого файла, не учитывающая заголовок. Ее вычисление требуется не всегда, а лишь в случае, если установлен атрибут FFS_ATTRIB_CHECKSUM, в противном случае это поле будет равно 0xAA. Type: файл типа.
Стандарт описывает 13 предопределенных типов файлов (0x01 — 0x0D), 32 пользовательских типа для OEM-производителей (0xC0 — 0xDF), 16 типов для отладки (0xE0 — 0xEF) и 16 типов, относящихся к актуальной версии FFS (0xF0 — 0xFF). Из них сейчас фактически применяется только 0xF0 — EFI_FV_FILETYPE_FFS_PAD, который служит для заполнения пустоты. Этот специальный файл может иметь произвольный, в том числе нулевой, GUID, нулевые атрибуты, стандартное состояние и любой размер.
Согласно стандарту, файл должен быть пустым, то есть все его биты, кроме битов заголовка, должны иметь значение EFI_FVB_ERASE_POLARITY. Он предназначен для выравнивания следующего файла по границе, превышающей стандартное значение в 8 байт. Минимальный объем PAD-файла составляет размер заголовка — 24 байта. О стандартных типах файлов мы еще вернемся позже.
Атрибуты: ключевыми атрибутами для нас являются FFS_ATTRIB_FIXED, который указывает на неизменяемость файла в рамках FV, и набор FFS_ATTRIB_DATA_ALIGNMENT, определяющий выравнивание данных (исключая заголовок) файла по определенной границе. Размер: размер файла, включая заголовок, представлен как 24-битный UINT. Состояние: это поле отражает статус файла. Оно используется после загрузки FV в оперативную память и в процессе выполнения операций с файлами внутри FV. Состояние всех действительных файлов в образе BIOS равно 0xF8.
Теперь вернемся к категориям файлов. Тем, кто еще не ознакомился с предыдущей частью статьи, рекомендуется сделать это, иначе можно не понять материалы. Как известно, выделено 13 стандартных типов файлов, вот они:
Структура данного файла определяется исключительно пользователем, и заранее о ней ничего не известно |
Файл обладает секционной организацией, но заранее нет информации о содержимом этих секций |
Ядро безопасности, отвечающее за выполнение кода на этапе SEC |
Ядро PEI, также известное как PEI Foundation |
Ядро DXE, также обозначаемое как DXE Foundation |
Модуль PEI |
Драйвер DXE |
Гибридный модуль PEI/DXE |
Приложение. В отличие от драйвера DXE, его запускает не диспетчер DXE, а пользователь. К приложениям относятся UEFI Setup, UEFI Shell, обновление BIOS и др. |
Модуль SMM |
Образ FV. Это специфический файл, который позволяет сделать вложение одного FV в другой |
Гибридный модуль SMM/DXE |
Ядро SMM, также известное как SMM Init |
Проанализируем указанное выше на нашем файле: Первые 0x48 байт заголовка FV нас уже не привлекают, а внимание сосредоточим на том, что идет сразу за ними. Можно заметить, что имеется файл с GUID CEF5B9A3-476D-497F-9FDC-E98143E0422C, контрольная сумма заголовка составляет 0x36, контрольная сумма данных равна 0xAA, что указывает на отсутствие атрибута FFS_ATTRIB_CHECKSUM, тип RAW (0x01), без атрибутов, размером 0x1FFB8 и в стандартном состоянии. Это выглядит правдоподобно.
Теперь перейдем к секциям. Все файлы FFS, за исключением RAW, должны быть разделены на секции, выравненные по границе в 4 байта относительно начала области данных файла. К каждому типу файлов существуют определенные требования со стороны стандарта касательно количества и типов секций, однако в данной статье мы не будем приводить полный список требований — он слишком объемный и скучный. А вот заголовки секций, их функции и типы мы сейчас обсудим.
Минимальный заголовок секции выглядит так:
typedef struct < UINT8 Size[3]; UINT8 Type; >EFI_COMMON_SECTION_HEADER;
Size: представляет собой размер секции в таком же формате, как указано в заголовке файла. Type: обозначает тип секции. Все секции подразделяются на два подкласса — encapsulation и leaf. В секциях первого типа могут находиться другие секции, тогда как вторые содержат непосредственно данные.
Некоторые типы секций имеют расширенные заголовки, однако начало идентично общему. Для encapsulation-секций установлено 3 типа содержимого: 0x01 — EFI_SECTION_COMPRESSION, что указывает на то, что секция сжата с использованием определенного алгоритма. Полный заголовок для EFI_COMPRESSION_SECTION (названия слов расположены корректно) выглядит следующим образом:
typedef struct < UINT8 Size[3]; UINT8 Type; UINT32 UncompressedSize; UINT8 CompressionType; >EFI_COMPRESSION_SECTION;
UncompressedSize: величина распакованных данных. CompressionType: использованный метод сжатия. В настоящее время имеется два метода сжатия — Tiano (0x01) и LZMA (0x02). Если секция была распакована без изменения своей структуры, то в качестве типа сжатия установлено значение 0x00, и размер секции равен размеру упакованных данных.
Метод Tiano представляет собой смесь LZ77 и кода Хаффмана, созданного компанией Intel; код для сжатия и распаковки можно найти в файлах проекта TianoCore под лицензией BSDL. Метод LZMA широко известен, и не имеет смысла повторять его описание, код для сжатия и распаковки доступен в LZMA SDK.
Продолжим обсуждение типов encapsulation-секций: 0x02 — EFI_SECTION_GUID_DEFINED, что означает, что содержимое секции должно интерпретироваться пользователем файла согласно GUID, который в ней указан. В таких секциях часто находятся различные данные от OEM, а также электронная подпись как самой секции, так и всего файла. 0x03 — EFI_SECTION_DISPOSABLE, обозначает секцию, данные которой не имеют значения для функционирования файла и могут быть удалены при пересборке для экономии памяти. Такие секции практически не встречаются в реальных BIOS. Для leaf-секций определены 12 видов содержимого:
64-битный исполняемый код в формате PE32+ со всеми заголовками. Это основной формат для исполнения кода в UEFI. |
64-битный исполняемый код без зависимости от позиции. Применяется лишь некоторыми модулями PEI, специфический формат близок к PE32+, но информация о relocation отсутствует. |
64-битный исполняемый код, который используется в модулях и ядре PEI. Он отличается от PE32+ уменьшенным заголовком, что позволяет экономить место в кэше процессора. Более подробное описание можно найти в полуторной части этой статьи. |
Секция, описывающая зависимости драйвера DXE, в котором она содержится. Формат такой секции изложен в Volume 2. |
Содержит версию файла и дополнительно может включать строку в формате Unicode с полной версией. Встречается довольно редко. |
Секция с именем файла в формате Unicode. Удобна для поиска файлов по содержимому этой секции. Широко используется, однако можно встретить BIOS без каких-либо файлов с такой секцией. |
16-битный исполняемый код для обеспечения совместимости с устаревшими системами. |
Секция, хранящая образ FV. Внутри этого FV может располагаться еще один файл с подобной секцией, и так далее, пока не закончится место в микросхеме. |
Секция с данными, интерпретация которых зависит от GUID, записанного в начале. Используется довольно редко. |
Секция с сырыми данными. Что с ними делать — решает тот, кто открыл файл. |
Секция, описывающая зависимости модуля PEI, где она расположена. Формат этой секции детализируется в Volume 1. |
Секция, описывающая зависимости драйвера SMM, формат которой аналогичен DXE_DEPEX. |
Теперь проверим вышесказанное на нашем примере. В предыдущем обсуждении мы рассмотрели файл формата RAW, который не содержит секций, поэтому возьмем другой файл — модуль PEI с именем PchUsb, расположенный по смещению 0x7AD210: Можно заметить, что это действительно PEIM (тип файла — 0x06), и он состоит из двух секций. Первая секция размером 0x3A и типа PEI_DEPEX (0x1B) предоставляет информацию о его зависимостях.
Вторая секция (выровненная по 4-байтовой границе) имеет размер 0x31A и тип COMPRESSED_SECTION (0x01). Данные в ней сжаты с помощью алгоритма LZMA (0x02) и после распаковки увеличиваются до 0x558. Если вы умеете распаковывать LZMA в уме, то вы уже догадались, что внутри этой секции содержится еще 2 секции: PE32 с исполняемым кодом модуля и USER_INTERFACE с именем файла. Интересно, как я это узнал, если не умею распаковывать LZMA в уме? Для этого есть специальное приложение!
PhoenixTool и заключение
Это приложение называется PhoenixTool, и его основная функция заключается в добавлении SLIC в файлы UEFI BIOS. Однако мы соблюдаем закон и не будем добавлять SLIC в наш BIOS. Из всех возможностей программы нас будет интересовать кнопка Structure, которую можно активировать после выбора BIOS, с которым мы будем работать. Структура открывается в отдельном окне и отображает UEFI BIOS в виде иерархического дерева. Справа от каждого компонента представлена информация о нем и доступные действия. Рассмотренный ранее файл в этом окне выглядит следующим образом: программа позволяет ограниченное редактирование структуры файла, но лучше всего избегать изменений, чтобы не возникло проблем.
О том, как оптимально редактировать исполняемые модули UEFI и какие преимущества это может принести, читайте в следующей статье. Благодарим за внимание.