Sergey
Данная статья предназначена для сильно продвинутых пользователей, понимающих,
что они делают и каковы последствия в случае неудачи. Материал подаётся по
принципу "As Is", и автор не несёт никакой ответственности за
моральный или материальный ущерб, могущий возникнуть как у читателя после
прочтения данного материала, так и у третьей стороны от действий читателя после
прочтения данного материала. Максимально возможная техническая неприятность в
случае неграмотных действий пользователя или воздействия внешних причин вызовет
необходимость перепрошивки флеш-памяти с образом BIOS на внешнем программаторе.
Исправление ошибок в CPU, я выполнил указанные в ней действия, загрузив тем
самым в область DMI 2-килобайтный блок программного исправления ошибок микроядра
CPU. Однако попытка получить спустя полгода новую базу исправлений ошибок
(PEP15.PDB) как от изготовителя процессора (фирмы Intel), так и от продавца не
увенчались успехом: продавец (фирма "IQ Computers") отвечает, что у
него нет доступа к интеловской базе (что в общем-то странно и может означать, на
мой взгляд, только то, что торговля процессорами этим продавцом осуществляется
по "серым" каналам, не имеюшим официального выхода на Intel), а
техсаппорт изготовителя отвечает буквально следующее:
===
From: Intel Customer Support
<support@mailbox.cps.intel.com> Subject: RE: Latest version of P6+
ERRATA corrections base Date: 10 июня 1999 г. 0:52
01:44 PM
6/9/99
Hello Sergey, The file is available here:
http://channel.intel.com/business/ibp/private/integration/downloads/p6bu.htm
The site is password protected. Your Intel(R) rep should be able to
assist you if you do not have the password. -------- Joseph K
*All brands and trademarks are the property of their respective owners
===
Анализируя возможные пути и способы получения этой базы по неофициальным
каналам, я обратил внимание на блоки CPUCODE в Award-BIOS'ах различных
фирм-изготовителей материнских плат. Более пристальный анализ формата этих
блоков показал, что он либо полностью совпадает с форматом PEP15.PDB (как в
BIOS'ах от A-Bit, например; имя файла -- CPUCODE.BIN), либо блокам из PEP15.PDB
предшествует некий заголовок неизвестного мне формата (как в BIOS'ах от ASUS;
имя файла -- CPUCODE.EXE, хотя никакого отношения к исполнимым файлам формата
*.EXE он не имеет). Каждый 2-килобайтный (2048 байт) блок файла PEP15.PDB (или,
что то же самое, CPUCODE.BIN) содержит заголовок следующего, насколько мне
удалось разобрать сравнительным анализом, формата:
Смещение (16cc.) |
Длина (10cc.) или формат |
Описание |
+0 |
двойное слово |
Номер версии формата (не встречал отличное от 1) |
+4 |
двойное слово |
Номер версии блока для данного CPUID |
+8 |
4 байта |
Дата выхода данной версии блока |
+8 |
слово |
Год выхода (0x9919 -- 1999 год) |
+A |
байт |
День выхода (0x12 -- 12-е число) |
+B |
байт |
Месяц выхода (0x12 -- декабрь) |
+C |
слово |
CPUID процессора, для которого предназначен блок |
+E |
слово |
Не используется (заполнено нулями) |
+10 |
4 байта |
??? Возможно, -- контрольная сумма |
+14 |
двойное слово |
Номер версии формата (???, не встречал отличное от 1) |
+18 |
двойное слово |
PKG (Package) процессора |
+1C |
двойное слово |
Не используется (заполнено нулями) |
+20 |
16 байтов |
Не используется (заполнено нулями) |
+30 |
до конца блока |
Содержательная часть (собственно
исправлениямикрокода) |
Для тех, кто не знает: в слове -- 2 байта, в двойном слове -- 4 байта,
информация записывается в файле "задом наперёд", т.е. сначала идёт
младший байт, а за ним -- старший. Число 1 в файле представляется в виде
двойного слова как 0x01000000.
Руководствуясь вышеизложенным, я вычленил из оригинальной январской 1999 года
базы PEP15.PDB такие 2-килобайтные блоки и записал их в отдельные файлы, дав
каждому из них имя aaaabbcc.BIN, где aaaa -- CPUID из заголовка (+C), bb -- PKG
процессора из заголовка (+18), cc -- версия блока для данного CPUID из заголовка
(+4). Дату на файлы поставил также по информации из заголовков блоков (+8).
После этого я взял файл CPUCODE.EXE ("CBROM имя_файла_с_прошивкой /CPUCODE
EXTRACT", на вопрос ответить "CPUCODE.EXE" без кавычек) из
последнего BIOS'а от ASUS (v1010 от 16.07.99 для мамок P2B), отрезанием от него
заголовка получил CPUCODE.BIN и "распотрошил" его таким же образом в
другой директории. В ту же директорию добавил ещё два блока, найденные в
DMI-области прошивки (для ASUS'а -- по смещениям 0x37000 и 0x37800 относительно
начала файла с прошивкой). После этого объединил эти две директории в третьей,
оставив из файлов с одинаковыми "aaaabb" в названии только более новые
(с бОльшим номером "cc").
Оставшиеся в итоге в третьей директории 2-килобайтные файлы *.BIN я
отсортировал по имени и объединил их в одну базу с помощью стандартной команды
"COPY": "COPY /b xxx1+xxx2+...xxxN PEP15.PDB" (без кавычек,
разумеется). Эту базу следует использовать вместо оригинальной январской 1999
года базы. Проверено на материнской плате A-Bit i440BX-6 Rev1.0 с процессором
Celeron-333 (CPUID 0x0660).
Следует иметь в виду, что запись корректирующих микрокод блоков с
использованием базы PEP15.PDB производится в область DMI флеш-памяти только для
установленных в материнскую плату на момент запуска утилиты процессоров. После
замены процессора на процессор с другим CPUID утилиту необходимо запускать
повторно. Также необходим повторный запуск утилиты после очистки DMI (запуск
AWDFLASH.EXE с ключом /CD). Однако для 2-мегабитных (256-килобайтных) BIOS'ов
существует способ прописать всю базу непосредственно в файл прошивки. Для того
надо переименовать файл PEP15.PDB в CPUCODE.BIN и выполнить следующую команду:
"CBROM имя_файла_с_прошивкой /CPUCODE CPUCODE.BIN", без кавычек. К
сожалению, этот способ не подходит для 1-мегабитных (128-килобайтных) BIOS'ов,
поскольку вся база просто не влезает в этот BIOS (как я понимаю, именно этим
обстоятельством и был вызван переход на 2-мегабитные BIOS'ы). Невозможно также
применить этот способ и для Award-BIOS'ов от ASUS, ибо файл должен называться не
CPUCODE.BIN, а CPUCODE.EXE, и в нём базе должен предшествовать заголовок,
формата которого я не знаю. Работоспособность этого способа в части подмены
оригинального CPUCODE проверено на файле прошивки от материнской платы A-Bit
i440BX-6 Rev2.0, но саму прошивку я никуда не заливал (за неимением такой
мамки). Как называется файл в вашем BIOS'е, вы можете посмотреть командой
"CBROM имя_файла_с_прошивкой /D".
Позднее я таким же методом распотрошил более новую базу версии 5.01 и
обнаружил два новых процессора, не вошедших в предыдущую мою сборку.
Для наглядности я привожу ниже таблицу поддерживаемых процессоров (таблица
идёт на замену аналогичной в документации к утилите заливки изменений микрокода
от Intel), отсортированную по Stepping/PKG.
Processor |
Package |
Processor Stepping/PKG |
Microcode Update Rev |
Pentium Pro Processor |
PGA |
0x612/00 |
0xC6 |
Pentium Pro Processor |
PGA |
0x616/00 |
0xC6 |
Pentium Pro Processor |
PGA |
0x617/00 |
0xC6 |
Pentium Pro Processor |
PGA |
0x619/00 |
0xD2 |
?????????????????????????????? |
PGA (?) |
0x630/00 |
0x13 |
?????????????????????????????? |
PGA (?) |
0x632/00 |
0x20 |
Pentium II Processor |
SECC |
0x633/01 |
0x34 |
Pentium II Processor |
SECC |
0x634/01 |
0x35 |
Pentium II Processor |
SECC |
0x650/01 |
0x40 |
Intel Celeron Processor |
SEPP |
0x650/01 |
0x40 |
| Pentium II Processor (?) |
Mini-Cart (?) |
0x650/02 |
0x41 |
| Pentium II Processor (?) |
MMC1/MMC2 (?) |
0x650/08 |
0x45 |
Pentium II Processor |
SECC/SECC2 |
0x651/01 |
0x40 |
Intel Celeron Processor |
SEPP |
0x651/01 |
0x40 |
Pentium II Processor |
SECC/SECC2 |
0x652/01 |
0x2A |
| Pentium II Processor (?) |
Mini-Cart (?) |
0x652/02 |
0x2C |
| Pentium II Xeon Processor |
SECC |
0x652/04 |
0x2B |
| Pentium II Processor (?) |
MMC1/MMC2 (?) |
0x652/08 |
0x2D |
Pentium II Processor |
SECC/SECC2 |
0x653/01 |
0x10 |
| Pentium II Xeon Processor |
SECC |
0x653/04 |
0x0B |
Intel Celeron Processor |
SEPP |
0x660/01 |
0x0A |
Intel Celeron Processor |
PPGA |
0x665/10 |
0x03 |
| Mobile Pentium II Processor |
Mini-Cart |
0x66A/02 |
0x0C |
| Mobile Pentium II Processor |
MMC1/MMC2 |
0x66A/08 |
0x0D |
| Mobile Intel Celeron Processor |
MMC1/MMC2 |
0x66A/08 |
0x0D |
| Mobile Pentium II Processor |
Micro-PGA1 |
0x66A/20 |
0x0B |
| Mobile Intel Celeron Processor |
Micro-PGA1 |
0x66A/20 |
0x0B |
| Mobile Pentium II Processor |
Micro-PGA1 |
0x66D/20 |
0x07 |
?????????????????????????????? |
SECC/SECC2 (?) |
0x670/01 |
0x06 |
?????????????????????????????? |
SECC/SECC2 (?) |
0x671/01 |
0x03 |
Pentium III Processor |
SECC/SECC2 |
0x672/01 |
0x10 |
| Pentium III Xeon Processor |
SECC |
0x672/04 |
0x38 |
Pentium III Processor |
SECC/SECC2 |
0x673/01 |
0x0E |
| Pentium III Xeon Processor |
SECC |
0x673/04 |
0x2E |
?????????????????????????????? |
SECC/SECC2 (?) |
0x680/01 |
0x14 |
Pentium III Processor |
SECC/SECC2 |
0x681/01 |
0x0D |
| Pentium III Xeon Processor |
SECC |
0x681/04 |
0x10 |
| Mobile Pentium III Processor |
MMC2 |
0x681/08 |
0x0F |
Pentium III Processor |
FC-PGA |
0x681/10 |
0x11 |
| Mobile Pentium III Processor |
Micro-PGA2 |
0x681/20 |
0x0E |
Pentium III Processor |
SECC2 |
0x683/01 |
0x0C |
| Pentium III Xeon Processor |
SECC |
0x683/04 |
0x0F |
| Mobile Pentium III Processor |
MMC2 |
0x683/08 |
0x08 |
Pentium III Processor |
FC-PGA |
0x683/10 |
0x10 |
| Mobile Pentium III Processor |
Micro-PGA2 |
0x683/20 |
0x07 |
Pentium II OverDrive Processor |
PGA |
x1632/00 |
0x02 |
Знаками "|" отмечены изменения относительно собранной мною базы
предыдущей (20/02/00) версии. Изменения взяты из официальной базы v5.13
(16/03/00) от Intel.
Вопросами вместо имени отмечены модели, которых нет в официальных базах от
Intel, но которые (изменения ядра для них) присутствуют в BIOS'ах ряда
материнских плат. Знаками "(?)" отмечены параметры, полученные
эмпирически из 16-ричных значений Stepping/PKG заголовка соответствующего блока,
ибо в приложенном к базе v5.13 от Intel хелпе ссылок на эти процессоры нет.
Кстати, по поводу A-Bit'а: в новых его мамках используется формат BIOS'а,
несовместимый со старым, и его не берут старые утилиты от AWARD'а (MODBIN, CBROM
ругаются на контрольную сумму), и для работы с этими BIOS'ами выпущена новая
версия AWDFLASH'а -- 7.52C. Соответственно, для работы с этими BIOS'ами надо
применять новые версии MODBIN'а и CBROM'а (MODBIN ищите сами, а новая версия
CBROM'а приложена к данной статье).
Автор будет благодарен тому, кто пришлёт ему более новую версию утилиты
MODBIN (новее приложенной с данной статье), только сначала просьба связаться e-mail'ом: возможно, с момента последней правки
статьи данная или более новая версия у меня уже появилась.
А пока что приложенная к данной статье утилита MODBIN понимает только такие
2-мегабитные (256-килобайтные) BIOS'ы, в которых собственно BIOS (файл
"original.tmp" или как его переименовали разработчики мамки)
начинается со смещения 0x20000 относительно начала дампа прошивки (точнее, с
этого смещения начинается заголовок LHA-архива). Кто хочет, может
поэкспериментировать с BIOS'ом мамки A-Bit BE6-II BEH_QJ.BIN или более новым
BEH_QY.BIN по такому алгоритму: с помощью CBROM'а "вынуть" из BIOS'а
все дополнительные части в отдельные файлы, затем с помощью того же CBROM'а
удалить из BIOS'а все части, кроме 0-й (0-я часть принципиально этой утилитой не
удаляется), после чего HIEW'ом или какой-либо аналогичной утилитой переместить
оригинальный BIOS (0-я часть) со смещения 0x0 на смещение 0x20000 от начала
файла прошивки, затем CBROM'ом восстановить в этот файл все ранее удалённые
компоненты (желательно -- в том же порядке) и попробовать прошить (я надеюсь, вы
обеспечили себе возможность отката, если эта руками скомпонованная прошивка не
заведётся? -- рекомендую иметь под руками запасной флеш с заведомо рабочей
прошивкой) то, что получилось, во флеш мамки BE6-II. MODBIN, приложенный к
статье, такой руками скомпонованный файл прошивки точно видит, но у меня нет
гарантии, что в новых BIOS'ах от A-Bit'а ещё что-либо не добавлено (типа
добавления ещё одной контрольной суммы или ещё чего). В любом случае, все
эксперименты, описанные в этом абзаце, вы выполняете исключительно на свой страх
и риск (у автора нет запасного флеша для экспериментов, равно как нет и данной
мамки), но если всё-таки кто сподобится поэкспериментировать, не сочтите за труд
поделиться результатами...
Пока обнаружена только одна материнская плата, запуск на которой процедуры
обновления DMI (само обновление, а не проверка его необходимости) приводит к
разрушению (расписыванию 0xFF) BIOS'а -- это P3B-F. Ради справедливости следует
отметить, что формат DMI во флеше этой мамки нестандартен, и стандартные
авардовские процедуры коррекции DMI либо вообще этого DMI не видят, либо
отказываются вносить туда изменения. Ну а вот в интелевской утилите, которая
используется для прописывания в DMI блока коррекции ERRATA, этой проверки,
похоже, просто не сделали, отчего запарывание BIOS'а и происходит.
Список выявленных ошибок процессоров Intel с отметками, исправлены ли они,
будут ли исправлены или исправления не планируются, смотрите по ссылкам с
официального сайта компании Intel: www.intel.com
Литература по процессорам
|