Редактируем Award Modular BIOS v6.00PG

Материал из Wiki.ROM.by
Перейти к: навигация, поиск
Обновленная версия статьи Редактируем Award BIOS

Содержание

Утилиты для редактирования Award BIOS 6.0

CBROM v.1.55 - программа для просмотра/распаковки различных модулей биос. Это стандартная утилита от самого Award-а.
Замечание: более "старые" версии (древней ver.1.47) могут работать некорректно (особенно с новыми платами) потому настоятельно НЕ РЕКОМЕНДУЮТСЯ.
MODBIN6 2.01.02 - программа, позволяющая редактировать некоторые регистры чипсета, а так же изменять надписи/опции в BIOS Setup. Это стандартная утилита от самого Award-а.
Замечание: данная версия, в отличие от более старых является наиболее стабильной, хоть и, тоже, не все биосы (точней - содержание BIOS Setup) отображает корректно. В любом случае после редактирования биоса модбином настоятельно рекомендуется "пройтись" по нему сибиромом для точного пересчета контрольной суммы.
LHA ver.2.55 - старый(1988-1991)-добрый архиватор от Haruyasu Yoshizaki, алгоритм которого и лёг в основу упаковки модулей Award BIOS.
HEX-редактор (любой). Можно порекомендовать заслуженно популярный hiew.

Структура Award BIOS v6.00PG

Рис.1.
Состав/модули GA-965P-S3 в cbrom.

Рассмотрим на примере достаточно популярной (и достаточно "свежей" на время написания статьи) платы Gigabyte GA-965P-S3. Как видно из Рис.1., имеет следующий состав модулей (без учета "основного"):

  1. awardext.rom
  2. ACPITBL.BIN
  3. AwardBmp.bmp
  4. ggroup.bin
  5. awardeyt.rom
  6. _EN_CODE.BIN
  7. JMB59.BIN
  8. ICH8AHCI.BIN
  9. 8056b0.lom
  10. PPMINIT.ROM
  11. SBF.BIN
  12. AFSC_HDR.ROM
  13. ME_MRC.BIN
Award BIOS v6.00PG
"original.bin" all another modules CPUcodes (nonPacked) BootBlock
0. 965ps3.BIN 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. NCPUCODE.BIN BootBlock
xx-lha в начале + CRC-byte в конце Все модули без CRC-байта в конце После cpucodes - пустое место, в конце которого (перед самым BootBlock-ом) два байта CRC Бутблок имеет лишь CRC модуля MemSizing

Процесс редактирования

Редактирование "остальных" модулей (кроме "original.bin")

Для любого модуля кроме "основного" ("original.bin" или "965ps3.BIN" в нашем случае) он крайне прост:

  1. распаковываем нужный файл ("вручную" или с помощью cbrom)
  2. редактируем
  3. добавляем (обновляем) в биос с помощью cbrom

Распаковать можно двумя способами. Можно сделать это с помощью cbrom, например для распаковки awardext.rom нужно ввести:

cbrom mybios.bin /awardext extract

(Подробности работы с cbrom - в отдельной статье)

Второй вариант - "ручками". Ищем в hex-редакторе по символьной строке '-lh' начало и конец нужного модуля, сохраняем найденную область в файл с расширением '*.lzh' и после распаковываем любым архиватором. Например, для распаковки "ICH8AHCI.BIN" последовательно перебираем найденные строчки '-lh', пока не доберемся до нужной:

Рис.2.
Ищем подстроку -lh.
Рис.3.
Первой найдется в начале "original.bin".
Рис.4.
Второй - в начале awardext.rom.
Рис.5.
Перебираем, пока не находим нужный нам модуль (видно его название).
Рис.6.
Выделяем модуль - его начало левей подстроки -lh на два байта.
Кто не знает, для выделения в hiew используется '*'.
Рис.7.
Ищем начало следующего модуля...
Рис.8.
...не "закрывая" выделяемую область...
Рис.9.
...и сдвигаемся на три байта влево (это должен быть нулевой байт). Модуль выделен!
Рис.10.
Сохраняем "как есть" (As Is).
Рис.11.
И теперь его можно распаковать любым архиватором.
Рис.12.
Всё вышеописанное можно было сделать с помощью команды cbrom f8.bin /pci extract. Но ученье - свет! :)
Рис.13.
Для добавления используем строчку:
cbrom f8.bin /pci edit_i8.ttt

Редактирование "original.bin"

Извлечение "original.bin"

Но главным вариантом в редактировании биосов является, конечно же, изменение "original.bin". Способов для извлечения "original.bin" известно превеликое множество:

  • запустив модбин и переключившись в другое окно скопировать себе временный одноименный файл, который он (модбин) создает в процессе работы с биосом.
  • тьма всевозможных утилит, работающих с Award BIOS - имеет возможность распаковки любого модуля
  • наконец, просто архиватором (или даже TotalCommaner-ом), который "видит" как lzh-архив с одним файлом внутри - "original.bin"

