При попытке прошить микросхему SPI Flash через программатор часто возникает ошибка chip not found или buffer size mismatch — это прямое следствие несоответствия размера файла дампа объему микросхемы. Например, дамп от материнской платы с чипом Winbond W25Q128 (16 МБ) не зальется в W25Q64 (8 МБ), пока вы не удалите лишние данные из образа. Обрезка BIOS — это процесс удаления «мусорных» данных из файла дампа, которые не относятся к коду прошивки, либо приведение размера файла к объему целевой микросхемы.
Чаще всего необходимость обрезать файл возникает при переносе прошивки с одного чипа на другой, при восстановлении после неудачного обновления или когда программатор отказывается принимать файл большего размера. В этой инструкции разберем три способа обрезки: через HEX-редактор, через консольную утилиту dd и через специализированный софт для работы с дампами.
Что такое «лишние данные» в дампе BIOS
Файл BIOS, скачанный с сайта производителя или сохраненный программатором, — это точная копия содержимого микросхемы флеш-памяти. Внутри него находятся не только код UEFI, но и области GUID-разделов, таблицы Flash Descriptor (на платформах Intel), MAC-адреса, серийные номера и пустые области FF.
Пустые области заполнены байтами 0xFF — это нормальное состояние стертой ячейки памяти. Именно эти области чаще всего обрезают, когда нужно уменьшить размер файла. Однако просто удалить «хвост» из FF недостаточно — важно сохранить целостность структуры данных, иначе плата не запустится.
Вы должны четко понимать: обрезать биос под программатор — значит не просто уменьшить файл, а подготовить его для корректной записи в чип с другим объемом или для обхода ограничений софта. Если вы ошиблись с границей обрезки, прошивка будет записана, но система не стартует, либо программатор выдаст ошибку верификации.
⚠️ Внимание: перед любыми манипуляциями с дампом обязательно сохраните оригинальный файл. Если вы случайно обрежете не ту область, восстановить исходник без резервной копии будет невозможно.
Определение точного размера микросхемы и файла
Первый шаг — узнать реальный объем чипа, на который вы будете прошивать. Маркировка на корпусе микросхемы содержит эту информацию: например, W25Q128FV означает 128 Мбит, что равно 16 МБайт. W25Q64 — 64 Мбит или 8 МБайт. Не путайте биты и байты: разделите значение в мегабитах на 8, чтобы получить мегабайты.
Затем проверьте размер скачанного файла. В Windows кликните правой кнопкой мыши по файлу → «Свойства» — и посмотрите значение «Размер» и «Размер на диске». Для Linux используйте команду ls -la имя_файла.bin. Идеальный случай — когда размер файла точно совпадает с объемом микросхемы. Если файл больше — его нужно обрезать; если меньше — это может указывать на поврежденный дамп.
Ниже приведена таблица соответствия маркировки чипов и размера файла в байтах:
| Маркировка чипа | Объем, Мбит | Размер файла, байт | Размер, МБайт |
|---|---|---|---|
| W25Q32 / MX25L3205 | 32 | 4 194 304 | 4 |
| W25Q64 / MX25L6405 | 64 | 8 388 608 | 8 |
| W25Q128 / MX25L12835 | 128 | 16 777 216 | 16 |
| W25Q256 / MX25L25645 | 256 | 33 554 432 | 32 |
Если размер файла не совпадает ни с одним значением из таблицы, вероятно, дамп содержит дополнительные данные (например, область Gigabyte Hybrid EFI или служебные блоки). В этом случае обрезка обязательна.
Способ 1: обрезка через HEX-редактор HxD
Бесплатный редактор HxD — самый доступный инструмент для Windows. Он позволяет открыть бинарный файл, визуально оценить структуру и удалить ненужные байты. Установите HxD с официального сайта и запустите от имени администратора.
Откройте файл дампа через меню File → Open. В правой части окна вы увидите шестнадцатеричные значения, в левой — их текстовое представление. Прокрутите файл в самый конец: если последние строки заполнены только символами FF, это пустая область, которую можно удалить.
Чтобы обрезать «хвост», выполните такие действия:
- Нажмите
Ctrl + End, чтобы перейти в конец файла. - Зажмите
Shiftи нажмитеCtrl + Home— выделится все содержимое от курсора до начала файла. Это не то, что нужно. - Вместо этого нажмите
Ctrl + G, введите адрес начала «мусорной» зоны (например,0x800000для 8 МБ) и нажмите OK. - Курсор встанет на нужную позицию. Зажмите
Shiftи нажмитеCtrl + End— выделится все от курсора до конца файла. - Нажмите
DeleteилиCtrl + X, чтобы вырезать выделенный фрагмент. - Сохраните файл через
File → Save Asс новым именем.
После обрезки обязательно проверьте, что новый размер файла кратен объему сектора микросхемы (обычно 4 КБ или 64 КБ). Если размер не кратен, программатор может отказаться прошивать такой файл.
☑️ Чек-лист перед обрезкой в HxD
Способ 2: обрезка через утилиту dd в Linux
В Linux обрезка файла выполняется одной командой без установки дополнительного ПО. Утилита dd есть в любой системе по умолчанию. Этот метод предпочтителен для опытных пользователей, так как требует точного знания размера.
Базовая команда для обрезки последних N байт выглядит так:
dd if=оригинал.bin of=обрезанный.bin bs=1M count=8
Здесь if — входной файл, of — выходной, bs — размер блока (1 мегабайт), count — количество блоков для копирования. В примере выше мы копируем первые 8 МБ из файла, отбрасывая все остальное. Если нужно оставить 16 МБ, измените count=16.
Для обрезки «хвоста» с конца файла используйте команду truncate:
truncate -s 8M оригинал.bin
Эта команда изменит размер файла прямо на диске, удалив лишние байты в конце. Будьте осторожны: она изменяет исходный файл, поэтому сначала скопируйте его.
⚠️ Внимание: команда truncate изменяет файл «на месте» без создания копии. Если вы ошибетесь в размере, восстановить данные не получится. Всегда работайте с копией дампа.
После обрезки проверьте контрольную сумму нового файла командой md5sum обрезанный.bin и сравните с оригиналом — они должны различаться, так как размер изменился. Но если вы обрезали только пустые области FF, контрольная сумма полезных данных (первые байты) должна совпадать.
Способ 3: использование специализированных утилит для BIOS
Для материнских плат на чипсетах Intel существует фирменная утилита Intel Flash Programming Tool (FPT), которая умеет работать с разделами Flash Descriptor. Она позволяет извлечь отдельные области — BIOS Region, ME Region, GbE Region — и сохранить их как отдельные файлы. Это самый правильный способ обрезки, так как вы получаете чистый код BIOS без служебных данных.
Для плат на чипсетах AMD аналогичную функцию выполняет утилита AMD Flash Programmer или сторонние инструменты вроде AMITool. Принцип работы одинаков: утилита читает структуру дампа, определяет границы разделов и позволяет экспортировать нужный регион.
Если вы используете программатор CH341A с ПО AsProgrammer или NeoProgrammer, в настройках есть функция «Trim trailing 0xFF bytes» — она автоматически удаляет пустые байты в конце файла при загрузке. Это простейший вариант, который не требует ручных операций.
Проверка целостности после обрезки
После того как файл обрезан, нельзя сразу прошивать его в чип. Сначала нужно убедиться, что структура данных не нарушена. Откройте обрезанный файл в HxD и проверьте первые 16 байт: для UEFI-прошивок они содержат сигнатуру UEFI или 0xAA55 в конце первого сектора. Если сигнатура отсутствует — вы обрезали слишком много.
Также проверьте, что в конце файла нет «обрывка» — случайного байта, не равного FF. Если последний байт не FF, значит, вы отрезали часть полезных данных. Вернитесь на шаг назад и увеличьте размер файла.
Для проверки контрольной суммы используйте утилиту hdrcheck или встроенную функцию в NeoProgrammer. Некоторые материнские платы проверяют контрольную сумму при старте, и если она не совпадает — плата не включится. В этом случае после обрезки потребуется пересчитать и пропатчить контрольную сумму, что делается автоматически в большинстве современных программаторов.
Типичные ошибки при обрезке дампа
Самая распространенная ошибка — обрезка «на глаз» без проверки структуры. Пользователь видит, что файл весит 16 МБ, а чип рассчитан на 8 МБ, и просто удаляет вторую половину файла. В результате плата не стартует, потому что во второй половине находился код ME Region (Management Engine), отвечающий за инициализацию платформы Intel.
Вторая по частоте ошибка — обрезка файла с неправильным смещением. Например, на платах Gigabyte дамп содержит 4-байтный заголовок в начале, и если его удалить, прошивка не загрузится. Всегда сверяйте структуру дампа с эталонным файлом от той же модели платы.
Третья ошибка — игнорирование контрольной суммы. После обрезки сумма меняется, и материнская плата может отказаться загружаться. Решение — использовать программатор с функцией автоматического пересчета контрольной суммы или вручную пропатчить файл утилитой CBROM.
⚠️ Внимание: если после прошивки обрезанного файла плата не подает признаков жизни (нет POST-кодов, не крутятся вентиляторы), не спешите выбрасывать чип. Сотрите его полностью командой chip erase в программаторе и прошейте оригинальный дамп — микросхема в большинстве случаев остается рабочей.
FAQ по обрезке BIOS под программатор
Можно ли обрезать дамп без потери работоспособности?
Да, если вы удаляете только пустые области FF или служебные разделы, которые не используются целевой платой. Однако для плат Intel обрезка ME Region недопустима — без него система не загрузится. Лучше использовать извлечение регионов через FPT, а не простое удаление байтов.
Что делать, если программатор не принимает обрезанный файл?
Проверьте, что размер файла точно совпадает с объемом чипа. Если файл меньше чипа, программатор может автоматически дополнить его байтами FF — это допустимо. Если файл больше — обрежьте еще раз. Также убедитесь, что вы выбрали правильный тип чипа в настройках программатора.
Как узнать, где заканчиваются полезные данные в дампе?
Прокрутите файл в HEX-редакторе до конца. Если последние 10-20% файла заполнены байтами FF без единого другого значения — это пустая область. Начните обрезку с первого байта FF, который идет подряд более 64 КБ. Для точного определения используйте поиск по шаблону FF FF FF FF.
Чем отличается обрезка для чипов SPI и LPC?
Чипы SPI (например, W25Q128) имеют линейную адресацию, и обрезка «хвоста» безопасна. Чипы LPC (например, PMC Pm49FL004) используют другую схему адресации, и простое удаление байтов может нарушить карту памяти. Для LPC-чипов всегда используйте специализированные утилиты производителя платы.
Можно ли восстановить оригинальный дамп из обрезанного файла?
Нет, если вы удалили данные и сохранили файл, восстановить удаленные байты невозможно. Единственный способ — повторно скачать прошивку с сайта производителя или считать дамп с исправной микросхемы такой же платы. Поэтому резервная копия обязательна.
Освоив обрезку дампа, вы сможете прошивать BIOS на чипы меньшего объема, восстанавливать платы после неудачных обновлений и обходить ограничения программаторов. Главное правило — всегда сохраняйте оригинал и проверяйте структуру файла до и после обрезки. При работе с платформами Intel обязательно используйте извлечение регионов вместо грубого удаления байтов — это сохранит работоспособность Management Engine и избавит от проблем с запуском.