BIOS-Update ohne optisches Laufwerk unter Linux
Einleitung
Dieser Artikel beschreibt das Ausführen eines BIOS-Update für Linux-Benutzer.
El Torito Image auf USB-Stick
Voraussetzungen
- Ein ThinkPad der Sandy Bridge Generation X220/T420 etc. oder neuer – für ältere Modelle verwendet man stattdessen die GRUB4DOS-Methode
- Ein USB Stick > 100 MB, Formatierung egal
- ISO-Image des BIOS-Updates als Download von der Lenovo Website (siehe Links)
- geteltorito Version >= 0.6
geteltorito installieren
geteltorito ist bei Debian/Ubuntu im Paket
- genisoimage
enthalten, andere Distributionen können abweichen. Die installierte Version ermittelt man per
geteltorito -v
Ist die angezeigte Version kleiner als 0.6, dann lädt man sich das Skript von der Seite des Autors mit
wget https://userpages.uni-koblenz.de/~krienke/ftp/noarch/geteltorito/geteltorito.pl
ins selbe Verzeichnis wie das ISO-Image herunter und ersetzt im folgenden Abschnitt geteltorito durch ./geteltorito.py.
El Torito Image aus ISO extrahieren
Das El Torito Boot Image (.img) extrahiert man aus dem Update-ISO (.iso) mit
geteltorito -o thinkpadbios.img 8duj26us.iso
Hinweis: "8duj26us.iso" ersetzt man durch den tatsächlichen Namen des ISOs.
El Torito Image auf USB-Stick schreiben
Für den Scheibvorgang wird das Device sdX des Sticks benötigt, das man wie unten beschrieben ermittelt, in das folgende Kommando einsetzt und es ausführt:
sudo dd if=thinkpadbios.img of=/dev/sdX bs=1M
Ein abschließendes
sync
sorgt dafür, dass alle Daten aus dem Cache auf dem Stick landen.
Ausführen
Die Ausführung des Updates ist am Ende dieses Artikels zusammengefaßt.
GRUB4DOS mit USB-Stick
Voraussetzungen
- Ein frisch mit FAT32 formatierter, leerer USB Stick > 100 MB
- ISO-Image des BIOS-Updates als Download von der Lenovo Website (siehe Links)
Optional: Erzeugen des ISO aus einem "Non-Diskette"-BIOS
Falls für das betreffende ThinkPad-Modell kein ISO zum Download angeboten wird, lädt man das "Non-Diskette"-BIOS herunter. Um aus diesem ein ISO zu erzeugen, werden für Debian/Ubuntu die Pakete
- cabextract sowie
- genisoimage bzw. mkisofs
benötigt, andere Distributionen können abweichen.
Mit folgenden Befehl wird die EXE-Datei entpackt:
cabextract 70uj29ud.exe -d ./BIOS
Wobei "70uj29ud.exe" auf den entsprechenden Dateinamen angepasst werden muss. ./BIOS ist ein Unterordner im aktuellen Ordner der von cabextract erstellt wird, um die entpackten Dateien abzulegen. Der Name kann frei editiert bzw. die Option -d komplett weggelassen werden, um die Dateien an anderer Stelle zu entpacken.
Im Anschluß wechselt man in das oben eingetragene Verzeichnis
cd BIOS
und erstellt mit folgendem Befehl aus dem entpacktem IMG ein ISO:
genisoimage -b 70uj29ud.img -c boot.catalog -o 70uj29ud.iso .
Hiermit wird im aktuellen Verzeichnis (.) die Datei 70uj29ud.iso erzeugt, die nachfolgend weiter verwendet werden kann.
Erstellen des bootfähigen USB-Sticks
ISO-Image auf den Stick kopieren
cp /pfad/zur/iso-datei /media/name-des-sticks/thinkpadbios.iso sync
GRUB4DOS herunterladen, auspacken
wget http://download.gna.org/grub4dos/grub4dos-0.4.4.zip unzip grub4dos-0.4.4.zip cd grub4dos-0.4.4 cp grldr /media/name-des-sticks/
Zum Installieren von GRUB4DOS wird das korrekte Device sdX des Sticks benötigt.
Device des Sticks ermitteln
Vorsicht: eine falsche Angabe des Device kann katastrophale Auswirkungen auf das installierte System haben, so ist z.B. sda in der Regel die Systemplatte.
lsblk: Bei aktuellen Linux-Distributionen kann man das Gerät auch per
lsblk
herausfinden. Die Systemplatte ist meist sda, der Stick sdb, sdc oder höher und findet sich normalerweise am Ende der Liste. Dabei auf die Grösse achten (Spalte SIZE).
Alternativ verwendet man dmesg: dazu führt man unmittelbar nach dem Anstecken folgendes Kommando aus
dmesg | grep "Attached SCSI removable disk" | tail -1
In der Ausgabe ist das gesuchte Device sdX zu sehen:
[ 1234.567890] sd 0:0:0:0: [sdX] Attached SCSI removable disk
GRUB4DOS installieren
Das vorstehend ermittelte Device sdX setzt man nun in folgendes Kommando ein und führt es aus:
sudo ./bootlace.com /dev/sdX
Ausgabe:
Disk geometry calculated according to the partition table: Sectors per track = xx, Number of heads = yyy Success.
GRUB4DOS konfigurieren
Zuletzt erstellt man die Datei menu.lst auf dem Stick:
gedit /media/name-des-sticks/menu.lst
Inhalt:
color blue/green yellow/red white/magenta white/magenta timeout 30 default /default title ThinkPad BIOS Update map (hd0,0)/thinkpadbios.iso (hd32) map --hook chainloader (hd32) boot
Ausführen
Die Ausführung des Updates ist am Ende dieses Artikels zusammengefaßt.
System-Bootloader mit Syslinux
Hinweis: dieser Abschnitt funktioniert sinngemäß auch unter anderen Distributionen mit GRUB 1/2, nur das Paket syslinux heißt eventuell anders oder fehlt.
Voraussetzungen
- Ubuntu 12.04 oder höher auf Festplatte installiert (kein Livesystem!)
- GRUB 2 (ist bei einem neu installierten Ubuntu automatisch der Fall)
- ISO-Image des BIOS-Updates als Download von der Lenovo Website (siehe Links)
Hinweis: die hier beschriebene Vorgehensweise funktioniert nicht mit einer EFI-Installation (im Paket grub-efi-amd64 fehlt das Modul linux16).
Installation
ISO-Image kopieren
Den Download kopiert man nach /boot:
sudo cp /pfad/zur/iso-datei /boot/thinkpadbios.iso
Syslinux einrichten
Ubuntu 12.04 und höher
Zu installieren ist das Paket
- syslinux
sudo apt-get install syslinux
Anschließend ist das enthaltene Werkzeug memdisk nach /boot zu kopieren
sudo cp /usr/lib/syslinux/memdisk /boot/
GRUB 2 konfigurieren
Mit einem Editor mit Root-Rechten bearbeitet man die Datei /etc/grub.d/40_custom und fügt folgende Zeilen am Ende hinzu:
menuentry "ThinkPad BIOS Update" { set root='(hd0,1)' # diese Zeile analog den vorhandenen Einträgen in /boot/grub/grub.cfg anpassen! linux16 /boot/memdisk iso initrd16 /boot/thinkpadbios.iso }
Hat man für /boot eine separate Partition eingerichtet, lauten die Einträge so:
menuentry "ThinkPad BIOS Update" { set root='(hd0,1)' # diese Zeile analog den vorhandenen Einträgen in /boot/grub/grub.cfg anpassen! linux16 /memdisk iso initrd16 /thinkpadbios.iso }
Um beim Systemstart das GRUB-Bootmenü anzuzeigen, sind in der Datei /etc/default/grub die beiden folgenden Zeilen wie gezeigt mit '#' auszukommentieren:
#GRUB_HIDDEN_TIMEOUT=0 #GRUB_HIDDEN_TIMEOUT_QUIET=true
Zuletzt werden alle Änderungen an GRUB aktiviert mit
sudo update-grub
GRUB 1 / GRUB Legacy
Falls man noch eine Distribution mit GRUB 1 (GRUB Legacy) verwendet (z.B. Archlinux), dann kann man das ISO ebenfalls einbinden. Dazu fügt man in /boot/grub/menu.lst folgendes hinzu:
# BiosUpdate title ThinkPad BIOS Update root (hd0,0) # Analog den anderen Einträgen anpassen kernel /boot/memdisk iso initrd /boot/thinkpadbios.iso
Man muss wie bei GRUB 2 syslinux installieren und memdisk sowie das thinkpadbios.iso nach /boot kopieren.
BIOS Update ausführen
Wichtig: das BIOS-Update unbedingt mit geladenem Akku und angeschlossenen Netzteil durchführen!
System neu starten, ggf. per [F12] den USB-Stick auswählen und im GRUB-Bootmenü den Eintrag
- "ThinkPad BIOS Update"
auswählen.
Hinweis: bei einem UEFI-fähigen ThinkPad ist zu bedenken, dass der GRUB4DOS-USB-Stick nur im BIOS- d.h. Legacy-Modus gestartet werden kann. Dies ist im BIOS unter "Startup" entsprechend einzustellen: "Both", "Legacy first".
Nun den Anweisungen des Programms folgen.
Nach dem Update empfiehlt es sich, die BIOS-Einstellungen auf Defaults (Werkseinstellungen) zurückzusetzen:
- Beim Systemstart mit [F1] ins BIOS
- [F9] (Setup Defaults) [Enter] (Yes)
- eigene Anpassungen (z.B. SATA-Modus) wieder einpflegen
- [F10] (Save and Exit) [Enter] (Yes)
- sobald das ThinkPad-Logo erscheint, Gerät kurz ausschalten
Quellen und Links
- Lenovo Support Website – BIOS Downloads
- 1, 2, 3 – Anleitungen auf thinkwiki.org
- GRUB 2 – Konfiguration des Bootloaders
Alternative Windows-basierte Methoden
- [1] – mit GRUB4DOS, UltraISO oder Phlash16-Kommandos