Файл биоса в каком формате должен быть
Напоминаем, что все операции по перепрошивке БИОС являются довольно серьезной вещью, могущей вызвать весьма неприятные последствия, вплоть до полной неработоспособности материнской платы. Выполнять ее желательно в моменты, когда напряжение сети наиболее стабильно и отключение электричества наименее вероятно, ибо, если это произойдет в момент перепрошивки, материнская плата становится неработоспособной. Кроме того, сама природа микросхем БИОС (EEPROM) такова, что всякая операция ее перезаписи представляет довольно серьезный риск, поскольку вероятность возникновения ошибки велика.
(Далее идут рекомендации по прошивке, взятые частично из форума, а по большей части- из своего опыта).
Начнем с того, что БИОС нужно обнулить. Для этого можно (при выключенном компьютере и обязател.
Напоминаем, что все операции по перепрошивке БИОС являются довольно серьезной вещью, могущей вызвать весьма неприятные последствия, вплоть до полной неработоспособности материнской платы. Выполнять ее желательно в моменты, когда напряжение сети наиболее стабильно и отключение электричества наименее вероятно, ибо, если это произойдет в момент перепрошивки, материнская плата становится неработоспособной. Кроме того, сама природа микросхем БИОС (EEPROM) такова, что всякая операция ее перезаписи представляет довольно серьезный риск, поскольку вероятность возникновения ошибки велика.
(Далее идут рекомендации по прошивке, взятые частично из форума, а по большей части- из своего опыта).
Начнем с того, что БИОС нужно обнулить. Для этого можно (при выключенном компьютере и обязательно отсоединенном от сети питании!)
а) Извлечь батарейку на ~ 5-10 минут.
б) Обнулить БИОС с помощью джампера
в) В настройках БИОСа выбрать Load Defaults BIOS.
Выберите наиболее удобный для вас способ.
Кроме того, в установках еще старого БИОС следует запретить кэширование БИОС и видеоБИОС в оперативную память (читай мануал к материнке). Во многих последних версиях матерей эта функция запрещена по умолчанию.
Далее, у нас есть несколько способов собственно операции перепрошивки.
1. Прошивка БИОС с флопповода. (Самый простой, но не самый безопасный способ. Как сделать это менее рискованным образом- читай ниже в п. 2).
Найди чистую свежую дискету. (Или не очень чистую, но все равно надежную. Лучше сделать 2 копии). Вставь во флопповод при работе в Виндовс ХР. Открой « Пуск-Мой компьютер». Правой кнопкой мыши кликни на значке «Диск 3,5 (А)» и выбери в выпадающем меню «Форматировать…». Появится окно «Создание загрузочного диска». В нем нужно поставить галку в строке « Создание загрузочного диска MS-DOS» и нажать кнопку « Начать». Если все нормально, через некоторое время форматирование закончится и нужно нажать кнопку « Закрыть».
Сохраняем все и перезапускаемся, не вынимая дискету из флопповода. Система пожует его и напишет:
(что-то вроде: загружен DOS такой-то версии..) и
A:\>_
А) Набираем:
A:\>dir_ (три буквы dir) и жмем Enter.
Появится список файлов на дискете. Среди них можно увидеть пару файлов: например, awdflash.exe и файл с БИОСом, например w7025nms.150.
Запишем на бумажке названия файлов с расширениями, иначе потом будет трудно вспоминать.
Б) Набираем команду:
A:\>awdflash /?
и жмем Enter. Появится список ключей и их функции для программы awdflash. Нам потребуется несколько из них. После изучения ключей можно приступать к перепрошивке. В принципе, эти этапы (А и Б) можно пропустить и сразу приступить к перепрошивке.
В) Набираем команду:
A:\>awdflash newbios.bin oldbios.bin /py/sy/cc/cp/cd/e
И жмем Enter.
(набирается команда от имеющегося A:\>_. Следует вводить все точно, соблюдая пробелы, где указано и наклоны «палочек» именно такие, как указано. Название нового файла БИОС ( newbios.bin) будет твоим (не знаю, каким конкретно), не забудь поставить его точное расширение. Старый файл БИОС будет сохранен на дискете под названием oldbios.bin). Программа (согласно заданным ключам) кроме основных задач, также обнулит CMOS, очистит область ESCD, очистит область DMI и не станет автоматически перезагружать систему в конце работы, а просто выйдет в DOS (можно проверить, что там нового появилось на дискете, или в случае сбоя повторить операцию).
Запустится программа перепрошивки, от тебя уже не потребуется никаких действий. Только терпение. Ты увидишь как пройдет сохранение старого БИОСа на дискету, потом перепишется БИОС (появятся строки из квадратиков, демонстрирующие процесс перешивки) и наконец все остановится. Когда все утихнет, можно перезагружать машину, убедившись, что на дискете теперь есть копия старого БИОСа под названием oldbios.bin. (Перепрошивка БИОС с флопповода занимает 1-2 минуты, в зависимости от качества дискеты и флопповода.)
Сразу после перезагрузки можно лезть в БИОС и выставлять нужные тебе настройки.
Я бы не советовал шить из DOSa напрямую с флопповода- уж слишком ненадежные они и капризные (представляешь, что произойдет, если в процессе перепрошивки дискета откажется читаться на половине файла?).
2. Второй способ перепрошивки БИОС. Из виртуального электронного диска..
Менее опасный, но более трудоемкий. Кроме того, тут потребуется загрузочная дискета от систем Windows 98 или Ме. Загрузочную дискету можно создать на компьютере, где установлена система Виндовс 98 или Ме, либо с помощью компакт-диска из серии Reanimator для обслуживания ПК. Либо просто скачать отсюда программу для ее создания.
Виртуальный диск в ДОС создается автоматически при запуске компьютера с загрузочной дискеты Windows98 или Ме. После запуска компа вместо загрузочной дискеты вставляется дискета с файлами БИОС и программой-прошивальщиком, набирается команда:
A:\>dir
и будут показаны точные наименования файлов прошивки и самого БИОСа.
На виртуальный диск нужно скопировать парочку файлов (по очереди):
A:\>copy awdflash.exe C:
A:\>copy nf3916.bin C:
(нужно поставить название своего файла и букву своего виртуального диска. Если на HDD отсутствуют разделы с FAT32- это будет буква С:, если такие разделы есть- буква будет D:)
система каждый раз пожует флопповод и ответит:
1 file(s) copied
A:\>_
И в этом вся прелесть! Если дискета окажется некачественной или произойдет сбой в работе флопповода- это ничем не грозит. Можно вынимать дискету и вставлять по новой сколько угодно раз, пока не сработает. Подобный сбой при прямой записи БИОС с нее грозит серьезными проблемами.
Перейди в раздел виртуального диска и задай команду:
A:\>C:_
C:\>awdflash nf3916.bin oldbios.bin /py/sy/cc/cp/cd/e
Появится окно программатора и все сделает само. (Конкретно: сохранит старую версию БИОС, прошьет новую, обнулит CMOS и вернется в DOS). Автоматической перезагрузки не последует:
C:\>_
Перепиши старую версию БИОС на дискету:
C:\>copy oldbios.bin A:
Система пожует флопповод и ответит, что 1 file(s) copied.
После этого можно перезагружать систему ( Ctrl + Alt + Del) и входить в настройки CMOS BIOS для корректировки.
Букву виртуального диска система тебе сообщит сама при пуске с загрузочной дискеты Windows98 или Ме. Если весь HDD отформатирован на NTFS, или HDD там вообще нет, это будет диск С:, иначе- присвоит букву D. (Если на жестком диске отсутствуют разделы FAT32, после загрузки система напишет, что она не обнаружила разделов на жестком диске и начнет советовать проверять его на вирусы и т.п. ересь. Это все пропускается мимо ушей.)
В появляющемся на экране меню загрузки нужно выбрать опцию, соответствующую интерфейсу вашего привода. Для оптических приводов с интерфейсом IDE PATA выбираем строчку "С поддержкой СD-RОМ IDE PATA", если привод с интерфейсом SATA, то ему понадобятся другие драйвера и нужно выбрать строку с поддержкой приводов SATA.
Для прошивки повторяем все действия п.2.
Возможные неудачи процесса обновления БИОС
Если после перепрошивки материнская плата не стартует, увы, нам не повезло. Либо была прошита неподходящая версия БИОС, либо произошла ошибка в процессе перепрошивки (не исключается и неисправность микросхемы БИОС). Если компьютер при старте еще подает какие-либо признаки жизни, вроде:
Award BootBlock BIOS v1.0
Copyright C 1998, Award Software, Inc.
BIOS ROM Checksum Error
Detecting Floppy Drive A media.
Detecting HDD.
(Чаще всего это последнее, что видит пользователь на своем экране. Еще чаще он вообще ничего не видит, поскольку не происходит даже инициализации видеокарты)
это означает, что в процессе обновления БИОС произошла ошибка, но каким-то чудом сохранилась его часть, так называемый бут-блок (либо по вине "битой" ячейки памяти микросхемы EEPROM БИОС, либо в результате прошивки неподходящей версии, либо по другой причине) и система пытается найти другую версию файла прошивки на дискете или HDD.
Некоторые материнские платы способны восстановить БИОС, если обнаружат подходящий файл прошивки на дискете или жестком диске (файл с оригинальным названием, разумеется). Если есть признаки того, что идет обращение к флопповоду или жесткому диску, можно попытаться запустить компьютер "втемную", предварительно вставив во флопповод дискету с файлом прошивки, выждав достаточное время (судя по активности флопповода) и перезапустив в конце систему.
Часть материнских плат Gigabyte имеют функцию Dual BIOS и способны автоматически восстановить работоспособность без участия пользователя, но на части плат этой фирмы эта функция только продекларирована, а на самом деле не работает. Если компьютер после обновления и перезагрузки молчит вообще, все еще хуже. Рекомендуется воспользоваться перемычкой (джампером) обнуления CMOS (читай руководство к материнской плате), после чего попытаться запустить систему еще раз.
В конце концов, если ничего не помогает, остается только способ исправления прошивки при помощи программатора (в сервис центе).
Почему не стоит обновлять БИОС непосредственно из Windows?
Велика вероятность ошибки и последующей (после перезагрузки) полной неработоспособности системы. В случае с материнскими платами ASUS (на чипсетах nForce) настоятельно рекомендуется перед обновлением БИОС (из Windows) проверить версию драйверов чипсета nForce, которые должны быть 6.66 или выше. Указание на это (а также и новые версии драйверов) имеется на сайтах ASUS.
Подпишитесь на наш канал в Яндекс.Дзен или telegram-канал @overclockers_news - это удобные способы следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
AMD'шники могут смело пропустить весь текст ниже и читать вторую часть этой статьи, а мы продолжаем разбирать получившийся файл ROM.
Intel рассказывает о структуре своих BIOS'ов на страницах даташита на соответствующие чипсеты. Для всех чипсетов, начиная с 6 серии, этот формат в общем не менялся, поэтому его можно смело взять оттуда. Файл делится на 3-5 регионов:
Необязательными являются регионы GbE (используется совместно с встроенными сетевыми картами Intel начального уровня) и PDR (предназначен для данных OEM, но я ни разу не видел, чтобы он где-то использовался).
Descriptor
Этот регион должен находится в первой (из двух поддерживаемых) микросхеме flash по нулевому адресу и подразделяется на 11 секций, суммарный размер которых не должен превышать 4 килобайта. Устроен он так:
Первые 16 байт не используются и всегда равны 0xFF, за ними следует сигнатура 0x0FF0A55A, затем секция Descriptor Map, указывающая смещение начальных пяти секций и их размер.
Секция Component содержит информацию об используемых микросхемах flash: их количество (1 или 2), плотность (от 512 Кб до 16 Мб), запрещенные команды (такие как chip erase, например) и частоты чтения, быстрого чтения и стирания/записи.
Секция Region содержит смещения и размеры других регионов.
Секция Master содержит настройки доступа каждого из трех возможных мастеров (BIOS, ME, GbE) к пяти возможным регионам.
Секции PCH/PROC Straps содержат параметры конфигурации процессора и северного моста.
Секция Upper Map содержит смещение и размер таблицы VSCC .
Таблица VSCC содержит идентификаторы JEDEC и данные VSCC всех поддерживаемых Management Engine микросхем flash.
Секция OEM может быть заполнена OEM-производителями по своему усмотрению, но я не видел её заполнения ни разу.
Проверим теперь структуру полученного нами файла ROM на соответствие вышеприведенной:
Легко видно, что структура вполне себе соответствует, но угадать, за что именно отвечает каждый байт каждой секции будет непросто.
К счастью, Intel избавил нас от угадывания, выпустив утилиту FITC , которая позволяет настроить дескриптор (и не только его) и содержит подсказки по каждому доступному для редактирования пункту. Утилита эта входит в набор для разработчиков материнских плат и не предназначена для конечных пользователей, но ссылку на нее всегда можно найти на форумах, посвященных модификации BIOS'ов.
Открываем наш файл ROM в FITC 8.xx и все настройки дескриптора как на ладони:
Я крайне не рекомендую ничего менять, кто не знает, зачем он это делает.
Самыми часто изменяемыми настройками здесь являются настройки доступа к регионам (выделены зеленым на скриншоте hex-редактора), которые в дикой природе встречаются двух видов: вышеприведенные «всем можно всё» и стандартные настройки Intel. Иногда открытость записи в регион МЕ помогает справится с нарушением его работоспособности, просто перезаписав его полностью. На платах со стандартными настройками это невозможно без получения доступа к МЕ, которое на разных платах реализовано по разному и может потребовать достаточно нетривиальных манипуляций (замыкания ног аудиочипа во время загрузки, например).
Обратная сторона открытости — вредоносный код может делать что угодно с дескриптором и всем остальным содержимым микросхемы BIOS. Почему-то об этом говорить не принято, при том, что абсолютно все платы ASUS на P67 с BIOS'ам версий 3ххх и все платы ASUS на Z68 имеют открытый дескриптор. И security никакая, и с obscurity проблемы, о чем инженеры думали — не знаю.
Вторая полезная настройка — плотность микросхемы BIOS, которую приходится менять в случае восстановления испорченного BIOS'а платы с микросхемой большого объема, используя работоспособную плату с микросхемой меньшего.
Присутствует только на платах со встроенными сетевыми картами Intel начального уровня, вроде 82579.
В даташите на этот чип в разделе 10 имеется описание структуры NVM , которая и хранится в регионе GbE целиком.
Главная настройка, которую может быть интересно изменить — MAC-адрес, находящийся в самом начале региона, в первых 6 байтах. Если вдруг вам нужно сменить аппаратный MAC своей встроенной карты Intel, и регион GbE на вашей плате имеется — вы знаете что делать.
В нашем примере регион GbE находится по смещению 0x1000 от начала и содержит стандартный MAC для всех образов NVM, выпускаемых Intel в качестве обновления — 88:88:88:88:87:88:
При прошивке стандартными средствами регион GbE не обновляется вообще, несмотря на присутствие обновленного NVM в файле с обновлением BIOS'а, поэтому Intel пришлось выпустить отдельную утилиту NVM Update, когда в результате ошибки в версии 1.3 карта переставала работать нормально после установки Windows 8.
Регион содержит кучу других настроек, о которых можно прочесть в указанном выше даташите.
Здесь находится Management Engine Firmware и ее настройки. Про ME можно писать бесконечно, потому что там чего только нет. Лучшее описание структуры этого региона и возможных векторов атаки на него вы можете прочесть в докладе Игоря Скочински на Breakpoint 2012.
Для тех, кто еще не ушел читать его — краткая выжимка:
В чипсетах Intel имеется микроконтролер с архитектурой ARCompact, получающий питание от дежурной линии ATX, имеющий доступ ко всем устройствам, к RAM, собственный сетевой стек и работающий под управлением ОСРВ ThreadX. Вот он то и обеспечивает все рекламируемые Intel технологии, вроде Active Management, AntiTheft, Identity Protection, Rapid Start, Smart Connect, Protected Audio Video Path и так далее и тому подобное. А при помощи Dynamic Application Loader на нем можно даже Java-апплеты запускать.
На наше счастье, с безопасностью МЕ все более или менее в порядке, и пока я не слышал о случаях успешного внедрения вредоносного кода, но само по себе наличие в чипсете МК, исполняющего неизвестные никому, кроме Intel, программы и имеющего полный доступ к RAM и сети — уже повод для паранойи у склонных к ней людей.
Изменить доступные настройки МЕ можно при помощи той же Intel FITC:
В нашем примере регион ME начинается со смещения 0x3000 и имеет размер 1,5 Мб, что указывает на плату без поддержки AMT .
Регион состоит из одного или нескольких EFI Firmware Volume, о структуре которых я напишу во второй части этой статьи.
Там же мы затронем процесс загрузки UEFI и полезные в некоторых случаях патчи.
Platform Data Region
Регион предназначен для описания каких-либо зависящих от платформы возможностей и по плану должен использоваться OEM-производителями, но по факту я не видел его ни разу.
Источники информации
Проверим наш пример на соответствие вышеописанному.
Откроем наш файл BIOS'а в hex-редакторе и перейдем на смещение 0x500000, в начало региона BIOS.
Видим, что 16 нулей в начале имеются, GUID файловой системы имеется, размер этого FV — 0x020000, сигнатура на месте, атрибуты выставлены, заголовок имеет размер 0x48 байт, контрольная сумма посчитана, расширенного заголовка не имеется, зарезервированные поля на месте, а внутри этого FV имеется 20 блоков по 0x1000, что в сумме как раз и дает указанный в поле FvLength размер.
Чаще всего, в BIOS'е имеется несколько различных FV, предназначенные для разных целей, хотя это и не обязательно и можно упаковать все в один. Чемпион по степени вложенности FV и файлов друг в друга среди всех производителей UEFI BIOS'ов — Intel, там вложенность до 12 уровней встречается.
Хотя теоретически для FV могут использоваться различные файловые системы, на практике используется только одна — PI FFS, о которой мы сейчас поговорим.
Firmware File System
Это плоская файловая система без каталогов и иерархии, все файлы которой находятся в коневом каталоге. Получение списка файлов требует прохода по ФС от начала до конца. Все файлы должны иметь определенный стандартом заголовок. Файлы должны быть выровнены по восьмибайтовой границе относительно начала ФС, для выравнивания по большим границам предусмотрен специальный файл-заполнитель.
Также в стандарте описан специальный файл VTF , который обязан присутствовать в конце каждого FV, но на практике он присутствует только в конце последнего FV в образе BIOS и расположен так, что его последний байт является также последним во всей микросхеме. В нем находится код начальной загрузки, необходимой для фазы SEC.
Заголовок файла
Заголовок файла FFS устроен следующим образом:
Name: 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 байта.
К стандартным типам файлов мы еще вернемся.
Attributes: важными для нас атрибутами являются FFS_ATTRIB_FIXED , указывающий на неперемещаемость файла внутри FV и набор FFS_ATTRIB_DATA_ALIGNMENT, указывающих на выравнивание данных (не заголовка) файла по какой-либо границе.
Size: размер файла вместе с заголовком, хранится как 24-битный UINT.
State: состояние файла. Это поле используется после загрузки FV в память и при операциях с файлами внутри FV. Состояние всех валидных файлов внутри образа BIOS — 0xF8.
Вернемся теперь к типам файлов. Тем, кто еще не читал полуторную часть этой статьи рекомендую сходить и почитать, иначе рискуете ничего не понять.
Как мы уже знаем, определено 13 стандартных типов файлов, вот они:
Структура такого файла полностью определяется его пользователем, и о ней заранее ничего не известно |
Такой файл имеет секционную структуру, но о содержимом секций заранее ничего не известно |
Ядро Security, выполняющее код в фазе SEC |
Ядро PEI, оно же PEI Foundation |
Ядро DXE, оно же DXE Foundation |
Модуль PEI |
Драйвер DXE |
Гибридный модуль PEI/DXE |
Приложение. От драйвера DXE отличается тем, что его запускает не диспетчер DXE, а пользователь. Приложениями являются UEFI Setup, UEFI Shell, BIOS Update и т.п. |
Модуль 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 байта от начала области данных файла. К каждому типу файлов со стороны стандарта предъявляются свои требования к количеству и типу секций, но списка требований в этой статье не будет — он слишком длинный и слишком скучный. А вот заголовки секций, их назначение и типы мы сейчас рассмотрим.
Заголовок секции
Минимальный заголовок секции выглядит так:
Size: размер секции в том же формате, что и в заголовке файла.
Type: тип секции.
Секции делятся на два подкласса — encapsulation и leaf. В первых могут содержатся секции других типов, а вторые содержат непосредственно данные. Секции некоторых типов имеют расширенные заголовки, но начало всегда совпадает с общим.
Для encapsulation-секций определено 3 типа содержимого:
0x01 — EFI_SECTION_COMPRESSION , указывает на то, что секция сжата по какому либо алгоритму.
Полностью заголовок EFI_COMPRESSION_SECTION (слова в названии не перепутаны, именно так) выглядит так:
UncompressedSize: размер распакованных данных.
CompressionType: применяемый алгоритм сжатия.
В данный момент встречаются 2 алгоритма сжатия — 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 в уме? There's an app for that!
PhoenixTool и заключение
Называется это приложение PhoenixTool и основная его задача — это добавление SLIC в файлы UEFI BIOS, но мы люди законопослушные и SLIC в наш BIOS добавлять не станем. Из всех функций программы нас будет интересовать кнопка Structure, доступная после указания BIOS, с которым мы будем работать. Структура открывается в отдельном окне и представляет образ UEFI BIOS'а в виде дерева. По каждому компоненту справа отображается информация о нем и доступные действия. Рассмотренный в примере выше файл в этом окне выглядит так:
Программа позволяет ограниченное редактирование структуры файла, но лучше всего её не изменять, во избежание.
О том, как именно лучше редактировать исполняемые модули UEFI и что это может дать читайте в следующей статье.
Спасибо за внимание.
Прикрываясь полумифическими «безопасностью» и «защитой простого пользователя от буткитов» производители UEFI все сильнее закручивают гайки с каждым новым поколением своих продуктов. При этом поддержка предыдущих поколений быстро сходит на нет, и их пользователям ничего не остается, кроме как брать эту самую поддержку в свои руки. Конечно, при отсутствии исходного кода вносить какие-то изменения довольно сложно, но и без него можно сделать многое.
В своих предыдущих статьях об UEFI я планировал описать различные полезные модификации, которые помогают преодолеть некоторые заложенные производителями ограничения, но тогда до них руки не дошли, зато теперь — самое время.
В первой части этой статьи я опишу работу с написанным мной инструментом для модификации образов UEFI, а вторая будет посвящена самим модификациям.
Вступление, отказ от ответственности
Прошивка UEFI BIOS на современных платах, несмотря на наличие различных технологий вроде USB BIOS Flashback, Dual BIOS, Flash Recovery и т.п. — все равно лотерея. Прошивка же модифицированных образов — лотерея вдвойне.
Именно поэтому я прошу до начала любых экспериментов с прошивкой сделать при помощи аппаратного SPI-программатора полный дамп содержимого микросхемы, иначе восстановление после неудачной прошивки (а она рано или поздно случится) будет долгим, дорогим и болезненным.
SPI-программатор в данный момент может быть собран в домашних условиях из чего угодно, от пары резисторов и конденсаторов (SPIPGM) до Arduino или Raspberry Pi. Мой вариант дешевого и быстрого SPI-программатора описан здесь. Любителям вытравить пару-тройку плат советую обратить внимание на этот проект, а почитателям устройств «все-в-одном» — на этот.
Далее по тексту я полагаю, что у вас есть программатор, возможность восстановления после сбоя прошивки и готовность к экспериментам. Безумству храбрых, конечно, тоже можно петь песни, но не говорите потом, что я не предупреждал.
Традиционно, все, что вы тут сейчас прочитаете, написано в образовательных целях, автор не несет ответственности за возможную порчу вашего оборудования, недополученную прибыль, потерю времени и веры в человечество, вы пользуетесь предоставленным софтом на свой страх и риск и так далее.
UEFITool
- сохранить элемент в файл либо целиком (Extract as is), либо только данные, без заголовков (Extract body)
- пересобрать элемент (Rebuild), в этом случае при сохранении измененного образа для него (и всех его родительских элементов) будут пересчитаны размеры, контрольные суммы, исправлено выравнивание, т.е. структура образа будет приведена в соответствие со спецификацией UEFI PI
- вставить элемент из файла, либо перед выбранным (Insert before), либо после (Insert after), либо внутрь него (Insert into, в данном случае внутрь PE32-секции ничего вставить не получится)
- заменить элемент на другой элемент из файла, либо целиком (Replace as is), либо только его тело (Replace body)
Пример использования
Подробности, другие модификации, заключение
Если вам интересно, откуда взялся магический паттерн «75080FBAE80F» и на какие еще патчи стоит обратить внимание — читайте вторую часть этой статьи, которая будет опубликована немного позже. В ней я постараюсь подготовить побольше примеров в формате «что за модификация, зачем нужна, как сделать, кем и как была найдена», не углубляясь каждый раз в то, как именно вынуть подлежащий модификации элемент и как вставить его обратно.
Надеюсь, что статья не показалась слишком скучной и нудной. Если у вас есть вопросы и предложения — буду рад выслушать и ответить по мере сил. Баг-репортам буду рад еще больше. Спасибо заранее и удачных прошивок.
P.S. Уважаемая администрация и лично НЛО, сделайте для таких вот постов хаб UEFI, пожалуйста.
BIOS (от англ. Basic Input/Output System) — базовая система ввода/вывода, которая отвечает за запуск компьютера и низкоуровневую настройку его комплектующих. В этой статье мы расскажем, как она работает, для чего предназначена и каким функционалом обладает.
Чисто физически, БИОС — это набор впаянных в чип на материнской плате микропрограмм. Без этого устройства компьютер просто бы не знал, что ему делать после подачи питания — откуда загружать операционную систему, с какой скоростью должны крутиться кулеры, можно ли включать устройство нажатием на клавишу мыши или клавиатуры и т.д.
Не стоит путать «BIOS SetUp» (синее меню, в которое вы можете попасть, нажав на определённые кнопки на клавиатуре, во время загрузки компьютера) с BIOS как таковым. Первый — это лишь одна из набора нескольких программ, записанных на основной чип БИОС.
Микросхемы BIOS
Базовая система ввода/вывода записывается только на энергонезависимые запоминающие устройства. На системной плате это выглядит как микросхема, рядом с которой находится батарейка.
Обусловлено данное решение тем, что БИОС должен работать всегда, вне зависимости от того, идёт подача электричества на ПК или нет. Чип должен быть надёжно защищён от внешних факторов, ведь если произойдёт поломка, то в памяти компьютера неоткуда будет взяться инструкциям, которые позволят ему загрузить ОС или подать ток на шину системной платы.
Существует два типа микросхем, на которые может быть установлен БИОС:
- ERPROM (стираемое перепрограммируемое ПЗУ) — содержимое подобных чипов может быть стёрто только из-за воздействия источников ультрафиолета. Это устаревший тип устройств, который в настоящее время уже не используется.
- EEPROM (электрически стираемое перепрограммируемое ПЗУ) — современный вариант, данные с которого могут быть уничтожены посредством электрического сигнала, что позволяет не вынимать чип из мат. платы. На таких устройствах можно обновлять БИОС, что позволяет увеличивать производительность ПК, расширять перечень поддерживаемых материнской платой устройств, исправлять допущенные её производителем ошибки и недочёты.
Функции BIOS
Главной функцией и предназначением БИОС является низкоуровневая, аппаратная настройка установленных в компьютер устройств. За это отвечает его подпрограмма «BIOS SetUp». С её помощью можно:
- Установить время системы;
- Настроить приоритет запуска, то есть указать устройство, с которого в первую очередь должна производиться загрузка файлов в оперативную память, и в каком порядке с остальных;
- Включить или отключить работу комплектующих, установить вольтаж для них и многое другое.
Работа BIOS
Когда происходит запуск компьютера, почти все установленные в него компоненты обращаются к чипу БИОС для получения дальнейших инструкций. Такая самопроверка при включении называется POST (power-on self-test). Если компоненты, без которых у ПК не было бы возможности загрузиться (ОЗУ, ПЗУ, устройства ввода/вывода и т.д.), успешно прошли проверку на работоспособность, BIOS начинает поиск главной загрузочной записи операционной системы (MBR). Если он её находит, то управление аппаратной частью передаётся ОС и происходит её загрузка. Теперь, в зависимости от операционной системы, BIOS передаёт полное управление комплектующими ей (характерно для Windows и Linux) или просто предоставляет ограниченный доступ (MS-DOS). После загрузки ОС работу БИОС можно считать выполненной. Такая процедура будет происходить каждый раз при новом включении и только тогда.
Пользовательское взаимодействие с BIOS
Для того чтобы попасть в меню БИОС и изменить в нём какие-то параметры, требуется нажать всего лишь на одну кнопку во время запуска ПК. Эта клавиша может отличаться в зависимости от производителя материнской платы. Обычно это «F1», «F2», «ESC» или «DELETE».
Меню системы ввода/вывода у всех производителей системных плат внешне выглядит примерно одинаково. Можно быть уверенным в том, что по основному функционалу (перечисленному в части под названием «Функции BIOS» данного материала) отличий у них не будет.
Пока изменения не сохранены, они не могут быть применены к ПК. Поэтому важно всё аккуратно и корректно настроить, ведь ошибка в параметрах БИОС может привести как минимум к тому, что компьютер перестанет загружаться, а как максимум, какой-то из аппаратных компонентов может выйти из строя. Это может быть процессор, если должным образом не настроить скорость вращения кулеров, охлаждающих его, или блок питания, если неправильно перераспределить подачу электричества по материнской плате — вариантов куча и многие из них могут быть критичны для работы устройства в целом. Благо, существует POST, который может выводить коды ошибок на монитор, а при наличии динамиков он может подавать звуковые сигналы, которые тоже обозначают код ошибки.
В устранении ряда неисправностей способен помочь сброс настроек BIOS, подробнее узнать об этом можно в статье на нашем сайте, представленной по ссылке ниже.
Заключение
В этой статье было рассмотрено понятие BIOS, его ключевые функции, принцип работы, микросхемы, на которые он может быть установлен, и некоторые другие характеристики. Надеемся, что данный материал был интересен для вас и позволил узнать что-то новое или освежить имеющиеся знания.
Мы рады, что смогли помочь Вам в решении проблемы.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.
Читайте также: