DELL OptiPlex 755 - oprava poskodeneho BIOSu
Moderátor: Moderátoři
DELL OptiPlex 755 - oprava poskodeneho BIOSu
Zistenia:
1. Flash je 4MB SPI, pouzivaju sa najmenej dva typy - Macronix a Winbond. Maju nezamenitelny obsah, pretoze kvoli ME je vnutri zapisane ID, zoznam zakazanych prikazov a pod. Flash obsahuje deskriptor, cast pre ME, cast pre sietovku a cast pre BIOS.
2. Neda sa pouzit cely image z ineho kusu, lebo potom nefunguje ME. Na doske nie je ziadna ina flash ani EEPROM, takze to bude asi suvisiet s TPM (ze by ME naviazane na jeho seriove cislo?)
Podla datasheetu ICH9 som precital deskriptor na zaciatku flash a zistil, ze BIOS ma 1 MB a je na adrese 0x300000 (posledny 1 MB). Dump poskodeneho obsahu ukazal, ze sa to prerusilo este pocas flashovania BIOSu (na zaciatku vidiet cislo novej verzie, na konci starej - zjavne sa to najprv cele nezmaze, ako byva zvykom inde), ME ostalo nedotknute.
Skusil som teda v poskodenom dumpe prehodit BIOS za dobry - normalne to nabootovalo a fungovalo aj ME. Akurat v BIOSe su este na zaciatku a na konci bloky so seriovym cislom, takze to skusim prehodit este raz, tentokrat okrem nich.
Ked porovnavam dva BIOSy rovnakej verzie z roznych dosiek, tak v prvych 64 KB su rozne rozdiely. Potom je vsetko zhodne a na konci je este raz seriove cislo, ale aj verzia BIOSu.
Takze prvych 64 KB a poslednych 288 B BIOSu necham a vsetko medzi tym vymenim. Potom skusim BIOS downgradovat na A04 (ten tam bol povodne) a upgradovat na posledny A22. Tym by sa mal upgradovat aj ME, ktory ostal stary.
Skusil som teda prepisat tie seriove cisla a po nabootovani to ukazuje tie povodne nezmenene. Musi to byt ulozene este niekde inde. V tych prvych 64KB BIOSu je zjavne DMI, su tam veci, co mi zobrazi dmidecode. Tam sa aj seriove cislo prepisalo na to povodne. Na konci zostalo nove.
Chyba bola v tom, ze som nechal ten "koniec" BIOSu z povodneho A04. Na adrese 0x3FFFF0 je totiz reset vector a ten je medzi verziami odlisny, takze procesor skocil hned po zapnuti niekam do prdele...
Takze spravny postup opravy image (v mojom pripade bol povodny BIOS A04 a bolo to prerusene pri flashovani na A22) je:
1. Zobrat z poskodeneho image prvych 3 MB + 64 KB = 3 211 264 B
Kód: Vybrat vše
dd if=o755-badflash-macronix-a04-partial-a22.bin of=test-badflash-biosreplaced.part1.bin bs=3211264 count=12. Zobrat dobry BIOS (bez prvych 64 KB) z ineho image:
Kód: Vybrat vše
dd if=o755-good-macronix-a22.bin of=goodbios-a22-noconfig.bin bs=3211264 skip=13. Spojit to dokopy
Kód: Vybrat vše
cat test-badflash-biosreplaced.part1.bin goodbios-a22-noconfig.bin >test-badflash-biosreplaced.bin4. Hex editorom upravit seriove cislo na adrese 0x3FFF00 tak, aby sedelo podla poskodeneho image. Cislo konci nulovym bajtom, potom su 3 medzery, zase nulovy bajt a za tym 1 bajt - asi nejaky checksum, treba skopirovat aj ten.
5. Vysledkom je funkcny image test-badflash-biosreplaced.bin, ten naflashovat do SPI flash. Progam flashrom to nezvladol, lebo flash ma prvy sektor zamknuty, SPIPGM to zvladol.
6. Downgradovat BIOS na A04 a nasledne upgradovat na A22.
Vysledkom je plne funkcna doska - funguje aj ME, dmidecode zobrazuje spravne seriove cislo.