Libreboot Thinkpad X200s

Libreboot Thinkpad

Mitwirkende: klonfish, frederic, mazech
Beginn: 2015-02-27
Fertigstellung: 2015-02-28
Status: fertig

Libreboot ist ein Ersatz für das proprietäre Hersteller-BIOS von ausgewählten IBM/Lenovo Thinkpads. Es ist ein Fork von Coreboot, allerdings wurden die in Coreboot enthaltenen Binary Blobs entfernt, man kann es also selbst aus den Sources heraus kompilieren und hat die volle Kontrolle über die Funktionalität des BIOS. Frei nach dem Motto: „I bless your Computer, my child!“

Beweggründe

Es war schon länger im Gespräch mit einem alternativen FLOSS Bios zu experimentieren. Wir haben uns für Libreboot entschieden, da es komplett ohne binary Blobs auskommt, Intel AMT und die gesamte proprietäre BIOS Software komplett entfernt. Leider muss man auch abstrichen bei der einfachen konfigurierbarkeit der Hardware machen, da es kein einfaches Interface gibt, wie man es von einem normalen BIOS kennt. Die einzigen Optionen sind das OS zu laden, von USB zu booten und von CD/DVD zu booten.

Intel AMT kann wie ein Trojaner agieren und hat auf die Hardware des Geräts sogar Zugriff, wenn dieses ausgeschaltet ist. Auf dieses „Feature“ kann man auch gut verzichten.

Außerdem wird die TPM Funktionalität eingeschränkt und die Whitelist für Wireless-LAN Netzwerkkarten entfernt. Man also jede beliebige NW-Karte benutzen, auch wenn diese von Lenovo nicht auf die Whitelist gesetzt wurde.

Wenn das Ziel ist einem Bad-Bios zu entgehen, ist libreboot aufgrund seiner kompletten quelloffenheit wohl die Beste alternative Firmware für Laptops. Leider gibt es Libreboot nur für Geräte von 2 Herstellern (IBM/Lenovo, Apple). Die Laptops können auch fertig geflasht, als Gebrauchtware auf der Internetseite des Entwicklers erworben werden.

Unterstützte Geräte

Leider ist Libreboot nur für wenige Geräte verfügbar.

  • IBM Thinkpad X60
  • IBM Thinkpad T60
  • Lenovo Thinkpad X200
  • Lenovo Thinkpad X200s
  • Lenovo Thinkpad X200t
  • Apple MacBook 1,1
  • Apple MacBook 2,1

Demontieren des Laptops

img_20150226_220212.jpg

Das demontieren unseres X200s ging relativ schnell, auf der Lenovo Seite kann man sich das Service Manual besorgen, damit am Ende wieder alles an seinem richtigen Platz ist und natürlich davor alles ohne Schäden auseinander gebaut werden kann.

Wir haben nur das Mainboard entfernt, damit wir einfacher an den BIOS-Chip kommen. Der sitzt auf der Unterseite des Boards, man muss also das Baord komplett ausbauen, um problemlos daran arbeiten zu können. Das Display muss eigentlich nicht von der Base-Unit entfernt werden, genauso wie der Express-Card-Slot und die kleine Platine unten Rechts in der Ecke, auf der sich die Speicherkarte,das Modem und die Klinken-Stecker befinden.

Herstellen der SPI-Verbindung

Um das BIOS auf den SO-Chip flashen zu können, muss ein Gerät das lesend und schreibend über SPI zugreifen kann mit dem Chip verbunden werden. Wir hatten uns im voraus eine SOIC-8 Klemme besorgt, die leider komplett nutzlos war, da die Pins des Chips ungewöhnlich klein waren und wir deswegen mit der Klemme keinen Kontakt herstellen konnten.

Was allerdings erst später aufgefallen ist, auf der Seite von libreboot, wird explizit davon gesprochen, dass man beim X200s löten MUSS, da der Chip nicht kompatibel mit Standard SOIC-8 Klemmen/Zangen ist. Also wurde der Chip mit Drähten versehen.

img_20150226_223537.jpg img_20150226_230011.jpg

FIXME Schaltplan

Verbinden mit dem Raspi

Erster Versuch

img_20150227_002136.jpg Als Flash Device haben wir uns für einen RasberryPI mit rasbian und flashrom entschieden. Das ist nur eine von vielen Möglichkeiten, bei unserer Recherche haben wir erfolgreiche Flashvorgänge mit Beagle Bone Black und BUS-Pirate gefunden. Das Gerät der Wahl sollte nur SPI unterstützen.

