Come eseguire il flashing del firmware su Linux in pratica?


15

Bene, mi sento troppo vecchio per saltare attraverso diversi cerchi in fiamme per aggiornare diversi firmware attraverso il solito modo specifico del fornitore: scarica alcuni strumenti DOS, perdi un po 'di tempo a creare un supporto di avvio DOS (gratuito) e sprecando più tempo a fare il BIOS effettivamente avviare da quello e infine aggiornare l'aggiornamento del firmware.

Sono gli anni '80.

Mi sono imbattuto in qualche strumento flash Linux dal progetto Coreboot . Sembra supportare vari chip FLASH. Ma come funziona in pratica?

Immagino che ci siano alcune insidie ​​nel convertire gli aggiornamenti del firmware forniti dal fornitore nel giusto formato. O che dire di identificare il chip di destinazione giusto?

Attualmente probabilmente devo aggiornare ad esempio:

  • il firmware di alcuni dischi Seagate da 1,5 TB
  • il firmware di una vecchia scheda Abit Athlon 64 (premio bios)
  • Bios / Embedded-Controller-Bios di un Thinkpad

Come si aggiorna il firmware dei dispositivi su un sistema Linux?

Risposte:


11

Lampeggiante con FreeDOS, un riavvio e nessun dispositivo rimovibile

  1. Assicurati di utilizzare GRUB2 (controlla se hai il pacchetto grub-pcinstallato su Ubuntu)
  2. Ottieni MEMDISK di SYSLINUX. Su Ubuntu, installa il pacchetto syslinux-commone il tuo memdisk risiederà/usr/lib/syslinux/memdisk
  3. Scarica fdboot.img , salvalo nella tua home directory o in qualche altra directory che puoi facilmente digitare con un layout di tastiera americano
  4. Incorpora il tuo software lampeggiante nell'immagine FreeDOS:
    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.EXEe BIOS.IMGsono esempi)
    5. umount /mnt/floppy
  5. Avviare il sistema e interromperlo in GRUB2 (premere ESC)
  6. Premere c per accedere alla riga di comando di GRUB2.
  7. Carica MEMDISK:
    1. Enter linux16 (hd. Ora premi tab. Verrà visualizzato un elenco di hard disk.
    2. Completa la scelta del disco rigido in modo che la riga indichi linux16 (hd0,, ad esempio.
    3. Premi ancora una volta la scheda per ottenere un elenco di partizioni. È necessario trovare la partizione su cui /usr/lib/syslinuxè montato nell'installazione di Linux.
    4. Ora avete le specifiche disco rigido e la partizione, è possibile completare il percorso in modo che assomiglia a questo: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Premere Invio.
  8. Carica FreeDOS:
    1. Usa lo stesso completamento della scheda per trovare fdboot.img, ma con il comando initrd16anziché linux16. Vi ritroverete con una linea come questa: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Premere Invio.
  9. Scrivi boote premi Invio.
  10. Apparirà il menu di avvio di FreeDOS.
  11. Scegli l'opzione "modalità provvisoria", poiché non hai bisogno dei driver.
  12. Nel prompt di DOS, scrivere il nome del firmware lampeggiante eseguibile, per esempio: FLASH.EXE. Premere Invio.
  13. Attendere il termine del lampeggio.
  14. Il lampeggiatore del firmware potrebbe avviare la macchina stessa oppure è possibile che venga visualizzato nuovamente il messaggio. Se ricevi nuovamente il prompt, premi Control-Alt-Canc per riavviare.
  15. Poiché non hai modificato la configurazione di GRUB in modo permanente, verrà riavviato nel tuo sistema operativo predefinito.

Se non c'è abbastanza spazio sull'immagine, usa l'immagine più piccola da chtaube.eu . Decomprimi l'immagine e filtrala però xxd. Ora cerca 55aa . Dovrebbe essere a 0x1fe. È possibile montare l'immagine con offset=$((0x200))come flag di montaggio aggiuntivo. Attenzione che la $(())sintassi è specifica di Bash, ma funzionerà anche in Zsh.

In alternativa, vedi https://www.fladi.at/posts/large-freedos-boot-image/


È necessario aggiornare la risposta esistente invece di duplicarla.
maxschlepzig,

Suggerirei di inserire quelle righe in grub.cfg per renderlo una voce di menu. È più facile copiarli e incollarli, o almeno ridigitare usando un vero editor di testo.
derobert,

@derobert: come posso trovare in modo affidabile il dispositivo Grub2 e l'ID di partizione? Dovresti saperlo se lo infili nella configurazione. Ecco perché il completamento della scheda è carino.
Janus Troelsen,

1
@derobert: sei sicuro di parlare di Grub2? Quel formato sembra Grub0. * Per me. Quando viene msdosanteposto? Cercherò di rispondere alla tua domanda se la pubblichi. Fammi sapere.
Janus Troelsen,

1
@ysangkok che è sia grub1 che grub2, msdos è solo il tipo di partizione ... Non ho una domanda da fare, pensavo che lo facessi ("Come posso trovare il dispositivo Grub2 e l'ID della partizione in modo affidabile?").
derobert,

7

Ogni dispositivo con firmware aggiornabile probabilmente avrà i propri metodi per farlo. Le schede madri in particolare sono notoriamente incompatibili al riguardo.

Per quanto riguarda i dischi rigidi, ancora una volta, questa è una questione di proprietà. Seagate fornisce LiveCD e download di Windows per eseguire aggiornamenti del firmware, ma non strumenti Linux o Unix.

È possibile creare immagini di avvio per gli aggiornamenti del BIOS Thinkpad che possono essere avviati da GRUB.

Altrimenti, dovrai solo verificare gli strumenti con il produttore.

D'altra parte, se stai lavorando con microcontrollori, puoi spesso programmarli con strumenti abbastanza universali, anche se ancora su base limitata (ad esempio, i chip Atmel possono essere programmati con avrdude).


6

per video Seagate da 3 TB (ST3000VX000-9YW1):

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

3

Ho eseguito correttamente il flashing di un'unità Barracuda 7200.12 ST31000528AS (1TB SATA) Seagate con il seguente metodo: ( Utilizzare a proprio rischio! )

  1. Scarica ISO da Seagate: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. monta / estrae PH-CC49.imadal file .iso
  3. dd .ima su una chiavetta USB: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Spegnere il computer e scollegare tutte le unità tranne le unità da lampeggiare
  5. Avvio da chiavetta USB (questo si avvierà nell'utility di aggiornamento del firmware Seagate
  6. Seguire le semplici istruzioni sullo schermo per eseguire il flashing delle unità
  7. Spegni, ricollega tutto e riaccendi

Questo è tutto! Nessun Windows, nessun CD ingombrante, nessuna modifica di Grub, nessun FreeDos, nessun file .exe di Windows instabile (l'ho provato ma non è riuscito con un oscuro messaggio di errore)

Il merito va alla fonte: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (trovato tramite la ricerca di PH-CC49.ima)


Voglio solo collegare la tua risposta a un'altra risposta che tu (assomigliavi alla stessa persona?) Hai dato altrove: linuxquestions.org/questions/linux-hardware-18/…
Peter Teoh

Sì, ero io a copiare e incollare la mia risposta su entrambi i siti. Ancora una volta, il credito va alla fonte.
Alecz,

2

Per il mio seagate ST2000NM0024-1HT174 l'ho fatto: scaricato il firmware da seagate e memorizzato in una chiave USB. riavviato il mio PC con un live usb (o dvd) di Linux Mate Mate 17.3. e decomprimere tutta l'utilità seagate direttamente sul desktop. copiato il firmware un comando sul desktop, quindi rinominato il comando seaflashlin_33_054 in più semplicemente seaflashlin Dopo aver aperto il terminale e scritto:

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

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(Errore! Cambio file di autorizzazione)

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

(questo conferma che il mio firmware è la versione SN02 e HD è localizzato in / dev / sg0)

Ora posso eseguire il flashing del BIOS con: (xxx.LOD = hard disk del firmware)

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

che confermano che il bios viene modificato da SN02 a SN05

Molto pericoloso, usalo a tuo rischio e pericolo!

In bocca al lupo !


1

Puoi usare flashrom per aggiornare il BIOS di una scheda madre.

Esempio (Abit KN9 Ultra):

La scheda è AMD Athlon 64, AM2 Socket, chipset Nvidia, rilasciato dal 2006. Ha un chip flash da 256 KB che è sostituibile. Il BIOS è etichettato con "Award", che sembra essere un marchio di Phoenix.

Flashrom supporta quel chipset e quel chip flash.

Il supporto può essere testato con un comando come:

# 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.

Ha senso eseguire il backup del contenuto corrente del chip flash, innanzitutto:

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

Quindi può essere confrontato con un file di immagine vaniglia dal fornitore (usando eg xxde vimdiff).

Si prevedono alcune differenze, poiché alcuni BIOS 'memorizzano anche informazioni aggiuntive (ad es. DMI) e configurazione (ad es. Indirizzi MAC) nella memoria flash. Questo è anche il caso di Abit KN9 Ultra. I dati DMI vengono archiviati nei primi 1872 byte e vengono facilmente rigenerati dal BIOS durante l'avvio. Gli indirizzi MAC sono memorizzati nell'offset 0x74E30.

I file del firmware del fornitore sono impacchettati nell'archivio zip che contiene awdflash.exee un BINfile, ad es M520A_23.BIN. In questo esempio, il file bin contiene l'immagine del BIOS così com'è, ovvero può essere scritto direttamente sul chip flash con un comando come:

# 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.

A seconda dell'aggiornamento, potrebbe essere necessario cancellare il CMOS per il successivo riavvio, altrimenti il ​​BIOS potrebbe non avviarsi. Su quella scheda il CMOS può essere cancellato tramite un'impostazione dei jumper. È anche possibile cancellare tramite software (ad es. Tramite CmosPwd ).

Per mantenere gli indirizzi MAC predefiniti univoci, è possibile applicare patch alla nuova immagine del fornitore prima di lampeggiare, ad esempio:

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

insidie:

  • La scrittura flash potrebbe non riuscire a causa di un codice di abilitazione della scheda madre specifico (ovvero per disabilitare la protezione da scrittura) che non è ancora implementato da Flashrom.

0

La mia piccola esperienza è che ho usato Flashrom per aggiornare il mio BIOS della scheda madre Intel e ha funzionato bene. In generale sembra uno strumento davvero carino.


Potresti pubblicare un esempio di riga di comando che hai usato per quello?
maxschlepzig,

0

L'utilizzo del floppy di aggiornamento DOS avviato con GRUB come menzionato prima funziona per la maggior parte dell'hardware. In alcuni casi puoi trovare strumenti nativi. Dell prepara persino repository che si integrano con il sistema di packaging distro:

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

Purtroppo, la maggior parte degli aggiornamenti richiede il riavvio della macchina per il completamento.


0

Provare:

hdparm --fwdownload (ED ESSERE MOLTO ATTENTO!)

Tuttavia, fai attenzione!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.