Lenovo T530 Embedded Controller Firmware Patch

2017-12-19

Ich habe ein Lenovo T530. Die Maschine leistet mir schon seit einigen Jahren gute Dienste. Der Bildschirmkontrast und die Farbwiedergabe könnten besser sein und die Ctrl-Taste ist nicht an der richtigen Stelle, aber die Tastatur fühlt sich gut an, ist mittig und beleuchtbar, RAM und Festplatte sind gut ereichbar, das Gehäuse ist robust… ich kann mich nicht beklagen. Allerdings wurde es mal Zeit für einen neuen Akku, denn der alte war schon völlig hinüber. Also habe ich mir im Netz einen günstigen Ersatzakku mit extra hoher Kapazität bestellt. Der Akku kam prompt mit der Post an und ich hab ihn gleich ausprobiert. Er hat tadellos gepasst, ohne zu wackeln, ich war sehr zufrieden. Bis zum nächsten Neustart, als ich mit einer traurigen Nachricht begrüßt wurde:

The battery installed is not supported by this system and will not
charge.  Please replace the battery with the correct Lenovo battery
for this system.  Press the ESC key to continue.

Eine kurze Webrecherche ergab, dass Lenovo offenbar bei einigen Modellen in der Embedded Controller Firmware einen Challenge-Response-Mechanismus einsetzt, über den der Akku sich als ein originaler Lenovo-Akku authentifizieren muss. Wenn die Authentifizierung scheitert, verweigert der Laptop das Laden des Akkus. Um das zu überprüfen, habe ich mir den Wert in /sys/class/power_supply/BAT0/power_now einige Male mit cat ausgeben lassen. Während der Akku läd sollte der Wert in dieser virtuellen Datei kontinuierlich steigen. Hat er aber nicht gemacht, also war klar dass der Laptop den Akku nicht füttert.

Naja, immerhin eine gute Gelegenheit um sich in stoischer Gelassenheit zu üben. Dass ich mir in Zukunft voraussichtlich keine Lenovo-Hardware mehr kaufen werde, stand auch vorher schon fest. Glücklicherweise hat sich längst jemand mit einem ähnlichen Problem auseinandergesetzt und eine Lösung entwickelt:

https://github.com/hamishcoleman/thinkpad-ec

Die konkreten Zauberformeln, um ein patched Firmware-Update für meinen Laptop zu erzeugen, waren die folgenden:

$ apt install build-essential git mtools libssl-dev
$ git clone https://github.com/hamishcoleman/thinkpad-ec
$ cd thinkpad-ec
$ make patch_enable_battery clean
$ make patch_disable_keyboard clean
$ make patched.t530.img

Die letzte Zeile erzeugt eine Abbild-Datei patched.t530.img. Als nächstes habe ich einen USB-Stick hervorgekramt und die Abbild-Datei darauf geschrieben:

$ # Vorsicht, erst weiterlesen!
$ sudo dd status=progress if=patched.t530.img of=/dev/sdb

An der Stelle ist oberste Vorsicht geboten! /dev/sdb ist die Gerätedatei des USB-Sticks, aber wenn du den Prozess an deinem eigenen Rechner nachovllziehen möchtest, könnte es in deinem Fall auch /dev/sdc oder /dev/sdd etc. sein. Wenn du die falsche Gerätedatei erwischst, überschreibst du das Dateisystem auf einem anderen Datenträger. Am besten schaust du dir, bevor du den USB-Stick ansteckst, zunächst die Ausgabe von ls /dev/sd? an. Dann steckst du den USB-Stick an und schaust dir erneut die Ausgabe von ls /dev/sd? an. Die Gerätedatei, die neu hinzugekommen ist, ist die Datei, in die du schreiben möchtest. Wenn du das vermasselst, verlierst du Daten.

Der nächste und letzte Schritt ist das Überschreiben der Embedded Controller Firmware. Die Situation ist die folgende: Ich habe einen USB-Stick mit einem inoffiziellen patched Firmware-Update aus irgendeinem Github-Repository von einer wildfremden Person und bin kurz davor das in den Firmware Controller meines Laptops zu schreiben. Was kann da schon schiefgehen? Im schlimmsten Fall wird dieser Rechner nicht mehr starten und ich werde mir frustriert die ganze Nacht um die Ohren schlagen, um das irgendwie wieder gerade zu biegen; voraussichtlich erfolglos.

Naja, was solls. Immerhin hat das Repo auf Github über 200 Sternchen… Ich starte den Rechner neu, drücke F12 für die Boot-Auswahl, wähle den USB-Stick und starte den Update-Prozess. Der Rechner startet nach ein paar Sekunden neu, ich ziehe den USB-Stick ab und mein Betriebssystem wird geladen. Alles wie gewohnt. Der Rechner funktioniert noch. Ich bin erleichtert.

Ein erneuter Blick in /sys/class/power_supply/BAT0/power_now bestätigt, dass der Akku jetzt geladen wird. Ich bin gespannt, wie lange der halten wird. Für den Preis eines normalen Lenovo-Akkus könnte ich mir locker noch drei oder vier weitere NoName-Akkus kaufen.