Trotz Warnungen auf anderen Seiten, dass die Länge der Kabel eine direkte Auswirkung auf den Erfolg des Vorgangs hat, probierten wir Kroko-Klemmen als Verbindunsgstücke zwischen den GPIO's des RasPI und dem Chip des X200s aus. Es sah nicht nur chaotisch aus, flashrom erkannte den Chip auch nicht. Wir wurden verunsichert ob wir den Chip eventuell beschädigt hatten.

Versuch eines Verbindungsaufbaus:

./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512

Fehlerausgabe:

Calibrating delay loop... OK.
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.

Zweiter Versuch

img_20150227_005317.jpg Nachdem die Krokoklemmen nicht die Lösung unseres Verbindunsgproblems waren, kürzten wir die Kabel und löteten diese eine Schaltleiste. Im Vergleich zu anderen Coreboot/Libreboot Projekten waren unsere Kabel immernoch 2-3x Länger. Nun versuchten wir wieder über flashrom den Chip auszulesen, was allerdings auch wieder zu dem selben Fehler führte:

Versuch eines Verbindungsaufbaus:

./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=512

Fehlerausgabe:

Calibrating delay loop... OK.
No EEPROM/flash device found.
Note: flashrom can never write if the flash chip isn't found automatically.

klonfish hatte den Einfall, eine geringere SPI-Geschwindigkeit zu wählen. Und tatsächlich hat es mit spispeed=128 funktioniert!

Versuch eines Verbindungsaufbaus:

./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=128

Versuch eines Verbindungsaufbaus:

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L6405(D)" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6406E/MX25L6436E" (8192 kB, SPI) on linux_spi.
Found Macronix flash chip "MX25L6445E/MX25L6473E" (8192 kB, SPI) on linux_spi.
Multiple flash chip definitions match the detected chip(s): "MX25L6405(D)", "MX25L6406E/MX25L6436E", "MX25L6445E/MX25L6473E"
Please specify which chip definition to use with the -c <chipname> option.

Wir vermuten das duch die Länge der Kabel Übertragungsfehler auftreten, die von der Fehlererkennung von SPI nicht ausgeglichen werden können und die niedrige Rechenleistug des Raspi auch direkten Einfluss auf die read/write Geschwindigkeit hat.

Backup der factory-ROM

FIXME

Übertragen der neuen ROM

root@raspilug:/var/tmp/flashrom# time ./flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=128 -c "MX25L6405(D)" -w /var/tmp/x200-flash/x200_8mb_ukqwerty_vesafb.rom 

flashrom v0.9.8-rc1-r1885 on Linux 3.18.7+ (armv6l)
flashrom is free software, get the source code at http://www.flashrom.org

Calibrating delay loop... OK.
Found Macronix flash chip "MX25L6405(D)" (8192 kB, SPI) on linux_spi.
Reading old flash chip contents... 

done.
Erasing and writing flash chip... FAILED at 0x00000000! Expected=0xff, Found=0x00, failed byte count from 0x00000000-0x0000ffff: 0xc33e
ERASE FAILED!
Reading current flash chip contents... 

done. Looking for another erase function.


FAILED at 0x00010000! Expected=0xff, Found=0x01, failed byte count from 0x00010000-0x0001ffff: 0x2fd3
ERASE FAILED!
Reading current flash chip contents... 

done. Looking for another erase function.


FAILED at 0x00000000! Expected=0xff, Found=0x08, failed byte count from 0x00000000-0x007fffff: 0x361c99
ERASE FAILED!
Reading current flash chip contents... 


done. Looking for another erase function.


FAILED at 0x00000000! Expected=0xff, Found=0x08, failed byte count from 0x00000000-0x007fffff: 0x361c99
ERASE FAILED!
Looking for another erase function.
No usable erase functions left.
FAILED!
Uh oh. Erase/write failed. Checking if anything has changed.
Reading current flash chip contents... done.
Apparently at least some data has changed.
Your flash chip is in an unknown state.
Please report this on IRC at chat.freenode.net (channel #flashrom) or
mail flashrom@flashrom.org, thanks!

real	74m20.917s
user	0m3.610s
sys	0m9.910s

============================================================================
projekte/libreboot.txt · Zuletzt geändert: 2015/11/08 17:44 von frederic
Nach oben
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0