UEFI BIOS Update with a Raspberry Pi deutsch
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 RaspberryPi
- 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 RaspberryPi 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 RaspberryPi 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# (Pin 1 beim W25Q32BV, an CS0# beim RaspberryPi), SO (Pin 2, MISO), GND (Pin 4), SI (Pin5, MOSI), SCLK (Pin6) und Vcc (Pin 8, an 3,3V beim RaspberryPi) verbinden. Der RaspberryPi und das Systemboard sind dabei stromlos.
Die Verbindungen noch einmal überprüfen.
Den RaspberryPi einschalten und vom LinuxPC sich darauf einloggen.
Ich versuchte zuerst, Vcc des Flash nach dem Einschalten des RapsberryPi zu verbinden. Das führte zum Verbindungsabbruch via WLAN, vermutlich war der Einschaltstromstross (Aufladen der Kondensatoren) zu stark. Der RaspberryPi kann nur ca. 100-150mA an 3,3V liefern.
Wenn sich der RaspberryPi 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 RaspberryPi kopieren, z.B. mit scp.
Alle folgenden Kommandos werden auf dem RaspberryPi 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 RaspberryPi aus- und wieder einschalten.
- 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 ein Verifikation):
flashrom -p linux_spi:dev=/dev/spidev0.0 -w BIOS.BIN