Автор: Pun , 14 февраля 2011
Господа здравствуйте! Есть определенная задумка по модификации биоса, если кто поможет разобраться буду искренне благодарен.

И так. Имеется материнка GigaByte GA-965P-S3 (ICH8, южный мост 82801HB). Производитель сей продукции разродился последним биосом аж в далеком, знойном 5-м мая 2009-го года, с тех пор много килобайт утекло, зачесались руки обновить не весь, так хоть некоторые модули биоса. А конкретно PCI rom, тот, что отвечает за AHCI режим работы контроллера SATA.

Последняя, на момент написания сего манускрипта, версия модуля (вшитого в гигабайтовский биос) представляет себя как "Serial ATA AHCI BIOS, Version iSrc 1.20E", т.е. версия 1.20Е. Блуждая по просторам глобальной паутины наткнулся на биосы от другого железа на интеловских чипсетах, в которых есть модули PCI ROM для AHCI, удалось извлечь из биоса асеровского ноутбука версию "1.20_E.0027 03232010", как утверждает народ, сия версия модуля крайняя. В общем дел казалось бы, cbrom'ом вытащить старый модуль, затолкать новый, прошить да радоваться. Но действовать в лоб стремно, ибо железка в одном экземпляре и опыта восстановления криво прошитого биоса нет, и приобретать этот опыт в боевых условиях крайне не хочется.

В общем собрал по этой теме следующую информацию.

1) Нашел описание структуры PCI rom. В соотвествии с описанием разрисовал выдернутый из моего биоса модуль AHCI.

http://spuncher.front.ru/img/BIOS/AHCI_ICH8.png

На этом этапе появился первый вопрос. Всевозможные описания структур PCI rom глясят, что в полях VENDOR_ID и DEVICE_ID должно быть ни что иное как идентификаторы оборудования для которого этот модуль биоса предназначается. К своему удивлению в биосе я обнаружил идентификатор ven_8086 dev_2821, он соответствует контроллеру "ICH8R/DH/DO", но не "ICH8". На моей материнке активирован режим AHCI и в системе светится контроллер с ven_8086 dev_2824 и на нем благополучно стоят модифицированные интеловские дрова. В общем толи совпадение полей Ven/Dev в модуле AHCI не обязательно, толи сам биос подменяет как то идентификаторы в процессе загрузки. Если кто владеет информацией на этот счет прошу прокомментировать факт не совпадения ven/dev контроллера и биоса для этого контроллера. Причем все благополучно в таком виде работает, и это в официальном биосе от производителя.

2) В процессе обдумывания того как затолкать в свой биос новый модуль смекнул, что прогресс не стоит на месте, и вполне возможно, что новые версии модуля AHCI могут и не ужиться с моим сравнительно старым железом. В общем стянул биос с другой машины с материнкой GigaByte GA-P43T-ES3G (ICH10R, южный мост 82801JB). Выковырял из него модуль AHCI, и обнаружил, что версия модуля точ вточ как в моей GA-965P-S3. Побайтово сравнил и обрадовался, разница всего в 3-х байтах, два из которых идентификатор оборудования (3A22 - что соответствует ICH10R) и третий байт по смещению 0x39. Значение по смещению 0x39 в header pci rom не входит, я не могу интерпретировать его смысл. В родном биосе от GA-965P-S3 по смещению 0x39 записано 0x7F, в биосе от GA-P43T-ES3G записано 0x6C.

http://spuncher.front.ru/img/BIOS/AHCI_ICH10R.png

Вот этот несчастный байт по смещению 0x39 и есть все отличие AHCI биосов для ICH8 и ICH10R. т.е. я полагаю, что модуль AHCI универсальный и вполне возможно, что новые версии этого модуля можно затолкать в биос материнки, поддержку которой производитель прекратил.

В общем хочу разобраться со смыслом байта по смещению 0x39.

3) Новая версия модуля AHCI "1.20_E.0027 03232010" по содержанию тотально отличается от "1.20E".

http://spuncher.front.ru/img/BIOS/AHCI_ICH9.png

Дабы анализировать ее структуру потребуется теребить дизассемблером, чего делать пока не хочется. Но беглый осмотр показывает, что если модули совместимы со старым эелезом, то понадобится только поменять Device_id. Но это потом, для начала нужно разобраться с первыми двумя вопросами.

Прошу изложить свои соображения, если у кого есть, на этот счет.

