Stránka 1 z 1

DELL OptiPlex 755 - oprava poskodeneho BIOSu

Napsal: 01 črc 2016, 13:10
od rnbw
Podarilo sa mi umrtvit BIOS dosky DELL OptiPlex 755 - restartovalo sa to pri flashovani (vadny zdroj). Nema to ziadny recovery mod. A co je horsie, ma to Intel ME (AMT).

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.

Napsal: 01 črc 2016, 14:07
od PixelOrgy
Dobra prace :-)
Kazdopadne, pokud to bootlo, tak by mel jit uz bios flashnout normalni cestou ne?

Napsal: 01 črc 2016, 14:48
od rnbw
Tie bloky so seriovymi cislami sa pravdepodobne pri beznom flashovani nemenia.

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.

Napsal: 01 črc 2016, 15:20
od rnbw
Tak ten druhy skombinovany BIOS nefunguje.
Dalsi pokus: v prvom skombinovanom BIOSe prepisat seriove cisla.

Napsal: 01 črc 2016, 15:29
od PixelOrgy
Jak to vlastne prehravas? I2C & primo na desce? Nevim co tam je za flesku, ale tipl bych ze bude mit nejaky xBGA pouzdro...

Napsal: 01 črc 2016, 15:39
od rnbw
Je tam SOIC-8, takze spajkovacka, vybrat von, prispajkovat na "programator" (LPT konektor s kusom kabla), preflashovat, prispajkovat naspat. Preto sa mi do toho dlho nechcelo a teraz nechcem robit zbytocne vela pokusov :)

Napsal: 01 črc 2016, 15:42
od PixelOrgy
Ahaaa, tak SOIC je krasa, ja uz se bal, ze to je BGAcko, a ze to lovis nekde po desce s jehlou :-)

Napsal: 01 črc 2016, 16:24
od rnbw
Je tam okolo aj trochu miesta, takze sa da spajkovat bez vyberania dosky z PC.

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.

Napsal: 01 črc 2016, 16:26
od PixelOrgy
Zajimavy. Predpokladam ta deska jeste nema TPM...

Napsal: 01 črc 2016, 16:33
od rnbw
Praveze ma (ale nepouzivame ho, je v BIOSe vypnuty). Predpokladam, ze kvoli nemu nefunguje ME, ked prehodim celu flash (alebo jej image) z druhej dosky.

Napsal: 04 črc 2016, 14:35
od rnbw
Tak hlasim uspech.

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=1

2. 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=1

3. Spojit to dokopy

Kód: Vybrat vše

cat test-badflash-biosreplaced.part1.bin goodbios-a22-noconfig.bin >test-badflash-biosreplaced.bin

4. 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.