Wie kann man Firmware unter Linux in der Praxis flashen?


15

Nun, ich fühle mich zu alt, um durch mehrere brennende Reifen zu springen, um mehrere Firmwares auf die übliche herstellerspezifische Weise zu aktualisieren: Laden Sie einige DOS-Tools herunter, verschwenden Sie einige Zeit beim Erstellen eines (kostenlosen) DOS-Bootmediums und verschwenden Sie mehr Zeit, um das BIOS zu erstellen booten tatsächlich davon und flashen schließlich das Firmware-Upgrade.

Dies ist so 1980er Jahre.

Ich habe ein Linux-Flash-Tool aus dem Coreboot-Projekt gefunden . Es scheint verschiedene FLASH-Chips zu unterstützen. Aber wie funktioniert das in der Praxis?

Ich vermute, es gibt einige Fallstricke, die vom Hersteller gelieferte Firmware-Upgrades in das richtige Format konvertieren. Oder wie wäre es, den richtigen Zielchip zu identifizieren?

Derzeit muss ich wahrscheinlich ein Upgrade durchführen, zum Beispiel:

  • die Firmware einiger Seagate 1.5 TB-Festplatten
  • die Firmware eines alten Abit Athlon 64 Boards (Award Bios)
  • Bios / Embedded-Controller-Bios eines Thinkpads

Wie aktualisiere ich die Firmware meiner Geräte auf einem Linux-System?

Antworten:


11

