несмотря на то, что в перепрошивке BIOS много нюансов - основные я объясню. а вот самое сложное в перепрошивке - это надеть прищепку 
Disclaimer: вариант с прищепкой ненадёжный - прошивка может не сдампиться, а прищепка может повредить чип, но это самый быстрый и дешёвый метод, т.к. не требует расходов на паяльную станцию и микроскоп. также у подавляющего большинства пользователей всё получается без проблем, CH341A - самый рекомендуемый программатор на форуме bios-mods (и крайне не рекомендуемый на профессиональных форумах, но об этом чуть ниже
)
для гарантированно беспроблемного чтения и записи, а также чтобы гарантированно не убить материнку, я рекомендую вместо использования прищепки выпаивать чип и вставлять его напрямую в программатор.
работать я буду в линуксе, потому что виндой пользоваться не умею.
0. что такое SPI, примеры чипов
SPI - это один из стандартов передачи данных между железками, в чипах биоса используется именно он. мне лень перефразировать википедию, читайте сами: https://ru.wikipedia.org/wiki/Serial_Peripheral_Interface
основное, что вам нужно запомнить: для программирования SPI чипа нужно определить у этого чипа 6 контактов, которые называются:
- "MISO"
- "MOSI"
- "SCLK", он же "SCK" или "CLK"
- "SS", он же "CS"
- "VDD", он же "VCC", "VREF", "5V", "3.3V", "1.8V", или просто "плюс"
- "VSS", он же "GND", он же "земля" или просто "минус"
как найти биос:
- если у чипа 8 или 16 ног*,
- в первых символах названия стоит "25",
- и особенно если на нём написано "Winbond", "MXIC", "SST",
то скорее всего это и есть чип с прошивкой биоса.
* - к сожалению, это не всегда так - иногда вместо нормальных чипов с ногами, типа SOP/SOIC, ставят чипы с контактами снизу, типа SON или BGA, такие чипы придётся выпаивать для перепрошивки.
примеры чипов здорового человека:
на особо илитных материнках чипы даже подписаны:
поскольку SPI весьма распространённый стандарт, то он используется не только биосом, но и кучей других составляющих компа. например, на таком же чипе может быть записана прошивка контроллера сетевой платы:
то есть не всё, что "winbond-25", то биос
однако на некоторых материнских платах встречаются сразу два чипа именно биоса, что с этим делать я не знаю, гуглите сами.
обратите внимание, что у всех чипов в одном углу есть пятно краски или кружочек - так обозначается первая нога чипа. зачастую это обозначение также дублируется на материнке, тоже пятном краски или стрелкой.
1. китайская подделка китайского программатора
для прошивки биоса я буду использовать копеечный "народный" программатор "CH341A", де-факто являющийся стандартом для перепрошивки биоса.
существует куча подделок этого программатора, поэтому я рекомендую или найти оригинал, или купить конкретную подделку, которая точно работает (по крайней мере у меня
)
оригинал: плата зелёного цвета с кучей надписей, чип "CH341A", название "CH341AProg".
вот это оригинальные (возможно оригинальные
) программаторы:
вот это рабочая подделка: плата чёрного цвета, чип "CH341B" (почти все подделки поставляются с этим чипом вместо "CH341A"), название с опечатками "MinProgramment" вместо "Mini Programmer", и подпись "MIOS" вместо "MISO" у одного контакта.
большинство продаванов с али продают программаторы в комплекте с прищепкой SOP8/SOIC8 для стандартного восьминогого чипа BIOS. если будете заказывать, то вдобавок захватите прищепку SOP16/SOIC16 на 16 контактов, она тоже может пригодиться - 16тиногие чипы тоже встречаются.
также обязательно погуглите спецификацию вашего чипа биоса - некоторые чипы работают от 1.8 вольт вместо 3.3, такие чипы придётся подключать через переходник на 1.8 вольт типа такого:
также может пригодиться набор пинцетов "SMD grabber" / "probe hook". меня пару раз выручали, когда через прищепку никак не получалось сдампить чип.
китайские грабберы почти ничего не стоят (2-3 бакса за целый набор), но они очень толстые (~3мм) и поэтому подключаться ими к чипу будет очень сложно или вообще не получится.
лучше поискать б/у набор брендовых грабберов, типа Tektronix SMG50, Pomona 72902 или Agilent 5090-4833 - это качественные грабберы толщиной ~1 мм, и б/ушные они стоят всего по 2-3 бакса за штуку. новые покупать не рекомендую, т.к. они стоят совершенно сумасшедших денег, и если у вас есть лишняя пара-тройка сотен баксов - лучше купите паяльную станцию и микроскоп, чтобы нормально выпаивать чипы вместо гемора с прищепками.
а вот на другой конец, который мы будем подключать к программатору, отлично подойдут копеечные китайские грабберы с загнутым носом, потому что у программатора пины расположены далеко друг от друга и подойдут даже толстые грабберы.
удобный провод для соединения двух грабберов - это гребёнка "dupont jumper wires". захватите две вариации - "мама-мама" и "мама-папа". двух пап нам не надо, ибо это грех.
также сгодятся маленькие крокодилы из ближайшего хозмага. но лучше, конечно, соединительный провод к грабберам припаять.
2. подготовка программатора
как полагается, китайская подделка требует доработки напильником (хотя возможно, что и оригинал тоже
)
программатор может выдавать 5 вольт вместо 3.3, что теоретически может убить чип биоса, а в худшем случае ещё и соседние с ним элементы материнки.
хотя большинство чипов очень живучие и выдержат 5 вольт, лучше не рисковать и физически залочить программатор на 3.3 вольта.
больше информации тут:
даже если вы нашли оригинал (или похожую на оригинал подделку), всё равно обязательно проверьте вольтметром напряжение между CLK/CS/MOSI/MISO и GND - оно не должно быть выше 3.5 вольт.
для моей подделки сработала очень простая модификация: разрезать дорожку слева от названия "MinProgramment" и поставить джампер на пины "5V" и "3.3V".
при этом пин "5V" тоже начинает выдавать 3.3 вольта. но если вдруг понадобится сделать 5 вольт вместо 3.3, то можно будет просто запаять эту дорожку и снять джампер.
пины, отмеченные "1,2,3" - это место для джампера настройки программатора.
джампер на пинах 1-2, название "что-то на китайском" = режим SPI/I2C/GPIO - то, что нам нужно.
при подключении к USB порту программатор определяется как "idVendor=1a86, idProduct=5512" или "1a86:5512"
джампер на пинах 2-3, название "TTL" = режим Serial/UART, это нам не нужно.
программатор в этом режиме определяется как "idVendor=1a86, idProduct=5523" или "1a86:5523"
теперь подключаем прищепку к программатору.
вспоминаем, что на чипах отмечена первая нога, и с удивлением обнаруживаем, что один из кабелей прищепки розового цвета. надеюсь, вы уже догадались, почему этот кабель отличается, и что за циферки 1-8 на плате, идущей в комплекте с прищепкой
(если у вас восьминогий чип биоса, то следующее можно пропустить)
с шестнадцатиногой прищепкой чуть посложнее - ведь у неё вся гребёнка лгбтшная, и её можно надеть на плату двумя сторонами. я решил, что пусть синий кабель будет первым.
для надёжности и безопасности, после надевания прищепки на плату, нужно "прозвонить" контакты мультиметром, и удостовериться, что контакт прищепки, подключённый к синему кабелю, "звенит" на контакте платы под номером 1.
вторая сложность состоит в том, что эта плата предназначена для нормальных программаторов, а не для CH341A, у которого для SPI предназначены только нижние 8 дырок (обозначены "25XX")
смотрим спецификацию шестнадцатиногого SPI чипа:
вспоминаем, какие 6 пинов нам нужны, и подключаем провода dupont к соответствующим пинам на идущей в комплекте с прищепкой плате.
желательно каждый провод подписать, чтобы не перепутать.
для надёжности и безопасности нужно "прозвонить" контакты мультиметром и убедиться, что всё подключено верно.
ну и собираем такого франкенштейна, подключив провода dupont к соответствующим пинам на программаторе:
естественно, вам такая конструкция может и не нужна вовсе, если все чипы на вашей мамке восьминогие.
3. подготовка рабочего места
прежде, чем лезть своими грязными руками в материнку, необходимо убрать любые источники электричества:
[ ] отключите от материнки ВСЕ кабели блока питания
[ ] отключите от материнки ВСЕ внешние кабели (видео, сетевые, USB)
[ ] достаньте батарейку CR2032
[ ] если у вас на полу ковёр - обязательно оденьте тапочки с резиновой подошвой
[ ] желательно пользоваться антистатическим браслетом и/или специальным антистатическим резиновым ковриком
(распечатайте список и при работе ставьте галочки в пустые поля, чтобы ничего не забыть
)
теперь по софту: в линуксе для прошивания биоса используется flashrom: https://github.com/flashrom/flashrom
в большинстве дистрибутивов он есть в стандартных репозиториях, но там может быть старая версия, не поддерживающая ваш конкретный чип, или имеющая какие-то баги.
поэтому желательно установить самую свежую версию flashrom, скомпилировав её из исходного кода.
качаем && компиляем:
(тут сначала понадобится установить кучу добра, такого как gcc make git libpci-dev zlib1g-dev libusb-dev libudev-dev, разберётесь самостоятельно)
если в списке поддерживаемых программаторов не оказалось ch341a_spi - значит, компилятор не нашёл libusb или libudev и тихо пропустил все программаторы, подключаемые по USB. обязательно установите подходящий для вашего дистрибутива пакет (типа libusb1-dev) и попробуйте пересобрать снова (make clean && make)
найдите обозначение вашего чипа в базе flashrom. некоторые буквы в названии заменяются точками, если разные чипы с разными буквами в названии оказываются одинаковыми внутри.
- мой чип в базе flashrom называется "W25Q128.V" - буква F заменена точкой.
показать список всех поддерживаемых чипов: flashrom -L
даже если вашего чипа нет в списке, то вполне возможно, что он поддерживается, попробуйте указать ближайший по названию. например, для чипа с маркировкой "MXIC MX 25L12872F"
можно указать "flashrom -c MX25L12835F/MX25L12845E/MX25L12865E"
теперь самое сложное: надеваем прищепку на чип.
убедитесь, что первый провод прищепки вы подключаете к первой ноге чипа! и что платформа прищепки вставлена в программатор правильно. смотрите картинки выше, с розовым проводом.
и только после того, как надели прищепку на чип, вставьте программатор в USB порт.
следующий нюанс - некоторые особо умные дистрибутивы линукса любят рандомно отключать юсб устройства "для энергосбережения". вряд ли это произойдёт в тот момент, когда устройство точно активно, но для уверенности лучше это энергосбережение убрать.
откройте sudo powertop и сделайте "Bad" во всех строках, имеющих отношение к USB:
4. наконец делаем дамп чипа
несмотря на то, что flashrom умеет автоматом детектить чип, лучше всегда указывать модель чипа вручную, например:
flashrom -p ch341a_spi -c W25Q128.V -r read.bin
во время чтения чипа (и особенно во время записи!) лучше вообще отойти от стола, чтобы случайно не сдвинуть прищепку, пошатнув или неудачно облокотившись об стол.
после того, как чип прочитался, проверяем, что в дампе действительно что-то есть:
рандомные данные - это хорошо. но если в дампе все байты - "FF" или "00" - то это значит, что чип не прочитался. перенаденьте прищепку и попробуйте ещё раз. и ещё. и ещё)
если опять не читается - смотрите доп. нюансы в самом низу статьи.
теперь надо обязательно сделать дамп второй раз, сняв прищепку с чипа и надев её заново! таким образом мы убедимся, что контакт был хороший и чип прочитался верно.
дампим, и сверяем чексумму с первым дампом:
отлично, теперь можно чего-нибудь натворить
5. патчим биос.
я сделаю лишь простейшую демонстрацию изменения прошивки, а вы вместо моего "патча" можете сделать что-нибудь более полезное - например, сбросить пароль биоса https://badcaps.net/forum/showpost.php?p=1108842&postcount=4 с купленного за копейки залоченного ноутбука https://www.ebay.com/sch/i.html?_fr...bios+locked&_sacat=0&LH_TitleDesc=0&_osacat=0
или частично обезвредить железный бэкдор Intel ME https://github.com/corna/me_cleaner/
или установить открытый биос https://coreboot.org/ вместо родного с неизвестно какими бэкдорами и стучалками от производителя материнки.
так как я издеваюсь над серверной, а не обычной, материнкой, то у неё есть удобное управление через браузер, по LAN кабелю. подробнее об этом будет, возможно, в моей следующей статье
я зашёл в биос и для демонстрации решил изменить строку копирайта "© 2020 American Megatrends":
для редактирования дампа биоса нужна старая версия UEFITool, так как новые версии не умеют в редактирование. качаем её отсюда: https://github.com/LongSoft/UEFITool/releases/tag/0.28.0
ищем строку с копирайтом:
находим секцию:
вытаскиваем её из дампа:
открываем полученный файл в HEX редакторе, жмём Ctrl+F... и не находим текст "copyright".
штош, смотрим предыдущий скриншот, и скроллим в редакторе до адреса, который указал UEFITool - "61F86"
обнаруживаем, что текст не находится, потому что каждый символ разделён нуллбайтом (наверное, потому что это кодировка UTF-8, в которой выделено по 2 байта на символ)
заменяем текст на что-нибудь другое:
сохраняем изменённый файл в hex редакторе; открываем обратно UEFITool; жмём right click на нужной секции; "Replace as is..." и указываем изменённый файл.
сохраняем изменённый дамп под новым названием: File -> Save image file...
и прошиваем его в чип, не забыв перед этим отключить от материнки блок питания и вытащить LAN кабель!
- типичный процесс записи (да и чтения) чипа через прищепку
увидев заветное слово "VERIFIED" наконец можно отсоединить прищепку, подключить материнку к блоку питания, и проверить, что получилось...
...и только тут я заметил, что парой скриншотов выше я в hex редакторе изменил только одну строку с копирайтом, а там их было две
6. некоторые другие нюансы
если лампочка power горит слабо - тускнеет сразу после втыкания в юсб порт или подключения прищепки, то ты подсоединяешь прищепку наоборот! или один контакт прищепки касается сразу двух ног чипа.
если горят сразу обе лампочки - то же самое. вторая лампочка должна загораться только во время чтения или записи чипа!
"no EEPROM/flash device found" - ножки чипа могут быть окислены или покрыты лаком, из-за чего может быть плохой контакт с прищепкой, поэтому ножки желательно почистить, прежде чем надевать прищепку.
потрите ножки чипа чем-нибудь жёстким, желательно не металлическим
отлично подойдёт синяя сторона красно-синего ластика. в принципе, можно потереть и чем-нибудь металлическим, но ОЧЕНЬ осторожно - вы можете сжечь чип, закоротив его ноги, если вдруг у материнки будет питание (не вытащена батарейка или не разряжены конденсаторы)
если flashrom показывает идентификаторы чипа "0xffff" или падает посередине чтения с LIBUSB ERROR - то, помимо плохого контакта, также это может быть нехватка питания. возможно, требуется подать дополнительное питание на материнку - например, всё-таки оставить в ней батарейку CR2032, я с таким сталкивался
возможно придётся даже подключить к мамке блок питания, но я очень не рекомендую это делать, т.к. есть риск спалить мамку и/или программатор и/или компьютер, в который воткнут программатор.
если чип не определяется после чистки контактов, двадцати попыток надевания прищепки без батарейки, и двадцати попыток надевания прищепки с батарейкой, то лучше уже выпаять этот чип и засунуть его прямо в программатор, чем рисковать материнкой или вторым компом. ну или воспользоваться грабберами.
ещё важно - никогда не подключайте программатор через USB хаб, так как хаб может урезать питание! всегда подключайте программатор напрямую в USB порт рабочего компа.
также нежелательно подключать через USB удлинители, потому что они тоже могут резать ток. у меня есть один вроде бы илитный кабель с экранизацией и ферритовым фильтром, но опытным путём выяснилось, что через него не проходит ток больше 0.1 ампера, то есть эта красивая фигня годится максимум для подключения клавиатуры, даже не юсб флешки.
7. засим откланиваюсь
автор я, распространять разрешаю только при указании ссылки на этот топик.
донаты сюда: 1dprEpsBVpjXfiaBtwyFp5X7Dtfs5VVR1
Disclaimer: вариант с прищепкой ненадёжный - прошивка может не сдампиться, а прищепка может повредить чип, но это самый быстрый и дешёвый метод, т.к. не требует расходов на паяльную станцию и микроскоп. также у подавляющего большинства пользователей всё получается без проблем, CH341A - самый рекомендуемый программатор на форуме bios-mods (и крайне не рекомендуемый на профессиональных форумах, но об этом чуть ниже
для гарантированно беспроблемного чтения и записи, а также чтобы гарантированно не убить материнку, я рекомендую вместо использования прищепки выпаивать чип и вставлять его напрямую в программатор.
работать я буду в линуксе, потому что виндой пользоваться не умею.
0. что такое SPI, примеры чипов
SPI - это один из стандартов передачи данных между железками, в чипах биоса используется именно он. мне лень перефразировать википедию, читайте сами: https://ru.wikipedia.org/wiki/Serial_Peripheral_Interface
основное, что вам нужно запомнить: для программирования SPI чипа нужно определить у этого чипа 6 контактов, которые называются:
- "MISO"
- "MOSI"
- "SCLK", он же "SCK" или "CLK"
- "SS", он же "CS"
- "VDD", он же "VCC", "VREF", "5V", "3.3V", "1.8V", или просто "плюс"
- "VSS", он же "GND", он же "земля" или просто "минус"
как найти биос:
- если у чипа 8 или 16 ног*,
- в первых символах названия стоит "25",
- и особенно если на нём написано "Winbond", "MXIC", "SST",
то скорее всего это и есть чип с прошивкой биоса.
* - к сожалению, это не всегда так - иногда вместо нормальных чипов с ногами, типа SOP/SOIC, ставят чипы с контактами снизу, типа SON или BGA, такие чипы придётся выпаивать для перепрошивки.
примеры чипов здорового человека:
на особо илитных материнках чипы даже подписаны:
поскольку SPI весьма распространённый стандарт, то он используется не только биосом, но и кучей других составляющих компа. например, на таком же чипе может быть записана прошивка контроллера сетевой платы:
то есть не всё, что "winbond-25", то биос
однако на некоторых материнских платах встречаются сразу два чипа именно биоса, что с этим делать я не знаю, гуглите сами.
обратите внимание, что у всех чипов в одном углу есть пятно краски или кружочек - так обозначается первая нога чипа. зачастую это обозначение также дублируется на материнке, тоже пятном краски или стрелкой.
1. китайская подделка китайского программатора
для прошивки биоса я буду использовать копеечный "народный" программатор "CH341A", де-факто являющийся стандартом для перепрошивки биоса.
существует куча подделок этого программатора, поэтому я рекомендую или найти оригинал, или купить конкретную подделку, которая точно работает (по крайней мере у меня
оригинал: плата зелёного цвета с кучей надписей, чип "CH341A", название "CH341AProg".
вот это оригинальные (возможно оригинальные
вот это рабочая подделка: плата чёрного цвета, чип "CH341B" (почти все подделки поставляются с этим чипом вместо "CH341A"), название с опечатками "MinProgramment" вместо "Mini Programmer", и подпись "MIOS" вместо "MISO" у одного контакта.
большинство продаванов с али продают программаторы в комплекте с прищепкой SOP8/SOIC8 для стандартного восьминогого чипа BIOS. если будете заказывать, то вдобавок захватите прищепку SOP16/SOIC16 на 16 контактов, она тоже может пригодиться - 16тиногие чипы тоже встречаются.
также обязательно погуглите спецификацию вашего чипа биоса - некоторые чипы работают от 1.8 вольт вместо 3.3, такие чипы придётся подключать через переходник на 1.8 вольт типа такого:
также может пригодиться набор пинцетов "SMD grabber" / "probe hook". меня пару раз выручали, когда через прищепку никак не получалось сдампить чип.
китайские грабберы почти ничего не стоят (2-3 бакса за целый набор), но они очень толстые (~3мм) и поэтому подключаться ими к чипу будет очень сложно или вообще не получится.
лучше поискать б/у набор брендовых грабберов, типа Tektronix SMG50, Pomona 72902 или Agilent 5090-4833 - это качественные грабберы толщиной ~1 мм, и б/ушные они стоят всего по 2-3 бакса за штуку. новые покупать не рекомендую, т.к. они стоят совершенно сумасшедших денег, и если у вас есть лишняя пара-тройка сотен баксов - лучше купите паяльную станцию и микроскоп, чтобы нормально выпаивать чипы вместо гемора с прищепками.
а вот на другой конец, который мы будем подключать к программатору, отлично подойдут копеечные китайские грабберы с загнутым носом, потому что у программатора пины расположены далеко друг от друга и подойдут даже толстые грабберы.
удобный провод для соединения двух грабберов - это гребёнка "dupont jumper wires". захватите две вариации - "мама-мама" и "мама-папа". двух пап нам не надо, ибо это грех.
также сгодятся маленькие крокодилы из ближайшего хозмага. но лучше, конечно, соединительный провод к грабберам припаять.
2. подготовка программатора
как полагается, китайская подделка требует доработки напильником (хотя возможно, что и оригинал тоже
программатор может выдавать 5 вольт вместо 3.3, что теоретически может убить чип биоса, а в худшем случае ещё и соседние с ним элементы материнки.
хотя большинство чипов очень живучие и выдержат 5 вольт, лучше не рисковать и физически залочить программатор на 3.3 вольта.
больше информации тут:
CH341A Serial Memory Programmer Power Supply Fix - Page 1
CH341A Serial Memory Programmer Power Supply Fix - Page 1
www.eevblog.com
Libreboot – Read/write 25XX NOR flash via SPI protocol
Libreboot – Read/write 25XX NOR flash via SPI protocol
libreboot.org
даже если вы нашли оригинал (или похожую на оригинал подделку), всё равно обязательно проверьте вольтметром напряжение между CLK/CS/MOSI/MISO и GND - оно не должно быть выше 3.5 вольт.
для моей подделки сработала очень простая модификация: разрезать дорожку слева от названия "MinProgramment" и поставить джампер на пины "5V" и "3.3V".
при этом пин "5V" тоже начинает выдавать 3.3 вольта. но если вдруг понадобится сделать 5 вольт вместо 3.3, то можно будет просто запаять эту дорожку и снять джампер.
пины, отмеченные "1,2,3" - это место для джампера настройки программатора.
джампер на пинах 1-2, название "что-то на китайском" = режим SPI/I2C/GPIO - то, что нам нужно.
при подключении к USB порту программатор определяется как "idVendor=1a86, idProduct=5512" или "1a86:5512"
джампер на пинах 2-3, название "TTL" = режим Serial/UART, это нам не нужно.
программатор в этом режиме определяется как "idVendor=1a86, idProduct=5523" или "1a86:5523"
теперь подключаем прищепку к программатору.
вспоминаем, что на чипах отмечена первая нога, и с удивлением обнаруживаем, что один из кабелей прищепки розового цвета. надеюсь, вы уже догадались, почему этот кабель отличается, и что за циферки 1-8 на плате, идущей в комплекте с прищепкой
(если у вас восьминогий чип биоса, то следующее можно пропустить)
с шестнадцатиногой прищепкой чуть посложнее - ведь у неё вся гребёнка лгбтшная, и её можно надеть на плату двумя сторонами. я решил, что пусть синий кабель будет первым.
для надёжности и безопасности, после надевания прищепки на плату, нужно "прозвонить" контакты мультиметром, и удостовериться, что контакт прищепки, подключённый к синему кабелю, "звенит" на контакте платы под номером 1.
вторая сложность состоит в том, что эта плата предназначена для нормальных программаторов, а не для CH341A, у которого для SPI предназначены только нижние 8 дырок (обозначены "25XX")
смотрим спецификацию шестнадцатиногого SPI чипа:
вспоминаем, какие 6 пинов нам нужны, и подключаем провода dupont к соответствующим пинам на идущей в комплекте с прищепкой плате.
желательно каждый провод подписать, чтобы не перепутать.
для надёжности и безопасности нужно "прозвонить" контакты мультиметром и убедиться, что всё подключено верно.
ну и собираем такого франкенштейна, подключив провода dupont к соответствующим пинам на программаторе:
естественно, вам такая конструкция может и не нужна вовсе, если все чипы на вашей мамке восьминогие.
3. подготовка рабочего места
прежде, чем лезть своими грязными руками в материнку, необходимо убрать любые источники электричества:
[ ] отключите от материнки ВСЕ кабели блока питания
[ ] отключите от материнки ВСЕ внешние кабели (видео, сетевые, USB)
[ ] достаньте батарейку CR2032
[ ] если у вас на полу ковёр - обязательно оденьте тапочки с резиновой подошвой
[ ] желательно пользоваться антистатическим браслетом и/или специальным антистатическим резиновым ковриком
(распечатайте список и при работе ставьте галочки в пустые поля, чтобы ничего не забыть
теперь по софту: в линуксе для прошивания биоса используется flashrom: https://github.com/flashrom/flashrom
в большинстве дистрибутивов он есть в стандартных репозиториях, но там может быть старая версия, не поддерживающая ваш конкретный чип, или имеющая какие-то баги.
поэтому желательно установить самую свежую версию flashrom, скомпилировав её из исходного кода.
качаем && компиляем:
(тут сначала понадобится установить кучу добра, такого как gcc make git libpci-dev zlib1g-dev libusb-dev libudev-dev, разберётесь самостоятельно)
Код:
git clone https://github.com/flashrom/flashrom
cd flashrom
make
./flashrom
если в списке поддерживаемых программаторов не оказалось ch341a_spi - значит, компилятор не нашёл libusb или libudev и тихо пропустил все программаторы, подключаемые по USB. обязательно установите подходящий для вашего дистрибутива пакет (типа libusb1-dev) и попробуйте пересобрать снова (make clean && make)
найдите обозначение вашего чипа в базе flashrom. некоторые буквы в названии заменяются точками, если разные чипы с разными буквами в названии оказываются одинаковыми внутри.
- мой чип в базе flashrom называется "W25Q128.V" - буква F заменена точкой.
показать список всех поддерживаемых чипов: flashrom -L
даже если вашего чипа нет в списке, то вполне возможно, что он поддерживается, попробуйте указать ближайший по названию. например, для чипа с маркировкой "MXIC MX 25L12872F"
можно указать "flashrom -c MX25L12835F/MX25L12845E/MX25L12865E"
теперь самое сложное: надеваем прищепку на чип.
убедитесь, что первый провод прищепки вы подключаете к первой ноге чипа! и что платформа прищепки вставлена в программатор правильно. смотрите картинки выше, с розовым проводом.
и только после того, как надели прищепку на чип, вставьте программатор в USB порт.
следующий нюанс - некоторые особо умные дистрибутивы линукса любят рандомно отключать юсб устройства "для энергосбережения". вряд ли это произойдёт в тот момент, когда устройство точно активно, но для уверенности лучше это энергосбережение убрать.
откройте sudo powertop и сделайте "Bad" во всех строках, имеющих отношение к USB:
4. наконец делаем дамп чипа
несмотря на то, что flashrom умеет автоматом детектить чип, лучше всегда указывать модель чипа вручную, например:
flashrom -p ch341a_spi -c W25Q128.V -r read.bin
во время чтения чипа (и особенно во время записи!) лучше вообще отойти от стола, чтобы случайно не сдвинуть прищепку, пошатнув или неудачно облокотившись об стол.
после того, как чип прочитался, проверяем, что в дампе действительно что-то есть:
рандомные данные - это хорошо. но если в дампе все байты - "FF" или "00" - то это значит, что чип не прочитался. перенаденьте прищепку и попробуйте ещё раз. и ещё. и ещё)
если опять не читается - смотрите доп. нюансы в самом низу статьи.
теперь надо обязательно сделать дамп второй раз, сняв прищепку с чипа и надев её заново! таким образом мы убедимся, что контакт был хороший и чип прочитался верно.
дампим, и сверяем чексумму с первым дампом:
отлично, теперь можно чего-нибудь натворить
5. патчим биос.
я сделаю лишь простейшую демонстрацию изменения прошивки, а вы вместо моего "патча" можете сделать что-нибудь более полезное - например, сбросить пароль биоса https://badcaps.net/forum/showpost.php?p=1108842&postcount=4 с купленного за копейки залоченного ноутбука https://www.ebay.com/sch/i.html?_fr...bios+locked&_sacat=0&LH_TitleDesc=0&_osacat=0
или частично обезвредить железный бэкдор Intel ME https://github.com/corna/me_cleaner/
или установить открытый биос https://coreboot.org/ вместо родного с неизвестно какими бэкдорами и стучалками от производителя материнки.
так как я издеваюсь над серверной, а не обычной, материнкой, то у неё есть удобное управление через браузер, по LAN кабелю. подробнее об этом будет, возможно, в моей следующей статье
я зашёл в биос и для демонстрации решил изменить строку копирайта "© 2020 American Megatrends":
для редактирования дампа биоса нужна старая версия UEFITool, так как новые версии не умеют в редактирование. качаем её отсюда: https://github.com/LongSoft/UEFITool/releases/tag/0.28.0
ищем строку с копирайтом:
находим секцию:
вытаскиваем её из дампа:
открываем полученный файл в HEX редакторе, жмём Ctrl+F... и не находим текст "copyright".
штош, смотрим предыдущий скриншот, и скроллим в редакторе до адреса, который указал UEFITool - "61F86"
обнаруживаем, что текст не находится, потому что каждый символ разделён нуллбайтом (наверное, потому что это кодировка UTF-8, в которой выделено по 2 байта на символ)
заменяем текст на что-нибудь другое:
сохраняем изменённый файл в hex редакторе; открываем обратно UEFITool; жмём right click на нужной секции; "Replace as is..." и указываем изменённый файл.
сохраняем изменённый дамп под новым названием: File -> Save image file...
и прошиваем его в чип, не забыв перед этим отключить от материнки блок питания и вытащить LAN кабель!
- типичный процесс записи (да и чтения) чипа через прищепку
увидев заветное слово "VERIFIED" наконец можно отсоединить прищепку, подключить материнку к блоку питания, и проверить, что получилось...
...и только тут я заметил, что парой скриншотов выше я в hex редакторе изменил только одну строку с копирайтом, а там их было две
6. некоторые другие нюансы
если лампочка power горит слабо - тускнеет сразу после втыкания в юсб порт или подключения прищепки, то ты подсоединяешь прищепку наоборот! или один контакт прищепки касается сразу двух ног чипа.
если горят сразу обе лампочки - то же самое. вторая лампочка должна загораться только во время чтения или записи чипа!
"no EEPROM/flash device found" - ножки чипа могут быть окислены или покрыты лаком, из-за чего может быть плохой контакт с прищепкой, поэтому ножки желательно почистить, прежде чем надевать прищепку.
потрите ножки чипа чем-нибудь жёстким, желательно не металлическим
отлично подойдёт синяя сторона красно-синего ластика. в принципе, можно потереть и чем-нибудь металлическим, но ОЧЕНЬ осторожно - вы можете сжечь чип, закоротив его ноги, если вдруг у материнки будет питание (не вытащена батарейка или не разряжены конденсаторы)
если flashrom показывает идентификаторы чипа "0xffff" или падает посередине чтения с LIBUSB ERROR - то, помимо плохого контакта, также это может быть нехватка питания. возможно, требуется подать дополнительное питание на материнку - например, всё-таки оставить в ней батарейку CR2032, я с таким сталкивался
возможно придётся даже подключить к мамке блок питания, но я очень не рекомендую это делать, т.к. есть риск спалить мамку и/или программатор и/или компьютер, в который воткнут программатор.
если чип не определяется после чистки контактов, двадцати попыток надевания прищепки без батарейки, и двадцати попыток надевания прищепки с батарейкой, то лучше уже выпаять этот чип и засунуть его прямо в программатор, чем рисковать материнкой или вторым компом. ну или воспользоваться грабберами.
ещё важно - никогда не подключайте программатор через USB хаб, так как хаб может урезать питание! всегда подключайте программатор напрямую в USB порт рабочего компа.
также нежелательно подключать через USB удлинители, потому что они тоже могут резать ток. у меня есть один вроде бы илитный кабель с экранизацией и ферритовым фильтром, но опытным путём выяснилось, что через него не проходит ток больше 0.1 ампера, то есть эта красивая фигня годится максимум для подключения клавиатуры, даже не юсб флешки.
7. засим откланиваюсь
автор я, распространять разрешаю только при указании ссылки на этот топик.
донаты сюда: 1dprEpsBVpjXfiaBtwyFp5X7Dtfs5VVR1