Однако, у всех (и других подобных) есть существенный недостаток - зависимость от вышеописанных утилит и различных модификаций Award BIOS (оставаясь при этом v.6.00PG). Например, (не специально, но получилось удачно :) ) выбранный файл:

  • не открывается модбином
  • "несъедобен" для многих утилит
  • не определяется архиватором, как LZH-архив.

Вот тут и пригодится опыт, полученный в предыдущем разделе. :)

Рис.14.
Аналогично сначала ищем начало "original.bin" по подстроке -lh.
Рис.15.
Для Award BIOS v.6.00PG (розлива этого тысячелетия) - он есть всегда первый модуль в биосе, в нашем случае он располагается по адресу 90000h.
Рис.16.
Выделяем, начиная с начала...
Рис.17.
...и ищем его конец...
Рис.18.
...следующий модуль - awardext.rom.
Рис.19.
Сдвигаемся левей на три байта - в отличие от "простых" модулей в конце у "original.bin" есть еще и байт CRC(FF в нашем случае), который нам для распаковки ни к чему (хотя с ним тоже прекрасно распакуется - как на рисунке).
Рис.20.
Сохраняем в файл...
Рис.21.
...и распаковываем. "original.bin" к редактированию готов!

Замена "original.bin" отредактированным вариантом

Вариантов добавления новой (отредактированной) версии "original.bin" в биос также есть несколько и эти варианты во многом аналогичны его распаковке с их недостатками. Потому не будем отвлекаться на "мишуру" и постараемся сделать максимально "правильно".

Рис.22.
После редактирования упаковываем "original.bin" с помощью старенького lha.
Рис.23.
Уже хорошо знакомой процедурой поиска в исходном биосе по подстроке -lh...
Рис.24.
... ищем конец модуля "original.bin".
Рис.25.
Сдвигаемся на три байта влево - захватив байт CRC - выделяем область...
Рис.26.
...которая продлится до самого конца. Конец упакованных модулей проще всего найти по FFFFFF...
Рис.27.
Обычно конец находится с первой попытки (удачный пример - с "трудностям" :) ), но сейчас "по дороге" попался незапакованный модуль, в котором тоже есть искомые "эфэфки". Пропускаем эту область и ищем дальше.
Рис.28.
Таки нашли!
Рис.29.
Для "запаса" (на всякий случай) захватим кусочек FF в конце (ведь размер упакованного "original.bin" может отличаться от начального) и сохраняем в файл.
Рис.30.
Далее следует "хитрая" процедура - копируем в конец ранее созданного "1.lzh" полученный "хвост" биоса ("ost.tmp" - состоящий из всех упакованных модулей кроме "original.tmp").
Рис.31.
В результате полученный "слепок" (из "модульной начинки" в виде запакованного "original.bin" + 1 байт CRC + остальные модули биоса) записываем в файл.
Рис.32.
Как мы отмечали, "original.bin", который является началом модульной начинки" - был обнаружен по адресу 90000 - туда и вставляем весь полученный файл.
Рис.33.
Итак, собрать - собрали и cbrom уже даже может корректно подтвердить этот факт. Однако контрольные суммы-то не пересчитаны - ни байт в конце "original.bin", ни "общая" CRC всех модулей, которая лежит сразу же перед BootBlock-ом.

Пересчет CRC

Итак, теперь нам еще предстоит пересчитать контрольные суммы:

  1. Контрольную сумму модуля "original.bin", которая располагается сразу после него, перед всеми остальными запакованными модулями.
  2. "Общую" контрольную сумму всех модулей, которая располагается в самом конце используемого ими (модулями) пространства биоса, сразу перед началом бутблока.

Правило следующее:

  • CRC модуля "original.bin" пересчитывает modbin
  • "Общую" CRC пересчитывает cbrom

Один "не трогает" контрольные суммы "другого", поэтому для пересчёта обеих контрольных сумм обязательны два этапа.

CRC "original.bin"

Контольная сумма в конце "original.bin" является "стандартной" - она считается как побайтовая сумма всего модуля (начиная с самого начала - адреса 90000 в нашем случае) до "нулевого" байта на конце. После чего "инвертированное" значение и является конечным значением - так, чтобы после при подсчете CRC по всему "диапазону" от начала до байта CRC (включая его) получался 0. Данную процедуру можно сделать многими утилитами, но есть важное НО:

Рис.34.
Обведены заголовки и выделено главное отличие - стандартное для "оригинал.бина" место распаковки (5000:0000) в "lha"-шном заголовке обозначает другое, потому имеет совсем другое значение (A69D:8BF6): понятно, что с таким значением биос даже "при желании" - не заработает.
Замечание. Кстати, то, что модбин корректно "узнал" в подобном модуле "original.bin" - заслуга последних версий cbrom32, более старые версии (cbrom) - страшно бы матерились или даже зависли...

Кроме CRC, мы должны исправить заголовок упакованного модуля "original.bin" - он "похож", но, всё-таки, принципиально отличается от сделанного LHA, потому, не исправив его, мы получим нестартующую систему. И именно этим занимается modbin.