Flashen mit FreeDOS, einem Neustart und keinen Wechseldatenträgern

  1. Stellen Sie sicher, dass Sie GRUB2 verwenden (prüfen Sie, ob Sie das Paket grub-pcauf Ubuntu installiert haben)
  2. Holen Sie sich SYSLINUXs MEMDISK. Installieren Sie das Paket unter Ubuntu, syslinux-commonund Ihre Memdisk befindet sich in/usr/lib/syslinux/memdisk
  3. Laden Sie fdboot.img herunter , speichern Sie es in Ihrem Home-Verzeichnis oder in einem anderen Verzeichnis, das Sie problemlos mit einem US-Tastaturlayout eingeben können
  4. Betten Sie Ihre Flash-Software in das FreeDOS-Image ein:
    1. sudo -s
    2. mkdir -p /mnt/floppy
    3. mount -o loop -t msdos fdboot.img /mnt/floppy
    4. cp -via FLASH.EXE BIOS.IMG /mnt/floppy/( FLASH.EXEund BIOS.IMGsind Beispiele)
    5. umount /mnt/floppy
  5. Booten Sie Ihr System und unterbrechen Sie es im GRUB2 (drücken Sie ESC)
  6. Drücken Sie c, um die Befehlszeile von GRUB2 aufzurufen.
  7. MEMDISK laden:
    1. Eintreten linux16 (hd. Drücken Sie nun die Tabulatortaste. Eine Liste der Festplatten wird angezeigt.
    2. Vervollständigen Sie die Festplattenauswahl, so dass in der Zeile linux16 (hd0,beispielsweise steht.
    3. Drücken Sie erneut die Tabulatortaste, um eine Liste der Partitionen anzuzeigen. Sie müssen /usr/lib/syslinuxin Ihrer Linux-Installation die Partition finden, auf der Sie gemountet sind.
    4. Jetzt können Sie die Festplatte und die Partition Spezifikation haben, können Sie den Pfad vervollständigen , so dass es so aussieht: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Drücken Sie Enter.
  8. Laden Sie FreeDOS:
    1. Verwenden Sie zum Suchen dieselbe Tabulatorvervollständigung fdboot.img, aber mit dem Befehl initrd16anstelle von linux16. Sie werden mit einer Linie am Ende wie folgt: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Drücken Sie Enter.
  9. Schreiben Sie bootund drücken Sie die Eingabetaste.
  10. Das FreeDOS-Startmenü wird angezeigt.
  11. Wählen Sie die Option "Abgesicherter Modus", da Sie die Treiber nicht benötigen.
  12. In der DOS - Eingabeaufforderung schreiben Sie den Namen der Firmware blinkt ausführbare Datei, zum Beispiel: FLASH.EXE. Drücken Sie Enter.
  13. Warten Sie, bis das Blinken beendet ist.
  14. Der Firmware-Flasher bootet möglicherweise den Computer selbst oder Sie erhalten die Aufforderung zurück. Wenn Sie die Eingabeaufforderung erhalten, drücken Sie Strg-Alt-Entf, um den Computer neu zu starten.
  15. Da Sie die GRUB-Konfiguration nicht dauerhaft geändert haben, wird sofort wieder Ihr Standardbetriebssystem gestartet.

Wenn auf dem Bild nicht genügend Speicherplatz vorhanden ist, verwenden Sie das kleinste Bild von chtaube.eu . Dekomprimieren Sie das Bild und filtern Sie es trotzdem xxd. Suchen Sie jetzt nach 55aa . Es sollte bei sein 0x1fe. Sie können das Image offset=$((0x200))als zusätzliches Mount-Flag einbinden. $(())Beachten Sie, dass die Syntax Bash-spezifisch ist, aber auch in Zsh funktioniert.

Alternativ siehe https://www.fladi.at/posts/large-freedos-boot-image/


Sie sollten Ihre vorhandene Antwort aktualisieren, anstatt sie zu duplizieren.
Maxschlepzig

Ich würde vorschlagen, diese Zeilen in grub.cfg einzufügen, um daraus einen Menüeintrag zu machen. Einfacher, sie zu kopieren und einzufügen oder zumindest mit einem echten Texteditor erneut einzugeben.
Derobert

@derobert: Wie finde ich die Grub2-Geräte- und Partitions-ID zuverlässig? Das müsst ihr wissen, wenn ihr es in die Konfiguration backt. Deshalb ist die Tab-Vervollständigung schön.
Janus Troelsen

1
@derobert: Bist du sicher, dass du über Grub2 sprichst? Dieses Format sieht für mich wie Grub0. * Aus. Wann wird msdosvorangestellt? Ich werde versuchen, Ihre Frage zu beantworten, wenn Sie es veröffentlichen. Gib mir Bescheid.
Janus Troelsen

1
@ysangkok, das ist sowohl grub1 als auch grub2, msdos ist nur der Partitionstyp ... Ich habe keine Frage zu stellen, ich dachte, Sie haben es getan ("Wie finde ich das Grub2-Gerät und die Partitions-ID zuverlässig?").
Derobert

7

Wahrscheinlich wird jedes Gerät mit aktualisierbarer Firmware seine eigenen Methoden dafür haben. Insbesondere Motherboards sind in dieser Hinsicht bekanntermaßen nicht kompatibel.

Auch bei Festplatten ist dies eine geschützte Angelegenheit. Seagate bietet Live-CDs und Windows-Downloads, um Firmware-Updates durchzuführen, jedoch keine Linux- oder Unix-Tools.

Sie können bootfähige Images für Thinkpad-BIOS-Updates erstellen, die von GRUB gebootet werden können.

Andernfalls müssen Sie sich nur beim Hersteller nach Werkzeugen erkundigen.

Wenn Sie dagegen mit Mikrocontrollern arbeiten, können Sie diese häufig mit relativ universellen Werkzeugen programmieren, wenn auch nur in begrenztem Umfang (z. B. können Atmel-Chips normalerweise mit programmiert werden avrdude).


6

für Seagate 3 TB Video (ST3000VX000-9YW1):

sg_write_buffer -v -m 5 -I <FW file> <dev>

3

Ich habe erfolgreich ein Seagate Barracuda 7200.12 ST31000528AS (1 TB SATA) -Laufwerk mit der folgenden Methode geflasht: ( Verwendung auf eigenes Risiko! )

  1. Laden Sie die ISO-Datei von Seagate herunter: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. Mounten / Extrahieren PH-CC49.imaaus ISO-Datei
  3. dd die .ima auf einen USB-Stick: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Schalten Sie den Computer aus und trennen Sie alle Laufwerke mit Ausnahme der Laufwerke, auf die ein Flash ausgeführt werden soll
  5. Booten Sie von einem USB-Stick (dies startet das Seagate Firmware-Aktualisierungsdienstprogramm)
  6. Befolgen Sie die Anweisungen auf dem Bildschirm, um die Laufwerke zu flashen.
  7. Schalten Sie das Gerät aus, schließen Sie alles wieder an und schalten Sie es ein

Das ist es! Keine Windows, keine sperrigen CDs, keine Grub-Änderungen, keine FreeDos, keine flockigen Windows-EXE-Dateien (habe es versucht, aber es ist mit einer obskuren Fehlermeldung fehlgeschlagen)

Das Guthaben geht an die Quelle: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (gefunden durch Durchsuchen von PH-CC49.ima)


Sie möchten Ihre Antwort nur mit einer anderen Antwort verknüpfen, die Sie (wie dieselbe Person ausgesehen haben?) An anderer Stelle gegeben haben: linuxquestions.org/questions/linux-hardware-18/…
Peter Teoh

Ja, ich habe meine Antwort auf beiden Seiten kopiert und eingefügt. Auch hier geht der Kredit an die Quelle.
Alecz

2

Bei meinem seagate ST2000NM0024-1HT174 habe ich Folgendes getan: Die Firmware von seagate heruntergeladen und in einem USB-Schlüssel gespeichert. startete meinen PC mit einem Live-USB (oder DVD) von Linux Mint Mate 17.3 neu. und entpacken Sie alle Seagate-Dienstprogramme direkt auf dem Desktop. kopierte die Firmware einen Befehl auf dem Desktop, benannte den Befehl seaflashlin_33_054 dann in seaflashlin einfacher um, nachdem das Terminal geöffnet und geschrieben wurde:

mint@mint ~ $ sudo su    (enter in Superuser live mint)

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(Fehler! Ich ändere die Berechtigungsdatei)

mint Desktop # ls -l
total 69284
drwxr-xr-x 5 mint mint      120 Nov  3 11:14 EntCap-Makara-SATA-SN05
-rw-r--r-- 1 mint mint 68386705 Nov  2 19:36 EntCap-Makara-SATA-SN05.zip
-rw-r--r-- 1 mint mint  2032640 Sep 10  2015 MakaraEntCapSATA-STD-512E-SN05.LOD
-rw-r--r-- 1 mint mint      312 Dec 17  2015 MK-SN05.CFS
-rw-r--r-- 1 mint mint   369127 Sep 11  2015 READMEFIRST-EnterpriseCapacity3.5-Makara-SATA firmware update.pdf
-rw-r--r-- 1 mint mint   104280 Oct 26  2015 seaflashlin
-rw-r--r-- 1 mint mint    31848 Oct 26  2015 seaflashlin.046.txt
-rwxr-xr-x 1 mint mint     7874 Nov  3 11:13 ubiquity.desktop

mint Desktop # chmod ugo+rxw *

mint Desktop # ls -l

total 69284
drwxrwxrwx 5 mint mint      120 Nov  3 11:14 EntCap-Makara-SATA-SN05
-rwxrwxrwx 1 mint mint 68386705 Nov  2 19:36 EntCap-Makara-SATA-SN05.zip
-rwxrwxrwx 1 mint mint  2032640 Sep 10  2015 MakaraEntCapSATA-STD-512E-SN05.LOD
-rwxrwxrwx 1 mint mint      312 Dec 17  2015 MK-SN05.CFS
-rwxrwxrwx 1 mint mint   369127 Sep 11  2015 READMEFIRST-EnterpriseCapacity3.5-Makara-SATA firmware update.pdf
-rwxrwxrwx 1 mint mint   104280 Oct 26  2015 seaflashlin
-rwxrwxrwx 1 mint mint    31848 Oct 26  2015 seaflashlin.046.txt
-rwxrwxrwx 1 mint mint     7874 Nov  3 11:13 ubiquity.desktop

mint Desktop # ./seaflashlin  

usage:
seaflashlin_i386 {-m <model_number> -f <fw_file> | -c <cfs_file>} [-d <sg_device>]
seaflashlin_i386 -f <fw_file> -d <sg_device>

Options:
    -i  PRINT IDENT INFO
    -v  PRINT VERSION AND EXIT (overrides all other arguments)
    -l  SHOW LICENSE
    -o  TIMEOUT VALUE (seconds)
    -x  TEST CFS FILE
Modes supported:
    -e  DEFERRED SIZE (ATA ONLY)
    -s  SEGMENT SIZE (1 segment = 512 bytes)
    -p  FORCE ATA PASSTHROUGH
    -w  FORCE WRITE BUFFER CMD
    -u  NON-SEGMENTED
e.g:
    seaflashlin_i386 -s 64 -f test.lod -d /dev/sg0
returns:
    0    No error found
    1    Fatal error in command line options
    2    FW Download Failed
    3    Invalid device

mint Desktop # ./seaflashlin -i

================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:20:52 2016
================================================================================
ATA       /dev/sg0 MN: ST2000NM0024-1HT174     SN: Z4H010XY             FW: SN02
PIONEER   /dev/sg1 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
PIONEER   /dev/sg2 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
SanDisk   /dev/sg3 MN: Cruzer Micro            SN:                      FW: 8.02

(Dies bestätigt, dass meine Firmware die SN02-Version ist und HD unter / dev / sg0 zu finden ist.)

Jetzt kann ich das BIOS flashen mit: (xxx.LOD = Firmware Festplatte)

mint Desktop # ./seaflashlin -f MakaraEntCapSATA-STD-512E-SN05.LOD -d /dev/sg0

================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:26:21 2016
================================================================================
Flashing microcode file MakaraEntCapSATA-STD-512E-SN05.LOD to /dev/sg0
 .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  :  !
Microcode Download to /dev/sg0 SUCCESSFUL

mint Desktop # ./seaflashlin -i
================================================================================
 Seagate Firmware Download Utility v0.4.6 Build Date: Oct 26 2015
 Copyright (c) 2014 Seagate Technology LLC, All Rights Reserved
 Thu Nov  3 11:26:45 2016
================================================================================
ATA       /dev/sg0 MN: ST2000NM0024-1HT174     SN: Z4H010XY             FW: SN05
PIONEER   /dev/sg1 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
PIONEER   /dev/sg2 MN: DVD-RW  DVR-221         SN:                      FW: 1.00
SanDisk   /dev/sg3 MN: Cruzer Micro            SN:                      FW: 8.02

die bestätigen, dass das BIOS von SN02 auf SN05 geändert wurde

Sehr gefährlich, verwenden Sie dies auf eigenes Risiko!

Viel Glück !


1

Sie können flashrom verwenden , um das BIOS eines Motherboards zu aktualisieren.

Beispiel (Abit KN9 Ultra):

Das Board ist ein AMD Athlon 64-Board mit AM2-Sockel und Nvidia-Chipsatz, das ab 2006 erhältlich ist. Es verfügt über einen austauschbaren 256-KB-Flash-Chip. Das BIOS ist mit "Award" gekennzeichnet, was anscheinend ein Warenzeichen von Phoenix ist.

Flashrom unterstützt diesen Chipsatz und diesen Flash-Chip.

Die Unterstützung kann mit einem Befehl wie dem folgenden getestet werden:

# flashrom --programmer internal
Calibrating delay loop... OK.
Found chipset "NVIDIA MCP55".
Enabling flash write... OK.
Enabling full flash access for board "abit KN9 Ultra"... OK.
Found PMC flash chip "Pm49FL004" (512 kB, LPC, FWH) mapped at physical address 0x00000000fff80000.

Es ist sinnvoll, zuerst den aktuellen Inhalt des Flash-Chips zu sichern:

# flashrom --programmer internal -c Pm49FL004 -r backup.bin

Es kann dann mit einer Vanille-Image-Datei des Herstellers verglichen werden (z . B. mit xxdund vimdiff).

Einige Unterschiede sind zu erwarten, da in einigen BIOS-Versionen auch zusätzliche Informationen (z. B. DMI) und Einstellungen (z. B. MAC-Adressen) im Flash gespeichert sind. Dies ist auch beim Abit KN9 Ultra der Fall. Die DMI-Daten werden in den ersten 1872 Bytes gespeichert - und können vom BIOS während des Startvorgangs problemlos neu generiert werden. Die MAC-Adressen werden am Offset 0x74E30 gespeichert.

Die Hersteller-Firmwaredateien werden in ein Zip-Archiv gepackt, das awdflash.exeeine BINDatei enthält , z M520A_23.BIN. In diesem Beispiel enthält die bin-Datei das BIOS-Image wie es ist, dh es kann direkt auf den Flash-Chip geschrieben werden.

# flashrom --programmer internal -c Pm49FL004 -w M520A_23.BIN

Calibrating delay loop... OK.
Found chipset "NVIDIA MCP55".
Enabling flash write... OK.
Enabling full flash access for board "abit KN9 Ultra"... OK.
Found PMC flash chip "Pm49FL004" (512 kB, LPC, FWH) mapped at physical address 0x00000000fff80000.
Reading old flash chip contents... done.
Erasing and writing flash chip... Erase/write done.
Verifying flash... VERIFIED.

Abhängig vom Update muss das CMOS möglicherweise für den nächsten Neustart gelöscht werden. Andernfalls startet das BIOS möglicherweise nicht. Auf dieser Karte kann der CMOS über eine Jumpereinstellung gelöscht werden. Ein Löschen per Software ist ebenfalls möglich (zB über CmosPwd ).

Um eindeutige Standard-MAC-Adressen beizubehalten, kann das neue Anbieter-Image vor dem Flashen gepatcht werden, z.

dd if=backup.bin of=mac.bin bs=1 count=16 skip=$(echo 16 i 74E30 p | dc)
dd if=mac.bin of=M520A_23_with_mac.bin bs=1 seek=$(echo 16 i 74E30 p | dc) \
   conv=notrunc

Tücken:

  • Das Flash-Schreiben kann aufgrund eines Motherboard-spezifischen Board-Aktivierungscodes (dh zum Deaktivieren des Schreibschutzes) fehlschlagen, der noch nicht von Flashrom implementiert wurde.

0

Meine kleine Erfahrung ist, dass ich Flashrom verwendet habe, um mein Intel Motherboard BIOS zu aktualisieren, und es hat gut funktioniert. Im Allgemeinen scheint es ein wirklich schönes Werkzeug zu sein.


Könnten Sie eine Beispielbefehlszeile posten, die Sie dafür verwendet haben?
Maxschlepzig

0

Die Verwendung einer DOS-Aktualisierungsdiskette, die mit GRUB wie oben erwähnt gebootet wurde, funktioniert für den Großteil der Hardware. In einigen Fällen finden Sie native Tools. Dell erstellt sogar Repositorys, die in das Distributionsverpackungssystem integriert sind:

http://linux.dell.com/wiki/index.php/Repository/firmware

Leider ist für die meisten Updates ein Neustart des Computers erforderlich.


0

Versuchen:

hdparm --fwdownload (UND SEHR VORSICHTIG!)

Seien Sie jedoch vorsichtig!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.