Редактируем Award Modular BIOS v6.00PG
Материал из ROM.by
Обновленная версия статьи Редактируем Award BIOS
Содержание |
Утилиты для редактирования Award BIOS 6.0
CBROM v.1.55 - программа для просмотра/распаковки различных модулей биос. Это стандартная утилита от самого Award-а.
|
MODBIN6 2.01.02 - программа, позволяющая редактировать некоторые регистры чипсета, а так же изменять надписи/опции в BIOS Setup. Это стандартная утилита от самого Award-а.
|
| LHA ver.2.55 - старый(1988-1991)-добрый архиватор от Haruyasu Yoshizaki, алгоритм которого и лёг в основу упаковки модулей Award BIOS. |
| HEX-редактор (любой). Можно порекомендовать заслуженно популярный hiew. |
Структура Award BIOS v6.00PG
Рассмотрим на примере достаточно популярной (и достаточно "свежей" на время написания статьи) платы Gigabyte GA-965P-S3. Как видно из Рис.1., имеет следующий состав модулей (без учета "основного"):
- awardext.rom
- ACPITBL.BIN
- AwardBmp.bmp
- ggroup.bin
- awardeyt.rom
- _EN_CODE.BIN
- JMB59.BIN
- ICH8AHCI.BIN
- 8056b0.lom
- PPMINIT.ROM
- SBF.BIN
- AFSC_HDR.ROM
- ME_MRC.BIN
| "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" в нашем случае) он крайне прост:
- распаковываем нужный файл ("вручную" или с помощью cbrom)
- редактируем
- добавляем (обновляем) в биос с помощью cbrom
Распаковать можно двумя способами. Можно сделать это с помощью cbrom, например для распаковки awardext.rom нужно ввести:
cbrom mybios.bin /awardext extract
(Подробности работы с cbrom - в отдельной статье)
Второй вариант - "ручками". Ищем в hex-редакторе по символьной строке '-lh' начало и конец нужного модуля, сохраняем найденную область в файл с расширением '*.lzh' и после распаковываем любым архиватором. Например, для распаковки "ICH8AHCI.BIN" последовательно перебираем найденные строчки '-lh', пока не доберемся до нужной:
Редактирование "original.bin"
Извлечение "original.bin"
Но главным вариантом в редактировании биосов является, конечно же, изменение "original.bin". Способов для извлечения "original.bin" известно превеликое множество:
- запустив модбин и переключившись в другое окно скопировать себе временный одноименный файл, который он (модбин) создает в процессе работы с биосом.
- тьма всевозможных утилит, работающих с Award BIOS - имеет возможность распаковки любого модуля
- наконец, просто архиватором (или даже TotalCommaner-ом), который "видит" как lzh-архив с одним файлом внутри - "original.bin"
Однако, у всех (и других подобных) есть существенный недостаток - зависимость от вышеописанных утилит и различных модификаций Award BIOS (оставаясь при этом v.6.00PG). Например, (не специально, но получилось удачно :) ) выбранный файл:
- не открывается модбином
- "несъедобен" для многих утилит
- не определяется архиватором, как LZH-архив.
Вот тут и пригодится опыт, полученный в предыдущем разделе. :)
Замена "original.bin" отредактированным вариантом
Вариантов добавления новой (отредактированной) версии "original.bin" в биос также есть несколько и эти варианты во многом аналогичны его распаковке с их недостатками. Потому не будем отвлекаться на "мишуру" и постараемся сделать максимально "правильно".
Пересчет CRC
Итак, теперь нам еще предстоит пересчитать контрольные суммы:
- Контрольную сумму модуля "original.bin", которая располагается сразу после него, перед всеми остальными запакованными модулями.
- "Общую" контрольную сумму всех модулей, которая располагается в самом конце используемого ими (модулями) пространства биоса, сразу перед началом бутблока.
Правило следующее:
- CRC модуля "original.bin" пересчитывает modbin
- "Общую" CRC пересчитывает cbrom
Один "не трогает" контрольные суммы "другого", поэтому для пересчёта обеих контрольных сумм обязательны два этапа.
CRC "original.bin"
Контольная сумма в конце "original.bin" является "стандартной" - она считается как побайтовая сумма всего модуля (начиная с самого начала - адреса 90000 в нашем случае) до "нулевого" байта на конце. После чего "инвертированное" значение и является конечным значением - так, чтобы после при подсчете CRC по всему "диапазону" от начала до байта CRC (включая его) получался 0. Данную процедуру можно сделать многими утилитами, но есть важное НО:
- Замечание. Кстати, то, что модбин корректно "узнал" в подобном модуле "original.bin" - заслуга последних версий cbrom32, более старые версии (cbrom) - страшно бы матерились или даже зависли...
Кроме CRC, мы должны исправить заголовок упакованного модуля "original.bin" - он "похож", но, всё-таки, принципиально отличается от сделанного LHA, потому, не исправив его, мы получим нестартующую систему. И именно этим занимается modbin.
Статья пишется "по ходу", потому для меня это тоже "сюрприз". К сожалению, но факт - стабильностью/"совместимостью"/"всеядностью" - не блещут никакие версии модбина. Будем надеяться, что в будущем эта печальная реальность изменится, но пока нужно стать "пионерами" и быть готовым всегда и ко всему. :)
Выйти из данной ситуации поможет вышеупомянутое правило - модбин "работает" лишь с одним (единственным) модулем - "original.bin", остальные ему абсолютно не нужны. Этим и воспользуемся, придётся "обработать" модуль "original.bin" - "отдельно".
|
Изображение:F8edit cbrom good.gif Рис.51. Проверяем - cbrom больше не "ругается"... | |||
|
Рис.56. Теперь к нашему уже полностью "готовому" (с корректным заголовком и правльной CRC на конце) запакованному модулю "original.bin" дописываем аналогично сделанному на этапе Рис.30. содержимое "хвоста", только БЕЗ байта CRC в начале (ведь у нас уже он есть - правильно пересчитанный). "Хвост" делаем аналогично процедуре на Рис.23-29. |
"Общая" 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. И пусть не смущает кажущаяся "длительность" и "мудрёность" процедуры, при достаточном освоении "азов" сие есть действитьльно - элементарно. (..., Ватсон! :) )