Рис.35.
Открываем сделанный файл в модбине.
Рис.36.
Облом-с! "Слишком свежий" был выбран примерчик - даже самый последний модбин не захотел проглотить 8Мбит-ный биос, не признав в нём Аварда...
Рис.37.
Для примера, как "должно было бы быть" - продемонстрируем на другом (4М-битном) биосе (от GA-8IPE1000Pro), сделанным таким же образом. Открываем его в модбине...
Рис.38.
В отличие от предыдущего, он благополучно открывается...
Рис.39.
Сохраняем его под нужным именем (можно "поверх" открываемого).


Статья пишется "по ходу", потому для меня это тоже "сюрприз". К сожалению, но факт - стабильностью/"совместимостью"/"всеядностью" - не блещут никакие версии модбина. Будем надеяться, что в будущем эта печальная реальность изменится, но пока нужно стать "пионерами" и быть готовым всегда и ко всему. :)

Выйти из данной ситуации поможет вышеупомянутое правило - модбин "работает" лишь с одним (единственным) модулем - "original.bin", остальные ему абсолютно не нужны. Этим и воспользуемся, придётся "обработать" модуль "original.bin" - "отдельно".

Рис.40.
Для этого можно использовать другой биос, который "примет" используемая версия модбина. Покопавшись в соседних каталогах, был обнаружен "приятный" двухмегабитный биос от GA-8I848P Rev.1.x - на нём и проведем нужные действия.
Рис.41.
Сначала "стираем" все модули в биосе. Для этого выделяем область от начала...
Рис.42.
...до конца (ищем "стандартно" по FFFFFFFF)...
Рис.43.
и забиваем ее эфэфками (ALT-F2 для hiew).
Рис.44.
Полученная "заготовка" (без модулей) - готова!
Рис.45.
cbrom в отсутствие модулей немного "растерялся". :) Но нас это не пугает - так и задумано! :)
Рис.46.
Повторяем процедуру получения запакованного архива изменённого файла "original.bin" для вставки, или берем предусмотрительно ранее заготовленный "1.lzh" (см. Рис.22.).
Рис.47.
Выделяем всё (CTRL-* в hiew) и записываем в самое начало сделанной "заготовки".
Рис.48.
Теперь полученный биос благополучно открывается модбином...
Рис.49.
...Исправляем нужное в нём...
Рис.50.
...И сохраняем.
Файл:F8edit cbrom good.gif
Рис.51.
Проверяем - cbrom больше не "ругается"...
Рис.52.
Далее из сохранённого файла нужно извлечь отредактированный и уже "пересчитанный" модуль "original.bin". Для этого выделяем его от начала...
Рис.53.
...до конца.
Рис.54.
Захватываем, кроме нулевого байта, и байт CRC (54h в нашем случае).
Рис.55.
И сохраняем в новый файл.
Рис.56.
Теперь к нашему уже полностью "готовому" (с корректным заголовком и правльной CRC на конце) запакованному модулю "original.bin" дописываем аналогично сделанному на этапе Рис.30. содержимое "хвоста", только БЕЗ байта CRC в начале (ведь у нас уже он есть - правильно пересчитанный). "Хвост" делаем аналогично процедуре на Рис.23-29.
Рис.57.
И (аналогично шагу на Рис.32) записываем полученный "слепок" в предварительно "вычещенный" от модулей (аналогично шагам на Рис.41-44) наш будущий биос. Модули начинались, как помним (Рис.15.), с адреса 90000 - туда и вставляем полученный слепок.
Рис.58.
"Модбинная" стадия завершена.

"Общая" CRC биоса

В отличие от модбина, cbrom обладает достаточной стабильностью и проблем с пересчетом CRC ("его" контрольной суммы - в конце всех модулей; напомню, CRC-байт "original.bin" он не "трогает"). Для работы лучше всего пользоваться самым последним – на момент написания это CBROM.EXE V1.55 10/12/05 Release. Для пересчета CRC достаточно проделать любую операцию с биосом (просмотр по опции /D - не в счёт). Например, просто добавить и после удалить какой-то "ненужный" файлик.

cbrom myfile.bin /other 1234:5678 nanana.ttt
cbrom myfile.bin /other 1234:5678 release
Замечание - можно посоветовать только не выбирать слишком большие "просто файлики" - 1-5кБ, иначе они могут не "влезть", и обновления CRC не произойдёт.

Всё, BIOS - готов!

Примечание - биос по-прежнему не будет открываться модбином, однако это уже не "наша вина" - будем ждать, пока не выпустят новую версию, с которой не придется для каждого редактирования опций повторять процедуру, описанную в шагах Рис.40-58. И пусть не смущает кажущаяся "длительность" и "мудрёность" процедуры, при достаточном освоении "азов" сие есть действитьльно - элементарно. (..., Ватсон! :) )

Персональные инструменты
Google