¿Cómo flashear firmware en Linux en la práctica?

15

Bueno, me siento demasiado viejo para saltar a través de varios aros ardientes para actualizar varios firmwares a través de la forma habitual específica del proveedor: descargue algunas herramientas de DOS, pierda algo de tiempo creando un medio de arranque de DOS (gratuito) y desperdiciando más tiempo para hacer el BIOS en realidad arrancar desde eso y finalmente actualizar la actualización del firmware.

Esto es tan de 1980.

Me encuentro con alguna herramienta de linux flash del proyecto Coreboot . Parece admitir varios chips FLASH. Pero, ¿cómo funciona en la práctica?

Supongo que hay algunas dificultades para convertir las actualizaciones de firmware suministradas por el proveedor al formato correcto. ¿O qué hay de identificar el chip de destino correcto?

Actualmente probablemente tenga que actualizar, por ejemplo:

  • El firmware de algunos discos Seagate 1.5 TB
  • El firmware de una antigua placa Abit Athlon 64 (BIOS de premio)
  • BIOS / Controlador integrado-BIOS de un Thinkpad

¿Cómo actualiza el firmware de sus dispositivos en un sistema Linux?

maxschlepzig
fuente

Respuestas:

11

Parpadea con FreeDOS, un reinicio y sin dispositivos extraíbles

  1. Asegúrese de estar utilizando GRUB2 (verifique si tiene el paquete grub-pcinstalado en Ubuntu)
  2. Obtenga el MEMDISK de SYSLINUX. En Ubuntu, instale el paquete syslinux-commony su memdisk residirá en/usr/lib/syslinux/memdisk
  3. Descargue fdboot.img , guárdelo en su directorio de inicio o en algún otro directorio que pueda escribir fácilmente con un diseño de teclado de EE. UU.
  4. Incruste su software de flasheo en la imagen de 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.EXEy BIOS.IMGson ejemplos)
    5. umount /mnt/floppy
  5. Arranque su sistema e interrumpa en el GRUB2 (presione ESC)
  6. Presione c para ingresar a la línea de comando de GRUB2.
  7. Cargar MEMDISK:
    1. Introduzca linux16 (hd. Ahora presiona tab. Se mostrará una lista de discos duros.
    2. Complete la opción de disco duro para que la línea diga linux16 (hd0,, por ejemplo.
    3. Presione tab una vez más para obtener una lista de particiones. Necesita encontrar la partición donde /usr/lib/syslinuxestá montado en su instalación de Linux.
    4. Ahora usted tiene la especificación de disco duro y partición, puede completar el camino para que se vea como esto: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Presione enter.
  8. Cargar FreeDOS:
    1. Use la misma pestaña de finalización para buscar fdboot.img, pero con el comando en initrd16lugar de linux16. Usted va a terminar con una línea como esta: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Presione enter.
  9. Escribe booty presiona enter.
  10. Aparecerá el menú de inicio de FreeDOS.
  11. Elija la opción "modo seguro", ya que no necesita los controladores.
  12. En el indicador de DOS, escriba el nombre de la actualización del firmware del ejecutable, por ejemplo: FLASH.EXE. Presione enter.
  13. Espere a que termine el parpadeo.
  14. El flasheador de firmware puede arrancar la máquina en sí, o puede que le devuelva el mensaje. Si recupera el mensaje, presione Control-Alt-Supr para reiniciar.
  15. Como no cambiaste la configuración de GRUB permanentemente, se reiniciará directamente en tu sistema operativo predeterminado.

Si no hay suficiente espacio en la imagen, use la imagen más pequeña de chtaube.eu . Sin embargo, descomprima la imagen y filtre xxd. Ahora busque 55aa . Debería ser a las 0x1fe. Puede montar la imagen con offset=$((0x200))una bandera de montaje adicional. Tenga en cuenta que la $(())sintaxis es específica de Bash, pero también funcionará en Zsh.

Alternativamente, vea https://www.fladi.at/posts/large-freedos-boot-image/

Janus Troelsen
fuente
Debería actualizar su respuesta existente en lugar de duplicarla.
maxschlepzig
Sugeriría poner esas líneas en grub.cfg para que sea una entrada de menú. Es más fácil copiarlos y pegarlos, o al menos volver a escribirlos con un editor de texto real.
derobert
@derobert: ¿Cómo encuentro el dispositivo Grub2 y la identificación de la partición de manera confiable? Necesitaría saber eso si lo incorpora a la configuración. Es por eso que la finalización de la pestaña es agradable.
Janus Troelsen
1
@derobert: ¿Estás seguro de que estás hablando de Grub2? Ese formato se parece a Grub0. * Para mí. ¿Cuándo se msdosantepone? Intentaré responder a tu pregunta si la publicas. Házmelo saber.
Janus Troelsen
1
@ysangkok es tanto grub1 como grub2, msdos es solo el tipo de partición ... No tengo una pregunta que hacer, pensé que sí ("¿Cómo encuentro el dispositivo Grub2 y la ID de partición de manera confiable?").
derobert
7

Es probable que cada dispositivo con firmware actualizable tenga sus propios métodos para hacerlo. Las placas base en particular son notoriamente incompatibles a este respecto.

En cuanto a los discos duros, nuevamente, este es un asunto patentado. Seagate proporciona liveCD y descargas de Windows para realizar actualizaciones de firmware, pero no herramientas de Linux o Unix.

Puede crear imágenes de arranque para las actualizaciones de Thinkpad BIOS que se pueden iniciar desde GRUB.

De lo contrario, solo tendrá que consultar con el fabricante las herramientas.

Por otro lado, si está trabajando con microcontroladores, a menudo puede programarlos con herramientas bastante universales, aunque todavía de forma limitada (por ejemplo, los chips Atmel generalmente se pueden programar con avrdude).

Greyfade
fuente
6

para video Seagate 3TB (ST3000VX000-9YW1):

sg_write_buffer -v -m 5 -I <FW file> <dev>
usuario30578
fuente
3

He flasheado con éxito una unidad Seagate Barracuda 7200.12 ST31000528AS (1TB SATA) con el siguiente método: (¡ Use bajo su propio riesgo! )

  1. Descargue ISO de Seagate: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. montar / extraer PH-CC49.imadel archivo .iso
  3. dd .ima a una memoria USB: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Apague la computadora y desconecte todas las unidades excepto las unidades que se actualizarán
  5. Arranque desde la unidad de memoria USB (esto arrancará en la utilidad de actualización de firmware de Seagate)
  6. Siga las instrucciones simples en pantalla para flashear las unidades
  7. Apague, vuelva a conectar todo y encienda

¡Eso es! Sin Windows, sin CD voluminosos, sin ediciones de Grub, sin FreeDos, sin archivos .exe de Windows escamosos (lo probé pero falló con un oscuro mensaje de error)

El crédito va a la fuente: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (lo encontró al buscar PH-CC49.ima)

Alecz
fuente
Solo quiero vincular su respuesta con otra respuesta que (¿parecía la misma persona?) Que
Peter Teoh
Sí, ese era yo copiando mi respuesta en ambos sitios. Nuevamente, el crédito va a la fuente.
Alecz 01 de
2

Para mi seagate ST2000NM0024-1HT174 lo he hecho: descargué el firmware de seagate y lo almacené en una clave usb. reinicié mi pc con un usb en vivo (o dvd) de linux mint mate 17.3. y descomprima todas las utilidades de Seagate directamente en el escritorio. Copié el firmware y un comando en el Escritorio, luego renombré el comando seaflashlin_33_054 a más simplemente seaflashlin Después de abrir el terminal y escribir:

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

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(¡Error! Cambio el archivo de permiso)

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

(esto confirma que mi firmware es la versión SN02 y HD se encuentra en / dev / sg0)

Ahora puedo actualizar la BIOS con: (xxx.LOD = disco duro 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

que confirman que la BIOS se cambia de SN02 a SN05

Muy peligroso, ¡usa esto bajo tu propio riesgo!

Buena suerte !

erikkssen
fuente
1

Puede usar flashrom para actualizar el BIOS de una placa base.

Ejemplo (Abit KN9 Ultra):

La placa es AMD Athlon 64, AM2 Socket, chipset Nvidia, lanzado desde 2006. Tiene un chip flash de 256 KB que es reemplazable. El BIOS está etiquetado con 'Award', que parece ser una marca registrada de Phoenix.

Flashrom admite ese conjunto de chips y ese chip flash.

El soporte se puede probar con un comando como:

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

Tiene sentido hacer una copia de seguridad del contenido actual del chip flash, primero:

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

Luego se puede comparar con un archivo de imagen original del proveedor (usando, por ejemplo, xxdy vimdiff).

Se esperan algunas diferencias, porque algunos BIOS también almacenan información adicional (por ejemplo, DMI) y configuración (por ejemplo, direcciones MAC) en la memoria flash. Este es también el caso con el Abit KN9 Ultra. Los datos DMI se almacenan en los primeros 1872 bytes, y el BIOS los vuelve a generar fácilmente durante el arranque. Las direcciones MAC se almacenan en el desplazamiento 0x74E30.

Los archivos de firmware del proveedor se empaquetan en un archivo zip que contiene awdflash.exey un BINarchivo, por ejemplo M520A_23.BIN. En este ejemplo, el archivo bin contiene la imagen del BIOS tal cual, es decir, se puede escribir directamente en el chip flash con un comando como:

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

Dependiendo de la actualización, puede ser necesario borrar el CMOS para el próximo reinicio; de lo contrario, es posible que el BIOS no se inicie. En esa placa, el CMOS se puede borrar mediante una configuración de puente. También es posible borrar a través del software (por ejemplo, a través de CmosPwd ).

Para mantener direcciones MAC predeterminadas únicas, la nueva imagen del proveedor se puede parchear antes de flashear, por ejemplo:

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

Trampas:

  • La escritura flash puede fallar debido a un código de habilitación de placa específica de la placa base (es decir, para deshabilitar la protección contra escritura) que aún no está implementado por flashrom.
maxschlepzig
fuente
0

Mi pequeña experiencia es que usé Flashrom para actualizar el BIOS de mi placa madre Intel y funcionó bien. En general parece una herramienta muy buena.

KellyClowers
fuente
¿Podría publicar una línea de comando de ejemplo que utilizó para eso?
maxschlepzig
0

Usar el disquete de actualización de DOS arrancado con GRUB como se mencionó anteriormente funciona para la mayoría del hardware. En algunos casos puedes encontrar herramientas nativas. Dell incluso prepara repositorios que se integran con el sistema de distribución de distribución:

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

Lamentablemente, la mayoría de las actualizaciones requieren reiniciar la máquina para completar.

zdzichu
fuente
0

Tratar:

hdparm --fwdownload (¡Y TENGA MUCHO CUIDADO!)

Sin embargo, ten cuidado!

Stoatwblr
fuente