UEFI BIOS Update with a Raspberry Pi deutsch: Unterschied zwischen den Versionen
Jal2 (Diskussion | Beiträge) |
|||
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 67: | Zeile 67: | ||
== Den Raspberry Pi ans SPI Flash anschliessen == | == Den Raspberry Pi ans SPI Flash anschliessen == | ||
Das Datenblatt des SPI Flash hilft bei der Bestimmung der Pins. Beim S430 ist es ein Winbond W25Q32BV. Man muss die Signale CS# | Das Datenblatt des SPI Flash hilft bei der Bestimmung der Pins. Beim S430 ist es ein Winbond W25Q32BV. Man muss die Signale verbinden: | ||
{| class="wikitable" | |||
|- | |||
! W25Q32BV !! Raspberry Pi | |||
|- | |||
| Pin 1 CS# || Pin 24 CS0# (GPIO 10) | |||
|- | |||
| Pin 2 ''SO'' || Pin 21 ''MISO'' (GPIO 13) | |||
|- | |||
| Pin 4 ''GND'' || Pin 25 ''GND'' | |||
|- | |||
| Pin 5 ''SI'' || Pin 19 ''MOSI'' (GPIO 12) | |||
|- | |||
| Pin 6 ''SCLK'' || Pin 23 ''SCLK'' (GPIO 14) | |||
|- | |||
| Pin 8 ''Vcc'' || Pin 1 ''3,3V'' | |||
|} | |||
Der Raspberry Pi und das Systemboard sind dabei stromlos. | |||
Die Verbindungen noch einmal überprüfen. | Die Verbindungen noch einmal überprüfen. | ||
Zeile 83: | Zeile 99: | ||
== Flash Zugriff == | == Flash Zugriff == | ||
Das BIOS.BIN auf den | Das BIOS.BIN auf den Raspberry Pi kopieren, z.B. mit scp. | ||
Alle folgenden Kommandos werden auf dem | Alle folgenden Kommandos werden auf dem Raspberry Pi ausgeführt (nach Login mit z.B. '''ssh'''). | ||
* Erkennt flashrom den SPI Flash? | * Erkennt flashrom den SPI Flash? | ||
Zeile 91: | Zeile 107: | ||
flashrom sollte hier mindestens einen gefundenen SPI flash melden. Wenn nicht, noch einmal den Sitz des Pomona Clips | flashrom sollte hier mindestens einen gefundenen SPI flash melden. Wenn nicht, noch einmal den Sitz des Pomona Clips | ||
und die Verdrahtung überprüfen. Den | und die Verdrahtung überprüfen. Den Raspberry Pi aus- und wieder einschalten. | ||
Mit neueren Versionen von Raspian ist es notwendig, die SPI Geschwindigkeit explizit (in kHz) anzugeben, z.B. | |||
'''flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=16000''' | |||
Vorsicht: '''spispeed=16M''' setzt die Geschwindikeit auf 16kHz, die Einheit wird stillschweigend ignoriert! | |||
* Backup des alten Inhaltes - kann einige Minuten dauern: | * Backup des alten Inhaltes - kann einige Minuten dauern: | ||
Zeile 103: | Zeile 123: | ||
'''md5sum old_bios*.bin''' | '''md5sum old_bios*.bin''' | ||
* Den neuen Inhalt schreiben (das beinhaltet | * Den neuen Inhalt schreiben (das beinhaltet eine Verifikation): | ||
'''flashrom -p linux_spi:dev=/dev/spidev0.0 -w BIOS.BIN''' | '''flashrom -p linux_spi:dev=/dev/spidev0.0 -w BIOS.BIN''' | ||
[[Category:BIOS]][[Category:UEFI]][[Category:Hardware]] | [[Category:BIOS]][[Category:UEFI]][[Category:Hardware]] |
Aktuelle Version vom 2. Juni 2018, 20:08 Uhr
You find the English version of this page here.
Dieser Artikel beschreibt, wie man ein Thinkpad mit UEFI BIOS nach einem missglückten BIOS Update wiederbeleben kann. Ausprobiert habe ich das mit einem Edge S430, das nach dem Einschalten nur noch den Lüfter kurz einschaltete. Der Bildschirm blieb aber aus.
Beim T420 ist das .FL1 File kein UEFI capsule, so dass wir zur Zeit nicht wissen, wie der BIOS-Anteil extrahiert werden kann und an welchen Offset er im SPI Flash geschrieben werden muss. Damit gilt diese Anleitung erst einmal nur fuer das Edge S430.
Hardware Voraussetzungen
- Raspberry Pi mit einer Linux Distribution, z.B. Raspbian
- Pomona Test Clip, der der Bauform des SPI Flash entspricht - meist ist das SO-IC8. Die billigeren, schwarzen NoName-Adapter sind oft von schlechter Qualität.
- einige Jumper Wire (Verbindungskabel mit Steckverbindern), um die Pins des Testclip mit dem RaspberryPi zu verbinden. Die Länge der Kabel hängt von der Lage des SPI Flash auf dem Mainboard ab. Der Raspberry Pi sollte neben dem Systemboard liegen, ohne dass die Kabel am Clip ziehen.
- ein Linux PC. Wahrscheinlich kann auch ein Windows PC genutzt werden, ich weiss aber nicht, wie.
Software Voraussetzungen
- Flashrom auf dem Raspberry Pi
- UEFITool auf dem Linux PC
- Wine auf dem Linux PC
- das BIOS Update Utility für Windows von Lenovo für das Zielnotebook
Flashrom auf dem Raspberry Pi installieren
Eventuell ist es notwendig, die Pakete libpci-dev und libusb-dev zuerst zu installieren.
- svn checkout svn://flashrom.org/flashrom/tags/0.9.8
- cd 0.9.8
- make
- sudo make install
Das wird flashrom in /usr/local/bin installieren.
Extraktion des BIOS Binärimage aus dem BIOS Update Utility
- Auspacken des Windows BIOS Update Utility auf dem Linux PC, z.B. indem es unter wine ausgeführt wird:
wine gauj19us.exe
Nicht den Haken bei "Jetzt ausführen" setzen - das schlägt sowieso fehl.
- Die ausgepackten Komponenten liegen unter .wine/drive_c/DRIVERS/FLASH/...
Dort gibt es ein File mit der Endung .FL1. Das ist die UEFI Kapsel. Es muss nach .BIN umbenannt werden, z.B. in UEFI.BIN.
- UEFITool aufrufen und das File UEFI.BIN öffnen. Es sollte dort als UEFI capsule erkannt werden.
- Nach einer Komponente mit der UUID F33E... suchen und deren Body in einem anderen File speichern (Ctrl+Shift+E), z.B. in UEFI_F33E.BIN
- Das File UEFI_F33E.BIN in UEFITool öffnen. Das sollte als Intel Flash Image erkannt werden.
- Den BIOS Teil öffnen und seine Grösse notieren, die auf der rechten Seite angezeigt wird.
- Den BIOS Teil in ein anderes File speichern, z.B. in BIOS.BIN ("Extract as it is", Ctrl-E)
- Die Länge von BIOS.BIN prüfen. Ist es länger als die Grösse, die oben notiert wurde, müssen die letzten Bytes abgeschnitten werden, z.B. mit dd.
SPI Flash IC auf dem Systemboard finden
Das Thinkpad muss bis zum Systemboard zerlegt werden, dabei am besten der Anleitung im Hardware Maintenance Manual (HMM) folgen. Das SPI Flash befindet sich oft in SO-IC8 oder SO-IC16 Gehäusen, selten auch in WSON Bauformen (da müssen dann Drähte angelötet werden). Mein S430 hatte zwei SPI-Flashs: ein 8MByte grosses und eines mit 4MByte. Das BIOS befindet sich im 4MByte Flash.
Bei Zweifeln nach dem Schaltplan des Gerätes im Web suchen oder im Forum nachfragen.
Den Raspberry Pi ans SPI Flash anschliessen
Das Datenblatt des SPI Flash hilft bei der Bestimmung der Pins. Beim S430 ist es ein Winbond W25Q32BV. Man muss die Signale verbinden:
W25Q32BV | Raspberry Pi |
---|---|
Pin 1 CS# | Pin 24 CS0# (GPIO 10) |
Pin 2 SO | Pin 21 MISO (GPIO 13) |
Pin 4 GND | Pin 25 GND |
Pin 5 SI | Pin 19 MOSI (GPIO 12) |
Pin 6 SCLK | Pin 23 SCLK (GPIO 14) |
Pin 8 Vcc | Pin 1 3,3V |
Der Raspberry Pi und das Systemboard sind dabei stromlos.
Die Verbindungen noch einmal überprüfen.
Den Raspberry Pi einschalten und vom LinuxPC sich darauf einloggen.
Ich versuchte zuerst, Vcc des Flash nach dem Einschalten des Rapsberry Pi zu verbinden. Das führte zum Verbindungsabbruch via WLAN, vermutlich war der Einschaltstromstross (Aufladen der Kondensatoren) zu stark. Der Raspberry Pi kann nur ca. 100-150mA an 3,3V liefern.
Wenn sich der Raspberry Pi mit dem anschlossenen SPI Flash nicht einschalten lässt, sollte man den Strom messen, der bei 3,3V an den Pins des SPI Flash vom Board aufgenommen wird. Ist dieser höher als 100-150mA, kann alternativ eine externe Stromquelle genutzt werden.
Flash Zugriff
Das BIOS.BIN auf den Raspberry Pi kopieren, z.B. mit scp.
Alle folgenden Kommandos werden auf dem Raspberry Pi ausgeführt (nach Login mit z.B. ssh).
- Erkennt flashrom den SPI Flash?
flashrom -p linux_spi:dev=/dev/spidev0.0
flashrom sollte hier mindestens einen gefundenen SPI flash melden. Wenn nicht, noch einmal den Sitz des Pomona Clips und die Verdrahtung überprüfen. Den Raspberry Pi aus- und wieder einschalten. Mit neueren Versionen von Raspian ist es notwendig, die SPI Geschwindigkeit explizit (in kHz) anzugeben, z.B. flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=16000
Vorsicht: spispeed=16M setzt die Geschwindikeit auf 16kHz, die Einheit wird stillschweigend ignoriert!
- Backup des alten Inhaltes - kann einige Minuten dauern:
flashrom -p linux_spi:dev=/dev/spidev0.0 -r old_bios.bin
- Eventuell ist es notwendig, flashrom den Typ des SPI Flash mit "-c" mitzuteilen:
flashrom -p linux_spi:dev=/dev/spidev0.0 -c MX25L6405 -r t420_bios.bin
- Das Backup mit einem anderen Filenamen wiederholen und beide Files vergleichen. Sind sie verschieden, ein drittes Mal das Backup durchführen.
flashrom -p linux_spi:dev=/dev/spidev0.0 -r old_biosB.bin md5sum old_bios*.bin
- Den neuen Inhalt schreiben (das beinhaltet eine Verifikation):
flashrom -p linux_spi:dev=/dev/spidev0.0 -w BIOS.BIN