Comment flasher le firmware sous Linux en pratique?

15

Eh bien, je me sens trop vieux pour sauter à travers plusieurs cerceaux de gravure pour mettre à niveau plusieurs firmwares via la méthode habituelle spécifique au fournisseur: téléchargez des outils DOS, perdez du temps à créer un support de démarrage DOS (gratuit) et perdez plus de temps à créer le BIOS réellement démarrer à partir de cela et enfin flasher la mise à niveau du firmware.

Il en est ainsi des années 80.

Je tombe sur un outil flash Linux du projet Coreboot . Il semble prendre en charge diverses puces FLASH. Mais comment ça marche dans la pratique?

Je suppose qu'il y a des écueils à convertir les mises à jour du firmware fournies par le fournisseur au bon format. Ou qu'en est-il de l'identification de la bonne puce de destination?

Actuellement, je dois probablement mettre à niveau par exemple:

  • le firmware de certains disques Seagate 1,5 To
  • le firmware d'une ancienne carte Abit Athlon 64 (Award bios)
  • Bios / Embedded-Controller-Bios d'un Thinkpad

Comment mettez-vous à niveau le micrologiciel de vos appareils sur un système Linux?

maxschlepzig
la source

Réponses:

11

Clignotant avec FreeDOS, un redémarrage et aucun périphérique amovible

  1. Assurez-vous que vous utilisez GRUB2 (vérifiez si le package est grub-pcinstallé sur Ubuntu)
  2. Obtenez le MEMDISK de SYSLINUX. Sur Ubuntu, installez le paquet syslinux-commonet votre memdisk résidera dans/usr/lib/syslinux/memdisk
  3. Téléchargez fdboot.img , enregistrez-le dans votre répertoire personnel ou dans un autre répertoire que vous pouvez facilement taper avec une disposition de clavier américaine
  4. Intégrez votre logiciel clignotant dans l'image 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.EXEet BIOS.IMGsont des exemples)
    5. umount /mnt/floppy
  5. Démarrez votre système et interrompez-le dans le GRUB2 (appuyez sur ESC)
  6. Appuyez sur c pour accéder à la ligne de commande de GRUB2.
  7. Charger MEMDISK:
    1. Entrez linux16 (hd. Appuyez maintenant sur tab. Une liste de disques durs s'affiche.
    2. Complétez le choix du disque dur pour que la ligne indique linux16 (hd0,, par exemple.
    3. Appuyez à nouveau sur tab pour obtenir une liste des partitions. Vous devez trouver la partition sur laquelle votre /usr/lib/syslinuxest monté dans votre installation Linux.
    4. Maintenant , vous avez la spécification et la partition disque dur, vous pouvez compléter le chemin afin qu'il ressemble à ceci: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Appuyez sur Entrée.
  8. Charger FreeDOS:
    1. Utilisez la même complétion d'onglet pour rechercher fdboot.img, mais avec la commande initrd16au lieu de linux16. Vous vous retrouverez avec une ligne comme ceci: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Appuyez sur Entrée.
  9. Écrivez bootet appuyez sur Entrée.
  10. Le menu de démarrage de FreeDOS apparaîtra.
  11. Choisissez l'option "mode sans échec", car vous n'avez pas besoin des pilotes.
  12. Dans l'invite DOS, écrivez le nom du firmware clignotant exécutable, par exemple: FLASH.EXE. Appuyez sur Entrée.
  13. Attendez la fin du clignotement.
  14. Le clignotant du micrologiciel peut démarrer la machine elle-même, ou vous pouvez récupérer l'invite. Si vous obtenez l'invite, appuyez sur Ctrl-Alt-Suppr pour redémarrer.
  15. Comme vous n'avez pas modifié la configuration de GRUB de manière permanente, il redémarrera directement dans votre système d'exploitation par défaut.

S'il n'y a pas assez d'espace sur l'image, utilisez la plus petite image de chtaube.eu . Décompressez l'image et filtrez-la cependant xxd. Recherchez maintenant 55aa . Cela devrait être à 0x1fe. Vous pouvez monter l'image avec offset=$((0x200))comme indicateur de montage supplémentaire. Attention, la $(())syntaxe est spécifique à Bash, mais fonctionnera également dans Zsh.

Alternativement, voir https://www.fladi.at/posts/large-freedos-boot-image/

Janus Troelsen
la source
Vous devez mettre à jour votre réponse existante au lieu de la dupliquer.
maxschlepzig
Je suggère de mettre ces lignes dans grub.cfg pour en faire une entrée de menu. Plus facile à copier et coller, ou au moins retaper à l'aide d'un véritable éditeur de texte.
derobert
@derobert: Comment trouver de manière fiable le périphérique Grub2 et l'ID de partition? Vous auriez besoin de savoir que si vous le faites cuire dans la config. C'est pourquoi la complétion des onglets est agréable.
Janus Troelsen
1
@derobert: Êtes-vous sûr de parler de Grub2? Ce format ressemble à Grub0. * Pour moi. Quand est-il msdosajouté? J'essaierai de répondre à votre question si vous la postez. Faites le moi savoir.
Janus Troelsen
1
@ysangkok c'est à la fois grub1 et grub2, msdos est juste le type de partition ... Je n'ai pas de question à poser, je pensais que vous l'avez fait ("Comment puis-je trouver le périphérique Grub2 et l'ID de partition de manière fiable?").
derobert
7

Chaque appareil doté d'un micrologiciel évolutif aura probablement ses propres méthodes pour le faire. Les cartes mères en particulier sont notoirement incompatibles à cet égard.

En ce qui concerne les disques durs, encore une fois, c'est une affaire de propriété. Seagate fournit des liveCD et des téléchargements Windows pour effectuer des mises à jour du firmware, mais pas des outils Linux ou Unix.

Vous pouvez créer des images amorçables pour les mises à jour du BIOS Thinkpad qui peuvent être amorcées à partir de GRUB.

Sinon, vous devrez simplement vérifier auprès du fabricant les outils.

D'un autre côté, si vous travaillez avec des microcontrôleurs, vous pouvez souvent les programmer avec des outils assez universels, mais toujours sur une base limitée (par exemple, les puces Atmel peuvent généralement être programmées avec avrdude).

gris-fondu
la source
6

pour la vidéo Seagate 3 To (ST3000VX000-9YW1):

sg_write_buffer -v -m 5 -I <FW file> <dev>
user30578
la source
3

J'ai réussi à flasher un disque Seagate Barracuda 7200.12 ST31000528AS (1 To SATA) avec la méthode suivante: ( Utilisez à vos risques et périls! )

  1. Téléchargez ISO depuis Seagate: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. monter / extraire PH-CC49.imadu fichier .iso
  3. dd le .ima sur une clé USB: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Éteignez l'ordinateur et déconnectez tous les lecteurs, à l'exception des lecteurs à flasher
  5. Démarrez à partir d'une clé USB (cela démarrera dans l'utilitaire de mise à jour du micrologiciel Seagate
  6. Suivez les instructions simples à l'écran pour flasher le (s) lecteur (s)
  7. Éteignez, reconnectez tout et rallumez

C'est ça! Pas de Windows, pas de CD volumineux, pas de modifications Grub, pas de FreeDos, pas de flasques Windows .exe (essayé mais il a échoué avec un message d'erreur obscur)

Le crédit va à la source: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (trouvé en recherchant PH-CC49.ima)

Alecz
la source
Je veux juste lier votre réponse à une autre réponse que vous (ressembliez à la même personne?) Avez
Peter Teoh
Oui, c'était moi copier-coller ma réponse sur les deux sites. Encore une fois, le mérite revient à la source.
Alecz
2

Pour mon seagate ST2000NM0024-1HT174, je l'ai fait: téléchargé le firmware de seagate et stocké dans une clé USB. redémarré mon PC avec une clé USB (ou un DVD) en direct de Linux Mint Mate 17.3. et décompressez tous les utilitaires seagate directement sur le bureau. copié le firmware une commande sur le bureau, puis renommé la commande seaflashlin_33_054 en plus simple seaflashlin Après avoir ouvert le terminal et écrit:

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

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(Erreur! Je change le fichier d'autorisation)

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

(cela confirme que mon firmware est la version SN02 et que HD est localisé dans / dev / sg0)

Maintenant, je peux flasher le bios avec: (xxx.LOD = disque dur du 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

qui confirment que le bios est changé de SN02 à SN05

Très dangereux, utilisez-le à vos risques et périls!

Bonne chance !

erikkssen
la source
1

Vous pouvez utiliser flashrom pour mettre à jour le BIOS d'une carte mère.

Exemple (Abit KN9 Ultra):

La carte est une carte AMD Athlon 64, un socket AM2, un chipset Nvidia, sorti en 2006. Il a une puce flash de 256 Ko qui est remplaçable. Le BIOS est étiqueté «Award», qui semble être la marque de commerce de Phoenix.

Flashrom prend en charge ce chipset et cette puce flash.

Le support peut être testé avec une commande comme:

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

Il est logique de sauvegarder le contenu actuel de la puce flash, d'abord:

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

Il peut ensuite être comparé à un fichier image vanille du fournisseur (en utilisant par exemple xxdetvimdiff ).

Certaines différences sont attendues - car certains BIOS stockent également des informations supplémentaires (par exemple DMI) et la configuration (par exemple les adresses MAC) dans le flash. C'est également le cas avec l'Abit KN9 Ultra. Les données DMI sont stockées dans les premiers 1872 octets - et sont facilement recréées par le BIOS lors du démarrage. Les adresses MAC sont stockées à l'offset 0x74E30.

Les fichiers du firmware du fournisseur sont emballés dans une archive zip qui contient awdflash.exeet un BINfichier, par exemple M520A_23.BIN. Dans cet exemple, le fichier bin contient l'image BIOS telle quelle, c'est-à-dire qu'il peut être directement écrit sur la puce flash avec une commande comme:

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

Selon la mise à jour, il peut être nécessaire d'effacer le CMOS pour le prochain redémarrage - sinon le BIOS pourrait ne pas démarrer. Sur cette carte, le CMOS peut être effacé via un réglage de cavalier. La suppression via un logiciel est également possible (par exemple via CmosPwd ).

Pour conserver les adresses MAC par défaut uniques, la nouvelle image du fournisseur peut être corrigée avant de clignoter, par exemple:

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

Pièges:

  • L'écriture flash peut échouer en raison d'un code d' activation de la carte mère spécifique (c'est-à-dire pour désactiver la protection en écriture) qui n'est pas encore implémenté par flashrom.
maxschlepzig
la source
0

Ma petite expérience est que j'ai utilisé Flashrom pour mettre à jour mon BIOS Intel Motherboard et cela a bien fonctionné. En général, cela semble être un outil vraiment sympa.

KellyClowers
la source
Pourriez-vous publier un exemple de ligne de commande que vous avez utilisé pour cela?
maxschlepzig
0

L'utilisation d'une disquette de mise à niveau DOS démarrée avec GRUB comme mentionné précédemment fonctionne pour la majorité du matériel. Dans certains cas, vous pouvez trouver des outils natifs. Dell prépare même des référentiels qui s'intègrent au système d'emballage de distribution:

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

Malheureusement, la plupart des mises à jour nécessitent un redémarrage de la machine pour se terminer.

zdzichu
la source
0

Essayer:

hdparm --fwdownload (ET SOYEZ TRÈS PRUDENT!)

Attention cependant!

Stoatwblr
la source