BIOS visszafejtés

Adva van egy Asus X51R laptop amibe szeretnék egy Intel ABG wifikártyát beleszegelni a jelenlegi Atherosos helyére.
A gépen AMI BIOS 8-as verzió van.
A BIOS flashet foglalatba raktam, willem meg asztali PC van kéznél szóval nem kamikazejáték.

Röviden eddig a következőkre jutottam:

Van egy MMTool nevű csoda amivel lehet az AMI Biosokat buherálni. Szét lehet csapni modulokra, kiszedni képet zenét, stb, majd összecsomagolni vele. Wine alatt fut.

Van egy parancssoros Linuxos megfelelője:
http://cgit.freedesktop.org/~libv/bios_extract

Fórumokat bóklászva az jött le, hogy van a BIOSnak egy SLAB nevű része (Single Link Architecture BIOS), amiben benne szokott lenni a PCI PID little endianban. Végigküldtem az összes lehetséges KOMBINÁCIÓT a PID/VID/Subsystem id-kre illetve azok feleire de nem hozott eredményt. Most arra gondoltam, hogy disassemblálni kellene, és végigbóklászni a feltételes jumpokat. Próbálkoztam a flat assemblerrel, de az a biosból kirántott SLAB részt nem szerette.

A bios_extract programcsomagban van egy ami_slab program a mi a SLAB fájlt további cafatokra szedi szét:


ACPITBL_SEG.bin  DIM_DSEG.bin     I13P_CSEG.bin  INT10_CSEG.bin  POST_CSEG.bin  SETSVR_CSEG.bin  SMI_AP1ENTRYSEG.bin  SMI_BSPENTRYSEG.bin
ADSM_CSEG.bin    EXTF32_CSEG.bin  I13R_CSEG.bin  PMM_CSEG.bin    POST_DSEG.bin  slabextract.txt  SMI_BSPCSEG.bin      SMI_EXTFDSEG.bin
DIM_CSEG.bin     FDR_CSEG.bin     I19R_CSEG.bin  PMM_DSEG.bin    RUN_CSEG.bin   SMBIOS_CSEG.bin  SMI_BSPDSEG.bin      SMI_STRUCSEG.bin

Mint látható külön szedi a CSEG és a DSEG részeket. Ha ezekből a cseg részekre eresztem a fasm-et akkor sem akarja az igazat.

Bármi ötlet, disassembler tipp jól jönne.

Hozzászólások

nem értem a problémádat. nem minipci-os a slot, amiben a wifi kártya van?
kicseréled, bootolsz egy linuxot, és ott fog figyelni a pci device-ok között a kártya, a driver betöltődik, és sunshine meg happiness. mi köze van mindehhez a biosnak?

ja, és a lényeg: mi az, amiben az intel kártya jobb, mint egy atheros?

Több gyártó van, akik nem engedi az "ész nélküli" variálását a notiknak, merthogy X és Y konfigokat szénné teszteltek, azzal jó és pont, azok mennek benne (PCI ID és tsai alapján). Elsőre én mondjuk az általad írt egyszerű cserét nézném meg, mielőtt poháralátétté konvertálok egy notit.

Az intel vs. atheros kérdés engem is érdekel. :)

A cserét természetesen kipróbáltam, nem lát sem az lspci sem a windows semmit.
POSTnál nem mond semmit, a kártyról hogy nem táogatott lenne, igaz az atherosost sem jelzi.

vl: Nem sima minicpis hanem minipci expresses, vagy hogy nevezik.

Azért intel mert ebből van egy pár itthon ami tud 802.11a-t, amire szükségem lenne.

Írtam vala, hogy poháralátét nem lesz belőle, mert van BIOS íróm.

A cserét természetesen kipróbáltam, nem lát sem az lspci sem a windows semmit.
POSTnál nem mond semmit, a kártyról hogy nem táogatott lenne, igaz az atherosost sem jelzi.

Nem kéne mondania semmit, szimplán mennie kéne.

És a támogatott kártya hogyan látszik lspci-ból?

vl: Nem sima minicpis hanem minipci expresses, vagy hogy nevezik.

Ez kb. mindegy. Az a lényeg, hogy szabványos a csatlakozó, és a gép buszrendszerére csatlakozik.
Lehet, hogy a pci-pci bridge konfigurálásának kéne utána nézni (meg a linux mit művel vele). A jó kártyával kéne látszani az lspci-ban annak is, hogy hogy hívják a bridge chipeket.

Azért intel mert ebből van egy pár itthon ami tud 802.11a-t, amire szükségem lenne.

Abban mi a jó, ha nem az USA-ban vagy? Emlékeim szerint baromira nem szabványos frekit használ Európában...

Bocs benéztem. a jó kártya természetesen látszik:


lspci -n -v
...

02:00.0 0200: 168c:001c (rev 01)
	Subsystem: 168c:3065
	Flags: bus master, fast devsel, latency 0, IRQ 16
	Memory at f89f0000 (64-bit, non-prefetchable) [=64K]
	Capabilities: <access denied>
	Kernel driver in use: ath5k
	Kernel modules: ath5k

lspci -vv:
00:01.0 PCI bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1
Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2
Bus: primary=00, secondary=03, subordinate=04, sec-latency=0
00:1c.2 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 3
Bus: primary=00, secondary=05, subordinate=06, sec-latency=0
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge
Bus: primary=00, secondary=07, subordinate=0b, sec-latency=56
07:06.0 CardBus bridge: Texas Instruments PCIxx12 Cardbus Controller
Bus: primary=07, secondary=08, subordinate=0b, sec-latency=176
08:00.0 Network controller: Broadcom Corporation BCM4306 802.11b/g

