Прошивка flash spi bios
К сожалению, и этот механизм защиты, поддерживаемый микросхемами SPI Flash,
реально не используется разработчиками BIOS и материнских плат. Во всех
платформах, исследованных автором, в регистре статуса Flash, бит BPL=0, то есть
защита не используется и статусный регистр доступен для перезаписи.
Примечание
Запуск операций стирания и записи содержимого микросхемы SPI Flash
выполняется в два этапа. Сначала передается команда Write Enable, затем команда,
непосредственно запускающая стирание или запись. Если заданная
последовательность операций не соблюдена, содержимое микросхемы не изменяется.
Такой механизм эффективно защищает BIOS от случайного искажения в результате
программного сбоя, однако препятствием для "вирусописателей" он не является, так
как требуемая последовательность операций описана в открытой документации на
микросхемы SPI Flash, например 4.
Меры предосторожности
При отладке предлагаемых процедур, выполняющих стирание и перезапись
содержимого микросхемы Flash ROM, неизбежно существует риск искажения BIOS с
последующим отсутствием старта материнской платы. Примеры, содержащиеся в
прилагаемом каталоге WORK, рассчитаны на специалистов, имеющих квалификацию и
оборудование для восстановления BIOS, если это потребуется. Идеальное рабочее
место для отладки предлагаемых программ – это материнская плата, в которой
микросхема BIOS установлена в "панельку", допускающую извлечение микросхемы без
использования пайки, в сочетании с программатором. Исходное содержимое
микросхемы желательно сохранить в виде двоичного файла. Заметим, что если будет
искажен BIOS Boot Block, процедуры самовосстановления, рекламируемые
производителями материнских плат, окажутся неработоспособными. Напомним, что во
время рабочего сеанса используется копия BIOS в Shadow RAM, поэтому если
содержимое микросхемы BIOS будет искажено, это проявится только при очередной
перезагрузке. Таким образом, чтобы избежать необходимости аварийного
восстановления BIOS, перед сбросом или выключением питания следует восстановить
исходное содержимое Flash ROM.
Категорически не рекомендуется проводить эксперименты на основном рабочем
компьютере, лучше собрать стенд, используя, например, старую плату, оставшуюся
после апгрейда.
Замечания по совместимости
Операции, рассматриваемые в примерах 1-3, требуют программирования
конфигурационных регистров и ресурсов платформы, реализация которых различается
в разных чипсетах. Разумеется, рассмотреть все наборы системной логики в рамках
одной статьи невозможно, поэтому автор остановился на конкретном примере:
материнская плата Gigabyte GA-965P-S3 (чипсет Intel 965, микросхема BIOS SST
25VF080B). Примеры 1-3 предназначены только для плат с указанной элементной
базой. Используя предлагаемый материал, заинтересованный читатель может
реализовать библиотеку процедур для поддержки более широкой номенклатуры
платформ.
Пример 1. Процедура чтения идентификатора и регистра статуса Flash ROM.
Как и в ранее опубликованных статьях данного цикла, в целях монопольного и
беспрепятственного взаимодействия программы с оборудованием при работе с
предлагаемым примером, автор применил "древнюю" технологию отладки под DOS.
Аргументация такого шага и рекомендации по организации рабочего места приведены
в ранее опубликованной статье "64-битный
режим под DOS: исследовательская работа № 1". Прежде чем рассматривать
процедуры стирания и записи содержимого микросхемы BIOS, рассмотрим более
простой пример – чтение идентификатора и статуса этой микросхемы.
Каталог WORK\ID_FLASH содержит следующие файлы:
ASM_TD.BAT – обеспечивает ассемблирование, линковку и запуск программы
под отладчиком. При запуске TASM и TLINK используются опции, обеспечивающие
добавление отладочной информации в EXE файл.
ASM_EXE.BAT – обеспечивает ассемблирование и линковку. Генерируется
EXE файл.
FLASH_ID.ASM – основной модуль программы.
A20.INC – Библиотека для управления и контроля состояния адресной
линии A20 с использованием выходного порта контроллера клавиатуры.
BIGREAL.INC – Библиотека поддержки режима Big Real Mode, для
использования 32-битных адресов в диапазоне 0-4 Гб. Этот режим, как и управление
адресной линией A20, необходимы для работы данной программы, так как в
рассматриваемой платформе, регистры контроллера SPI используют технологию
Memory-mapped I/O, то есть адресуются в пространстве памяти.
SPIFLASH.INC – Библиотека процедур для взаимодействия с микросхемой
BIOS, подключенной к интерфейсу SPI. Реализация контроллера SPI в различных
чипсетах отличается, данная библиотека предназначена для поддержки микросхемы
Intel ICH8, то есть "южного моста" чипсета Intel 965. Для полного понимания
работы процедур данной библиотеки, следует обратиться к документу [3].
DATASEGS.INC – Сегменты данных. Содержит сегмент переменных, сегмент
текстовых строк и сегмент стека.
Рассмотрим выполнение программы чтения идентификатора и статуса микросхемы
BIOS. Нумерация пунктов приведенного ниже алгоритма соответствует нумерации
пунктов в комментариях к исходному тексту программы. См. файл
WORK\ID_FLASH\flash_id.asm.
1) Установка адреса стека, загрузка регистров SS и SP.
3) Проверка режима работы процессора (Real или Protected). Так как данная
программа использует непосредственное взаимодействие с регистрами чипсета и
другими системными ресурсами, процессор должен быть в режиме Real Mode. Если
процессор в режиме Protected Mode, переходим к пункту 15 (завершение с ошибкой).
4) Подготовка к адресации памяти выше 1 MB. Для этого разрешаем адресную
линию A20 и включаем режим Big Real Mode, обеспечивающий использование 32-битной
адресации в реальном режиме. Это необходимо для доступа к регистрам диапазона
SPIBAR. Подробности в [3]. Если при управлении адресной линией A20 возникли
ошибки, переходим к пункту 15 (завершение с ошибкой).
5) Детектирование чипсета материнской платы, получение адреса диапазона RCBA
(Root Complex Base Address). Вначале проверяем наличие поддержки функций
PCIBIOS, затем, используя PCIBIOS, проверяем наличие "южного моста" Intel ICH8
по кодам PCI Vendor ID, PCI Device ID. Если чипсет не распознан, переходим к
пункту 14 (завершение с ошибкой). Напомним, что текущая версия программы
поддерживает платформы только с данным типом "южного моста". Считываем базовый
адрес диапазона RCBA.
6) Установка разрешения циклов записи для интерфейса SPI. Устанавливаем бит 0
в регистре BIOS_CNTL. Подробности в [3].
8) Считываем и визуализируем идентификатор микросхемы Flash ROM.
Идентификатор содержит два байта. Первый байт – Vendor ID (синоним Manufacturer
ID) идентифицирует производителя микросхемы, в нашем примере он равен BFh, этот
код присвоен фирме SST. Второй байт – тип микросхемы, для 25VF080B он равен 8Eh.
Процедура чтения идентификатора состоит из передачи микросхеме кода команды (90h
для команды Read ID) и считывания двух байт идентификатора.
9) Считываем и визуализируем регистр состояния микросхемы Flash ROM. Этот
регистр содержит один байт, его побитное описание приведено в [5]. Код команды
Read Status – 05h, количество читаемых байт – 1. В остальном, данная процедура
аналогична процедуре чтения идентификатора, описанной в пункте 8.
10) Восстанавливаем исходное значение регистра BIOS_CNTL, сохраненное перед
его перенастройкой в пункте 6.
11) Восстанавливаем исходное состояние адресной линии A20 и выключаем режим
32-битной адресации (Big Real Mode).
13) Начало последовательности, используемой для завершения программы при
ошибках. Восстанавливаем исходное значение регистра BIOS_CNTL, сохраненное перед
его перенастройкой в пункте 6. Сюда управление передается, если произошли ошибки
после перенастройки регистра BIOS_CNTL и требуется его восстановление перед
завершением программы.
14) Восстанавливаем исходное состояние адресной линии A20 и выключаем режим
32-битной адресации (Big Real Mode).
Пример 2. Процедура чтения Flash ROM.
Ассемблерный пример, выполняющий чтение содержимого микросхемы BIOS в файл,
находится в каталоге WORK\RD_FLASH. Программа выполняет
сохранение области адресного пространства FFF00000h-FFFFFFFFh в файл размером 1
Мб и фиксированным именем BIOS.BIN. Файл создается в текущем каталоге. Размер
сохраняемого блока не зависит от реального размера используемой микросхемы BIOS,
распознавание типа и размера микросхемы не реализовано в данной версии.
Поддерживаются только материнские платы с "южным мостом" Intel ICH8. Для
гарантированного включения полного объема микросхемы BIOS в адресное
пространство, программа использует установку битов FWH_F8_EN, FWH_F0_EN в
регистре FWH_DEC_EN1, чем и обусловлена ее привязка к конкретному чипсету.
Подробности в [3].
Отметим, что в большинстве платформ, для чтения содержимого SPI Flash можно
использовать "старый" метод доступа посредством окна в адресном пространстве,
это и реализовано в данном примере. А операции, требующие передачи команд
микросхеме SPI Flash (чтение идентификатора или статуса, запись, стирание) могут
быть выполнены только с использованием регистров контроллера SPI. Такой метод
использован в примерах 1 и 3.
Пример 3. Процедура стирания и перезаписи Flash ROM.
Ассемблерный пример, выполняющий стирание и перезапись микросхемы BIOS,
находится в каталоге WORK\WR_FLASH. Программа выполняет
запись содержимого файла с фиксированным именем BIOS.BIN и размером 1 Мб в
микросхему BIOS. Файл должен находиться в текущем каталоге.
Заключение
В очередной раз подчеркну, что целью данного цикла публикаций не является
обучение "вредителей". Материалы будут полезны специалистам по информационной
безопасности, разработчикам аппаратного и системного программного обеспечения.
Выработка механизмов для противодействия какой-либо угрозе невозможна без
детального изучения самой угрозы.
Вся приведенная информация получена из открытых источников, список которых
прилагается.
Источники информации
1) Intel Low Pin Count (LPC) Interface Specification. Revision 1.1. Document
Number 251289-001.
2) Intel P965 Express Chipset Family Datasheet – For the Intel 82P965 Memory
Controller Hub (MCH). Document Number: 313053-001.
3) Intel I/O Controller Hub 8 (ICH8) Family Datasheet – For the Intel 82801HB
ICH8 and 82801HR ICH8R I/O Controller Hubs. Document Number: 313056-001.
4) 1 Mbit SPI Serial Flash SST25VF010 Data Sheet. Document Number:
S71233-01-000.
5) 8 Mbit SPI Serial Flash SST25VF080B Data Sheet. Document Number:
S71296-01-000.
6) W25X10A, W25X20A, W25X40A, W25X80A 1M-bit, 2M-bit, 4M-bit and 8M-bit
Serial Flash Memory with 4KB sectors and dual output SPI Data Sheet.
7) MX25L802 8M-bit [8Mx1] CMOS Serial Flash EEPROM Data Sheet.
8) SPI EEPROM Interface Specification. Part Number 223-0017-004 Revision H.
9) SPI Interface Specification. Technical Note 15.
на первой схемке можно использовать микросхему 551лн2, а можно просто стоомные резисторы
дла прошивки через разьем использую мамку от usb разьема материнской платы
======================================
технология Прошивки SPI-FLASH 25xxx серии (микросхемы BIOS)
Тока отметь, внутрисхемно..
m.ix, Я полагаю производитель не зря вытащил разъем, именно для этого, думаю..
ДОБАВЛЕНО 19/01/2011 23:46
ДОБАВЛЕНО 20/01/2011 01:11
Программатор и софт могу рекомендовать отсюда:
тут
Сам пользуюсь им. Пока "нешьющихся" на нем spi не попадалось. К достоинствам можно отнести то, что проект живой, софт периодически обновляется под новые виды микрух spi.
Но раъем сидит
, почему бы и нет..
В ближайшее время, к сожалению, этим занятся не смогу..
ДОБАВЛЕНО 20/01/2011 18:30
maximvb писал: |
Касаемо технологии - сомнительно. Разъем возле SPI вроде не стандартизирован (в лучшем случае будет одинаковым внутри фирмы, но не факт), по сути инженерный, есть не на всех материнках. Сдуть БИОС, подцепить к программатору и прилепить обратно займет меньше времени, чем проверка распиновки разъема SPI. SPI микрухи капризны, длинных проводов не любят, шнурок должен быть коротким - опять неудобства |
можно длинные но экранированые пожильно
Подаёш дежурку - если нет питания на флэшке - то стартуеш мать, для надёжности зажимаешь сброс и шьёш - никаких проблем.
Бывает разъём разведён но нет штырьков, на интеле попадалось, а как известно образ для интела сворганить - надо помучаться, поэтому просто впаял "штыри" и экспериментировал.
ДОБАВЛЕНО 20 Январь 2011, 18:20
m.ix писал: |
Цитата: шанс потерять микру на проводочках, очень велик! |
с какой радости-то?? Максимум не будет шиться или с глюками.
Причины того или сяго
1 пропадания питание
2 обрыв провода
3 оборванный провод соскользнувший под напряжением по плате.
Это косяки в основном пользователя.
Я решил не создавать новую тему, а отписаться здесь, т.к. тема довольно сходная. Неудачно прошил биос у мат. платы ASUS P5K3 DELUXE. У нее биос вшит, прямо под биосом есть SPI разъемы, 7 штук:
Так вот, я не специалист в электронике, и выпаивать биос мне бы не хотелось, тем более что хотелось бы продолжить эксперименты с прошивкой биоса - а там возможны опять неудачные прошивки. Так вот, хотелось бы понять, как определить, какой "штырек" в SPI-блоке под биосом соответствует какой ножке в биосе? Или может есть уже готовые какие-то решения, чтобы просто надеть на весь SPI-блок?
Michael666, нормально они шьются
А эта хрень, что ты привёл - фуфло для ленивых криворучков. Выпаять биос проще простого. А прошить ещё легче.
На сайте Asus если выбрать ОС DOS то должны быть дампы. Но мучений с индивидуальными данными это не отменяет.
Сохранить дамп-сохраню.Вот только в поддержке Тритона не нашёл своей флеши 25Q64FVA1G.
Имеется EN25Q80,по распиновке и напряжениям аналогична,а по объёму-туговато мне с этим.
Но к примеру две платы "клона" не будут работать в одной сети. У них MAC будет одинаков.
Попробывал слить бекап со своей микры,весит 1Мб. А с оф.сайта скачал 8Мб. Вот это удручает
Возможно ваш программатор не поддерживает эти микросхемы. Может софт на него обновить?
И ещё в типе микросхем нету пункта SPI.
Эта микросхема пишется блоками. Может ваш программатор не умеет блоки переключать. Может все же на сайте вашего программатора есть более новый софт под него?
В вашем программаторе должно показывать 64. То есть цифру из названия микросхемы.
Хотя пока лишь-бы размер научиться определять
Но для старта достаточно прошить и биос с пустыми номерами.
Там же на оверклокере, внизу в обсуждении написано что есть положительный опыт сборки прошивки из полуубитой и пустой.
У меня немного другая плата - P8P67 PRO
Мой дамп вам не поможет.
ДОБАВЛЕНО Июнь 17 2013
Пока у вас была другая плата можно было прошить хот-свапом, без программатора. Запустить плату, поменять flash на-горячо, и прошить из-под ОС.
При старте биос копируется в ОЗУ и микросхема по сути уже не нужна.
ДОБАВЛЕНО 18/06/2013 08:16
Отредактировал файл с оф.сайта АСУСа с помощью FD44Editor'а,вставив серийный номер,номер МАС и идентификатор.Расширение сменилось на .BIN.Залил через программатор Тритон. Вставил в мать и. вуа-ля-сейчас устанавливаю ОС-ь.
С горячей заменой эксперементировать не буду,хотя есть пустая флеха-мать жалко.Да и программатор в наличии.Есть ещё пара мамок с подозрениями на биос,буду пробывать.
Не столь давно приключилась со мной одна неприятность. Нужно было обновить BIOS на материнской плате, но в процессе прошивки произошла ошибка, система зависла и перестала отвечать на любые команды. После вынужденной принудительной перезагрузки компьютер включился, крутил кулерами, но на экране ничего не отображалось и не было никаких звуковых сигналов. На лицо повреждение BIOS при записи.
Немного предыстории:
Материнская плата ASUS Commando, без, модного нынче, Dual BIOS. Только Boot Block – небольшая область BIOS, не затрагиваемая записью, которая позволяет, в случае необходимости, инициализировать минимальный набор компонентов, необходимых для включения компьютера, произвести поиск BIOS на съемных носителях. Обычно подходят Floppy или флешка с файлом прошивки, переименованным в AMIBOOT.ROM (зависит от BIOS и материнской платы, точнее написано в инструкции к плате), либо CD с драйверами из комплекта поставки. Обнаружив подходящий файл, boot block запишет его в BIOS и, если все прошло правильно, компьютер после перезагрузки оживет. Неплохая фишка, несколько раз выручала, но в данном случае она не сработала, видимо, оказался поврежден и boot block.
Пришлось искать другие решения. Так как в своем арсенале инструмента у меня не было паяльной станции и стационарного программатора для разных eeprom’ок, пришлось искать более доступные решения. Рассматривая плату, я обнаружил на ней небольшой разъем SPI_J1, а микросхема флеш памяти как раз с SPI интерфейсом. Поиск в Интернет показал, что существуют вполне приличные заводские девайсы и немало самоделок для прошивки SPI микросхем через USB (об универсальных программаторах с поддержкой SPI даже не говорю, это само собой). Правда, поиск по местным магазинам, СЦ и форумам в отличии от Google ничего не дал, а заказывать и ждать месяц очень не хотелось.
Еще немного поиска, и вот оно, решение – статья чешского комрада (на чешском) о предельно простом программаторе и софтине к нему для прошивки микросхем флеш памяти с SPI интерфейсом! Ничего сложного, минимум компонентов.
Технически это очень простой способ, и требует лишь базового понимания схемотехники, умения припаять пару проводков и воспользоваться командной строкой (cmd). Но если вы не уверены в своих силах, лучше не рискуйте. Кроме того, всегда можно попросить друга, дружащего с паяльником.
Сборка устройства
Для сборки нам понадобится:
- 1 разъем DB25P, можно отрезать от ненужного шнура от принтера
- 4 шт. резисторы по 150 Ом
- 1 любой электролитический конденсатор емкостью 100 мкФ или более и рабочим напряжением на 6.3 В или больше (нужен при запитке от БП)
- Кусок плоского шлейфа с IDC разъемом на 10 контактов (он идеален при наличии SPI разъема на плате)
- Штекер molex (как на жестких дисках ATA), либо гнездо для батарейки CR2032
Ничего дефицитного нет, все можно найти в куче хлама или за копейки в любом радиомагазине. В худшем случае, можно попробовать обойтись вообще несколькими кусками провода, подсоединив контакты с SPI напрямую к LPT, однако, в данном случае нужно быть предельно острожным, да и правильность записи гарантировать сложно.
Схема с сайта автора, при подключении непосредственно к чипу (для флеш-памяти с рабочим напряжением 3 вольта):
Программатор SPIPGM может использоваться и для микросхем флеш-памяти с рабочим напряжением 1.8 Вольт. Автор применяет для этого дополнительный модуль (своего рода переходник), который подключается к основному модулю и состоит из дополнительных резисторов для гашения напряжения и каскада усиления на транзисторах BC547 для выходного сигнала чипа (схемы на сайты автора по ссылке выше). Ниже приводится адаптация схемы подключения, сразу предназначенная для работы с чипами на 1.8В. Для получения напряжения питания в 1.8 Вольта применен делитель напряжения (на схеме серые резисторы, желательно 1/4 Ватт), делитель при желании может быть пересчитан на другие номиналы (я указываю варианты 10 и 12 Ом, или 100 и 120 Ом), а еще лучше заменен подходящим DC-DC преобразователем (например, TLV70018). Диоды любые, нужны они для минимизации ошибок и, в принципе, можно обойтись без них.
Мы же будем подключать программатор не к чипу, а к разъему SPI_J1.
Если разъем 7 контактный, то подключается к нему следующим образом:
1. -> питание +3.3v 2. -> земля от питания и вывод 18 на LPT 3. -> резистор -> LPT 7 4. -> резистор -> LPT 8 5. -> резистор -> LPT 10 6. -> резистор -> LPT 9
Так же, на некоторых материнских платах бывают 9 контактные разъемы, там схема подключения немного отличается:
Разъем DB25P хорош тем, что внутри него можно разместить все необходимые детали. Желательно использовать максимально короткую длину кабеля, иначе будут ошибки записи. Неплохо было бы закрыть провода экраном, либо от антенного кабеля, либо просто обмотав фольгой от шоколадки, не забыв подсоединить экран к земле (GND).
При питании от батарейки конденсатор можно исключить. Лично я брал с +5 шины блока питания ( красный провод), подключив к нему через разъем molex и погасив напряжение диодами до ~3.3v (двух-трех диодов будет достаточно).
Блок питания все же надежней батарейки. Имея отдельный БП можно запитать напрямую от шины +3.3 ( оранжевый провод ATX разъема). Чтобы запустить блок питания без компьютера нужно замкнуть зеленый и черный провода.
Девайс в сборе:
Программа SPIPGM
Теперь можно переходить к программному обеспечению.
Проект, кстати, развивается и по сей день, автор частенько выкладывает обновленные версии программы с информацией о новых чипах, доработками и исправлениями.
В архиве следующие файлы:
Надежней всего прошивать из DOS, загрузившись с Hiren или любого другого подходящего загрузочного CD/Flash. Но можно и из Windows.
Синтаксис и основные команды:
Основные команды:
Имя файла — полное имя файла, например: file.bin, file.rom и т.п. Расширение роли не играет, главное чтобы это был корректный файл образа и правильно указано имя.
Прошивка BIOS через SPI:
spipgmw /i – идентификация чипа. Для проверки все ли правильно подключено, программа должна определить тип установленной памяти. Если этого не происходит, проверьте правильность подключения и поддержку чипа программой.
spipgmw /d BIOS.bak – если нужно сохранить резервную копию имеющегося BIOS.
spipgmw /u – разрешение записи.
spipgmw /e – стирание.
spipgmw /p FILE.rom – запись прошивки («FILE.rom» – имя файла прошивки, нужно чтобы файл находился в одной папке с программой)
…ждем процесс записи…
spipgmw /v FILE.rom – сравниваем записанные данные с файлом прошивки. Либо можно сделать дамп spipgmw /d test.rom и сравнить его содержимое с оригинальным файлом прошивки в каком-нибудь Hex-редакторе.
Возможно наличие небольшого количество ошибок. Зависит от длинны кабеля, стабильности питания, типа памяти. Конечно, желательно, чтобы ошибок не было вовсе, но даже с некоторым количеством ошибок компьютер скорей всего запустится, а там уже можно прошить BIOS штатными средствами.
Данный способ подходит не только для прошивки BIOS материнских плат, но и любых других устройств, имеющих SPI разъем, либо напрямую, любой поддерживаемой микросхемы.
Во время очередной уборки был случайно выключен удлинитель, к которому были подключены работающие системный блок и монитор. Системный блок состоит из:
- материнская плата — ASRock B75 Pro 3
- процессор — Intel Core i5-3570
- блок питания — Corsair CX750M
Порылся в интернете, выяснил, что точная причина неисправности может быть совсем другая. Это вселило небольшую надежду. Но надо как-то найти эту самую причину.
В первую очередь подключил другой старенький БП — комп не запускается.
Для дальнейших проверок принес домой автомобильный комп. Состав:
- материнская плата — ASRock B75M-ITX
- процессор — Intel Pentium G640T
Вытащил из автомобильного компа процессор, вставил его в домашний — комп не запускается. Но появилась надежда, что процессор все таки цел, а неисправна материнка, которая немного дешевле (хотя новые на чипсетах не H61 и H67 — дефицит).
Далее домашний процессор вставил в автомобильный комп — комп заработал. Следовательно, процессор живой, а проблема в материнке. Начал грешить на BIOS (Winbond 25Q64BVAIG).
Собственно, программирование
Хорошо, что микросхема BIOS не впаяна, а на обычной панельке DIP-8. Программатора у меня нет, заказывать в Китае и ждать месяц — не выход. Решил сделать программатор из ноутбука жены и имеющейся в наличии Arduino Nano. Покопался в интернете… Везде в основном прошивка заливается через COM-порт, я же решил прошивать с карты памяти (так вроде гораздо быстрее).
Набросал схему подключения:
Собрал все на макетной плате:
Тип и объем карты памяти, способ ее форматирования, имя файла должны соответствовать требованиям библиотеки SD Arduino.
Для начала набросал скетч, который считывает содержимое SPI Flash и записывает его в файл на карту памяти, попутно вычисляя контрольную сумму по методу Checksum-32, т.е. простым суммированием.
Запустил скетч, получившийся файл сравнил с оригинальным BIOS — получилось около 140000 несовпадающих байт.
Далее написал скетч, который читает файл с карты памяти и записывает его на SPI Flash, предварительно стирая чип.
Запустил, подождал, скетч вывел контрольную сумму, она совпала с контрольной суммой оригинального файла. Но это контрольная сумма файла на карте памяти, мне же нужна контрольная сумма содержимого SPI Flash.
Можно было использовать первый скетч, но написал третий, который только считает контрольную сумму содержимого SPI Flash по тому же алгоритму.
Контрольная сумма SPI Flash совпала с контрольной суммой оригинального файла.
После вставки прошитой микросхемы BIOS в домашний комп — он благополучно заработал.
В среде Arduino IDE необходимо установить библиотеку SPIFlash через управление библиотеками.
Контрольную сумму вычислял с помощью HEX-редактора HxD.
PS: Первоначально в качестве SD-модуля использовал вот такой:
Но с ним были частые глюки, не инициализировалась SD-карта. Помогало «горячее» переподключение самой SD-карты при подключенной к компу Arduino.
PPS: Вместо резисторов пробовал подключить двунаправленный конвертер сигналов:
Но с ним схема не заработала.
Прикрываясь полумифическими «безопасностью» и «защитой простого пользователя от буткитов» производители 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, пожалуйста.
Читайте также:
- Как сдать отчет из необновленной 1с
- Программа для записи видео с экрана компьютера bandicam бесплатно
- Программа для изменения меню пуск windows 10
- Как называется дополнение для какой либо программы на вашем компьютере
- Срок действия microsoft office профессиональный плюс 2019 preview истек как исправить