P.S.
модуль AHCI 1.20E из биоса -GA-965PS3.F14
модуль AHCI 1.20E из биоса - GA-P43T-ES3G.F7
модуль AHCI 1.20_E.0027 03232010 из биоса ноутбука асер
Содержимое данного поля является приватным и не предназначено для показа.

BBCode

  • HTML-теги не обрабатываются и показываются как обычный текст
  • You may use the following BBCode tags:
    • [align]
    • [b]
    • [code]
    • [color]
    • [font]
    • [hr]
    • [i]
    • [img]
    • [list]
    • [quote]
    • [s]
    • [size]
    • [spoiler]
    • [sub]
    • [sup]
    • [table]
    • [u]
    • [url]
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.

Pun

15 лет назад

На буржуйском форуме нашел схожие темы. На одной товарищ взял биос от Gigabyte EX58, cmrom'ом удалил старые модули AHCI/RAID, и впихнул новые из другого биоса. Все без лишних телодвижений с Device_ID и прочим. И вроде как по его описанию у него все получилось.

На другом форуме народ ломает копья с похожей задачей. Но у них просто замена модуля в лоб приводит к "поломке" биоса. По их технологии биос нужно разобрать модуль за модулем, до того модуля который нужно заменить и потом в обратной последовательности собрать. Т.е. таким образом, чтобы после модификации порядок следования модулей в биосе не изменился. При такой последовательности действий cbrom правильно корректирует точки входа в модули. И при всем при этом, после замены модулей, то не работает клава, то ребутится постоянно комп, то виснет при инициализации железа. В общем все не слава богу.

Compiller

14 лет 10 месяцев назад

Про замену модулей полным разбором/сборкой - надо было делать для старых версий cbrom32 на 1.96/1.98 для Award вроде уже не надо.
В Gigabyte неудобно одно BIOS на матплате припаян намертво, не побалуешься безнаказанно, как на Asus/Biostar/Epox.

Compiller

14 лет 10 месяцев назад

для сборки/разборки можно использовать bat файл приблизительно такой
в моём случае cbrom 32 от Asus с версией 1.15
разборка
CBROM32_115.EXE ORIGINAL.ROM /ACPITBL EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /XGROUP EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /YGROUP EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /BIOSF0 EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /BIOSF6 EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /BIOSF7 EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /BIOSF9 EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /GV3 EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /SLPKEY EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /SLPMARKER EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /OEM0 EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /OEM1 EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /PCI EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /PCI EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /PCI EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /PCI EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /VGA EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /EPA EXTRACT
CBROM32_115.EXE ORIGINAL.ROM /LOGO EXTRACT
и сборка
CBROM32_115.EXE ORIGINAL.ROM /XGROUP AWARDEXT.ROM
CBROM32_115.EXE ORIGINAL.ROM /YGROUP AWARDEYT.ROM
CBROM32_115.EXE ORIGINAL.ROM /ACPITBL ACPITBL.BIN
CBROM32_115.EXE ORIGINAL.ROM /BIOSF0 _DMI.BIN
CBROM32_115.EXE ORIGINAL.ROM /OTHER 4063 EZFLASH.EXE
CBROM32_115.EXE ORIGINAL.ROM /BIOSF7 _XSETUP.BIN
CBROM32_115.EXE ORIGINAL.ROM /BIOSF9 _RT.BIN
CBROM32_115.EXE ORIGINAL.ROM /GV3 AGESACPU.ROM
CBROM32_115.EXE ORIGINAL.ROM /OTHER 4078 SLPKEY.BIN
CBROM32_115.EXE ORIGINAL.ROM /OTHER 4079 SLPMARK.BIN
CBROM32_115.EXE ORIGINAL.ROM /OEM0 BGROUP.BIN
CBROM32_115.EXE ORIGINAL.ROM /OEM1 PMU.BIN
CBROM32_115.EXE ORIGINAL.ROM /PCI NVRAID.ROM
CBROM32_115.EXE ORIGINAL.ROM /VGA VGA_MOD.ROM
CBROM32_115.EXE ORIGINAL.ROM /EPA EPA.BMP
В вашем случае часть модулей будет поновее, часть может вообще отсутствовать.

Compiller

14 лет 10 месяцев назад

А по DeviceID - можете всунуть хоть два модуля с разным DeviceID сразу, BIOS сам разберётся какой ему подойдёт.