UEFI BIOS Update with a Raspberry Pi deutsch

Aus ThinkPad-Wiki

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.

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.

UEFITool displays .FL1 file as a capsule

  • 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

UEFITool F33E... component UEFITool extract F33E... component

  • Das File UEFI_F33E.BIN in UEFITool öffnen. Das sollte als Intel Flash Image erkannt werden.

UEFITool opens the F33E part

  • 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)

UEFITool extract BIOS.BIN from F33E component

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

Wiring Raspberry Pi with the SPI flash Wiring Raspberry Pi with the SPI flash - second picture

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.

  • 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