Ebből kiderül, hogy melyik pci busz-nak melyik pci bridge chip biztosítja az elérhetőségét.
Így kinyomozható, hogy melyik bridge-en kéne engedélyezni azt a slotot.

Biztos, hogy -vv?
Nálam erre így néz ki:


lspci -vv
02:00.0 Ethernet controller: Atheros Communications Inc. AR5001 Wireless Network Adapter (rev 01)
	Subsystem: Atheros Communications Inc. Device 3065
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Interrupt: pin A routed to IRQ 16
	Region 0: Memory at f89f0000 (64-bit, non-prefetchable) [=64K]
	Capabilities: <access denied>
	Kernel driver in use: ath5k
	Kernel modules: ath5k

...

Ma belepróbáltam egy Broadcom bg kártyát, illetve egy Qualcomm 3G modemet. A wifi kártyát látta, a modemet nem.

A -vv mindent device-t kiír, csak kiba részletesen.

Én csak a bridge device-okat, és nekik is csak a bus mezőjüket írtam be (meg az egyik cardbus slotba rakott kártyát), ehhez képest jóval több sor van.

Bus mezőt csak a bridge funkciót ellátó eszközöknél fogsz látni.

Hogy a kívánt slothoz (amiben most ott találtad az lspci szerint a jól működő kártyát) tartozó PCI busz melyik PCI-PCI bridge chipen keresztül érhető el a CPU-tól. Azaz melyik chipet kéne máshogy programozni, hogy elérd a nem látszó kártyádat.
Azt a chipet keresed, ahol az lspci -vv szerint a Bus: sorban a secondary=02 érték van.

Megtaláltam:


00:04.0 PCI bridge: ATI Technologies Inc RS480 PCI Bridge
	Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+
	Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 0, Cache Line Size: 64 bytes
	Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
	Memory behind bridge: f8900000-f89fffff
	Secondary status: 66MHz- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort+ <SERR- <PERR-
	BridgeCtl: Parity+ SERR+ NoISA- VGA- MAbort- >Reset- FastB2B-
		PriDiscTmr- SecDiscTmr- DiscTmrStat- DiscTmrSERREn-
	Capabilities: <access denied>
	Kernel driver in use: pcieport
	Kernel modules: shpchp

Van valami kész program erre a célra?
Vagy kernelt kell hegesztenem?

Én egyszer azért akartam kicserélni a Broadcom kártyámat Intelesre, mert utóbbi sokkal jobb volt Linux alatt (előbbi pedig éppen broken adott disztrib alatt).

A gép egy HP által gyártott noti, aminek BIOS-a kijelentette, hogy vegyem azonnal ki a kártyát, ő ugyan nem indul...

Nem akartam a BIOS tartalmával matatni, mert inkább használtam tovább a gépet ahelyett, hogy esetleg kiforrasztom azt egy hiba után, de *kívánt szövegrész beillesztendő* módon egy (vagy kettő?) /már nem emlékszem/ wifi kártyát támogat, az Intelest pedig nem.

Persze a BIOS-t átverve látta rendesen a rendszerem, működött is gond nélkül a kártya.

Frissítettem egy keveset olyan állapotra, ahol már helyrehozták a hibát és a Broadcom is használható állapotba került, így hagytam az egészet hardware ügyileg.
A HP-nél viszont csuklottak, nem szeretem az ilyen dolgokat.

lehet rosszul tudom, de szerintem azert nem talaltad a PCI PID-et, mert manapsag a bios nagyresze tomoritve van, bekapcsolaskor csomagolja ki magat.

Ez a disassembler tool, amit emlegetett jó eséllyel már megcsinálta a kitömörítést. Nagyon régen és is játszottam ilyennel, de mondjuk én csak a bootolás közben a sarokban megjelenő kis képet cseréltem ki.

Az viszont igaz, hogy a BIOS képes úgy letiltani PCI eszközöket, hogy az lspci nem fogja látni utána.
---
Internet Memetikai Tanszék

bár nem valószínű:

mmtool emlékeim szerint kiírja, hogy melyik ven:dev id-hez melyik rész tartozik a rom-ban. Érdemes lehet megnézni, hogy van e a wifi kártyának is rom-ja a bios-hoz linkelve. Régebben sikeresen cseréltem integrált vga és lan (boot-rom) rész bios-okban. Wifi esetén nem hiszem, hogy lenne külön firmware (a bios-ban), mert elvileg ezek csereszabatosak kellenének, hogy legyenek. De attól érdemes ellenőrizni.

Az a mini pcie port biztos teljes mini pcie és nem csak egy usb-t támogató buta verzió? (én notimban pl. a kettőből egy csak usb-t tud)

"A PCI-express szabvány ad lehetőséget a hw-s kapcsolóra, de az csak a rádiót kapcsolja le, nem az egész kártyát."
Ez így nem teljesen igaz.
A PCI és PCI származékok mind lekapcsolhatók.
A bedugott PCI express video lekapcsolhatja a szintén PCI express integrált chipet.
Nem látja sem a lspci sem a vindows.
Korábban sok alaplapnak volt olyan hibája ,hogy a bios-ban letiltott pci alaaplapi hangot a linux simán látta és kezelte.
Én a helyedben beletennék egy egy mini PCI express tunerkártyát vagy más nem wifi eszközt ,hogy működik -e ?
Mert ha nem akkor még a hardware-rel is meg kell vivnod.

Ha reveng, akkor IDA.

---
pontscho / fresh!mindworkz