Господа здравствуйте! Есть определенная задумка по модификации биоса, если кто поможет разобраться буду искренне благодарен.
И так. Имеется материнка 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.
На этом этапе появился первый вопрос. Всевозможные описания структур 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.
Вот этот несчастный байт по смещению 0x39 и есть все отличие AHCI биосов для ICH8 и ICH10R. т.е. я полагаю, что модуль AHCI универсальный и вполне возможно, что новые версии этого модуля можно затолкать в биос материнки, поддержку которой производитель прекратил.
В общем хочу разобраться со смыслом байта по смещению 0x39.
3) Новая версия модуля AHCI "1.20_E.0027 03232010" по содержанию тотально отличается от "1.20E".
Дабы анализировать ее структуру потребуется теребить дизассемблером, чего делать пока не хочется. Но беглый осмотр показывает, что если модули совместимы со старым эелезом, то понадобится только поменять Device_id. Но это потом, для начала нужно разобраться с первыми двумя вопросами.
Прошу изложить свои соображения, если у кого есть, на этот счет.
P.S.
модуль AHCI 1.20E из биоса -GA-965PS3.F14
модуль AHCI 1.20E из биоса - GA-P43T-ES3G.F7
модуль AHCI 1.20_E.0027 03232010 из биоса ноутбука асер
На буржуйском форуме нашел схожие темы. На одной товарищ взял биос от Gigabyte EX58, cmrom'ом удалил старые модули AHCI/RAID, и впихнул новые из другого биоса. Все без лишних телодвижений с Device_ID и прочим. И вроде как по его описанию у него все получилось.
На другом форуме народ ломает копья с похожей задачей. Но у них просто замена модуля в лоб приводит к "поломке" биоса. По их технологии биос нужно разобрать модуль за модулем, до того модуля который нужно заменить и потом в обратной последовательности собрать. Т.е. таким образом, чтобы после модификации порядок следования модулей в биосе не изменился. При такой последовательности действий cbrom правильно корректирует точки входа в модули. И при всем при этом, после замены модулей, то не работает клава, то ребутится постоянно комп, то виснет при инициализации железа. В общем все не слава богу.
Про замену модулей полным разбором/сборкой - надо было делать для старых версий cbrom32 на 1.96/1.98 для Award вроде уже не надо.
В Gigabyte неудобно одно BIOS на матплате припаян намертво, не побалуешься безнаказанно, как на Asus/Biostar/Epox.
Дрессируем коров
для сборки/разборки можно использовать 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
В вашем случае часть модулей будет поновее, часть может вообще отсутствовать.
Дрессируем коров
А по DeviceID - можете всунуть хоть два модуля с разным DeviceID сразу, BIOS сам разберётся какой ему подойдёт.
Дрессируем коров
Отправить комментарий