Manueller BIOS-Flash via Raspberry Pi

Manuelles Flashen eines Asus H81T

Da ich aktuell einen neuen Werkstattrechner baue, entstand zwangsläufig dieser Beitrag. Aufgrund eines Prozessor-Upgrades in meinem Alltagsdesktop hatte ich nun einen Core i5 4690S mit 4x 3,2GHz übrig. So kam ich also zu der Idee einen neuen Werkstattrechner zu bauen. Da ich alle weiteren Komponenten gebraucht gekauft habe oder auch schon besaß, hielten sich die Kosten im Rahmen. Als Mainboard kommt ein Asus H81T zum Einsatz, welches jedoch aufgrund eines veralteten BIOS die Generation der Haswell-Refresh-Prozessoren nicht unterstützt. Nun stellte sich die Frage, wie man ein BIOS-Update durchführt, wenn das System nicht einmal postet und der Bildschirm einfach schwarz bleibt? Schon wieder Geld auszugeben und auf den Versand zu warten kam nur im Notfall in Frage.

Nachdem ich nach einem Prozessor der 1. Haswell-Generation gesucht habe und mir 40€ einfach zu teuer waren, suchte ich direkt nach Angeboten für BIOS-ICs. Jedoch waren mir auch diese zu teuer und ich, als manchmal ungeduldiger Mensch, hätte erneut warten müssen. So kam es, dass ich mir mal Daten zu dem BIOS-Baustein heraussuchte generelle Infos zum Thema BIOS-flash. Glücklicherweise war das ICs nur gesockelt, sodass man es ohne Probleme ausbauen konnte.

Diese Möglichkeit führte dazu, dass ich testete, ob es möglich ist das EEPROM einfach in einem anderen PC zu flashen. Das Gute an der ganzen Geschichte ist, dass es sich bei diesem EEPROM eigentlich nur um einen Flashspeicher handelt, welcher generelle Infos für das eigentliche BIOS (oder bei moderneren Rechnern UEFI-BIOS) bereitstellt – eben auch unter anderem die Information, um welchen Prozessor es sich handeln kann. Diese Sache, dass nur am Anfang von diesem Chip gelesen wird, macht es möglich den Baustein während dem Betrieb des PCs auszubauen und durch einen anderen zu ersetzten. In meinem Fall handelte es sich um die identischen ICs, da ich für den Versuch ebenso ein Asus-Board genommen habe. Um es jetzt nicht zu ausführlich zu beschreiben gibt es eigentlich nur zu sagen, dass es wunderbar funktioniert hätte, wenn da nicht ein writeprotect von Hersteller eingebaut gewesen wäre. Damit wird verhindert, dass man falsche BIOS-Versionen flashen kann. Nur die herstellereigenen Tools dürfen flashen nachdem sichergestellt wurde, dass die BIOS-Version zu dem Mainboard passt. Somit war es mir nicht möglich unter Linux mit dem Tool „flashrom“ gewaltsam eine BIOS-Version für ein anderes Mainboard zu flashen. Schade.

Nach diesem Fehlschlag komme ich nun zum Eigentlichen Punkt des Beitrags: Wie bekommt man nun diese 8MB an Informationen auf das IC?

Ganz einfach: Man nehme ein Raspberry Pi und schließe den Baustein via SPI an und anschließend mit flashrom die neue Version aufspielen. Aber wie geht’s?

Zuerst gilt es, den Raspberry Pi mit Raspbian so einzurichten, dass die Nutzung der SPI-Schnittstelle möglich wird. Dazu mit folgendem Befehl die Konfiguration des Pis öffnen und unter den „Advanced Options“ das SPI-Interface aktivieren.

$ raspi-config

Nach einem Neustart solle dann folgende Ausgabe möglich sein:

$ pi@raspberrypi ~ $ ls -l /dev/ | grep spi*
$ crw-rw---T 1 root spi 153, 0 Jan 1 1970 spidev0.0
$ crw-rw---T 1 root spi 153, 1 Jan 1 1970 spidev0.1

Danach geht es weiter mit der Installation von flashrom. Um die neuste Verion zu bekommen kann man das Tool der Website www.flashrom.org/Downloads herunterladen. Danach mit Hilfe von cd ins Verzeichnis der herungergeladenen Datei wechseln. Anschließend wird das Tool durch folgende Befehle installiert:

$ sudo apt-get install pciutils-dev zlib1g-dev libftdi-dev libusb-dev

$ tar -jxfv flashrom*

$ sudo make

$ sudo make install

Nachdem die Software installiert ist muss man das EEPROM an den Raspberry Pi anschließen. An dieser Stelle gibt es nicht viel zu erklären, stattdessen habe ich einfach kurz einen Schaltplan erstellt und die Schlatung final fotografiert:

Nachdem alles fertig angeschlossen ist, geht es weiter mit der zu flashenden Datei. Im Falle der Asus Dateien handelt es sich um CAP-Files, welche man nicht direkt flaschen kann. Findige oder auch übereifrige Nutzer stellen fest, dass die CAP-Datei zu groß für das IC ist. Ein Flashvorgang würde an dieser Stelle fehlschlagen. Glücklicherweise sind diese Originaldateien weder verschlüsselt, noch sonst irgendetwas. Asus hat lediglich einen zusätzlichen Fileheader eingebaut, welcher sich leicht mit dem folgenden Befehl entfernen lässt: (Dateinamen ggf. anpassen.)

$ dd bs=2048 skip=1 if=H81T.CAP of=H81T.BIN

Anschließend kann man zur Sicherheit mit folgendem Befehl ein Image des aktuellen Zustandes ziehen:

$ sudo flashrom -V -p linux_spi:dev=/dev/spidev0.0 -r h81alt.dat

Vor dem Flashen den Baustein mit folgendem Befehl löschen:

$ sudo flashrom -E -V -p linux_spi:dev=/dev/spidev0.0

Und anschließend kann die um den CAP-Header erleichterte Datei geflasht werden:

$ sudo flashrom -V -w H81T.BIN -p linux_spi:dev=/dev/spidev0.0

Wichtig! Die Vorgänge dauern ihre Zeit, da 8MB über die SPI-Schnittstelle übertragen werden! Wenn alles erfolgreich war kann man am Ende das Wort VERIFIED lesen.

Dieser Beitrag nutzt Informationen von diesem Link: Techpowerup Forum

Ich hoffe, dass dieser Artikel vielleicht irgendwen einmal helfen wird. Lasst gerne einen Kommentar da, wenn Fragen sind.

 
comments powered by Disqus