it-swarm-pt.com

Como atualizar o firmware no Linux na prática?

Bem, estou me sentindo muito velho para passar por vários obstáculos difíceis de atualizar vários firmwares através da forma usual de fornecedor específico: Baixe algumas ferramentas DOS, perca algum tempo criando um meio de inicialização (Free-) DOS e perdendo mais tempo para fazer o BIOS realmente inicialize a partir disso e, finalmente, faça o upgrade do firmware.

Isso é tão anos 1980.

Encontrei alguns ferramenta linux flash do projeto Coreboot . Parece suportar vários chips FLASH. Mas como isso funciona na prática?

Acho que existem algumas armadilhas ao converter atualizações de firmware fornecidas pelo fornecedor para o formato correto. Ou que tal identificar o chip de destino certo?

Atualmente, provavelmente terei que atualizar, por exemplo:

  • o firmware de alguns discos Seagate 1.5 TB discos
  • o firmware de uma placa Abit Athlon 64 antiga (BIOS Award)
  • Bios/Embedded-Controller-Bios de um Thinkpad

Como você atualiza o firmware dos seus dispositivos em um sistema Linux?

15
maxschlepzig

Piscando com FreeDOS, uma reinicialização e nenhum dispositivo removível

  1. Certifique-se de estar usando GRUB2 (verifique se você tem o pacote grub-pc Instalado no Ubuntu)
  2. Obtenha o MEMDISK do SYSLINUX. No Ubuntu, instale o pacote syslinux-common E seu memdisk residirá em /usr/lib/syslinux/memdisk
  3. Baixe fdboot.img , salve-o em seu diretório inicial ou em algum outro diretório que você possa digitar facilmente com um layout de teclado americano
  4. Incorpore seu software de flash na imagem 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.EXE E BIOS.IMG São exemplos)
    5. umount /mnt/floppy
  5. Inicialize seu sistema e interrompa-o no GRUB2 (pressione ESC)
  6. Pressione c para entrar na linha de comando do GRUB2.
  7. Carregar MEMDISK:
    1. Digite linux16 (hd. Agora pressione a guia. Uma lista de discos rígidos será exibida.
    2. Complete a escolha do disco rígido de forma que a linha diga linux16 (hd0,, Por exemplo.
    3. Pressione tab mais uma vez para obter uma lista de partições. Você precisa encontrar a partição onde seu /usr/lib/syslinux Está montado em sua instalação do Linux.
    4. Agora que você tem o disco rígido e a especificação da partição, pode completar o caminho de forma que fique assim: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Pressione Enter.
  8. Carregar FreeDOS:
    1. Use o mesmo preenchimento de tabulação para encontrar fdboot.img, Mas com o comando initrd16 Em vez de linux16. Você terminará com uma linha como esta: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Pressione Enter.
  9. Escreva boot e pressione enter.
  10. O menu de inicialização do FreeDOS aparecerá.
  11. Escolha a opção "modo de segurança", pois você não precisa dos drivers.
  12. No prompt do DOS, escreva o nome do executável do firmware, por exemplo: FLASH.EXE. Pressione Enter.
  13. Aguarde até que o piscar termine.
  14. O pisca-pisca do firmware pode inicializar a própria máquina ou você pode obter o prompt de volta. Se você receber o prompt de volta, pressione Control-Alt-Delete para reinicializar.
  15. Como você não alterou a configuração GRUB permanentemente, ele inicializará de volta ao seu sistema operacional padrão.

Se não houver espaço suficiente na imagem, use a menor imagem de chtaube.e . Descompacte a imagem e filtre-a embora xxd. Agora pesquise 55aa . Deve estar em 0x1fe. Você pode montar a imagem com offset=$((0x200)) como um sinalizador de montagem adicional. Esteja ciente de que a sintaxe $(()) é específica do Bash, mas também funcionará no Zsh.

Como alternativa, consulte https://www.fladi.at/posts/large-freedos-boot-image/

11
Janus Troelsen

Cada dispositivo com firmware atualizável provavelmente terá seus próprios métodos para fazer isso. As placas-mãe, em particular, são notoriamente incompatíveis nesse aspecto.

Quanto aos discos rígidos, novamente, é um assunto proprietário. Seagate fornece downloads de liveCDs e Windows para realizar atualizações de firmware, mas não ferramentas Linux ou Unix.

Você pode construir imagens inicializáveis para atualizações do BIOS Thinkpad que podem ser inicializadas a partir do GRUB.

Caso contrário, você apenas terá que verificar com o fabricante as ferramentas.

Por outro lado, se você estiver trabalhando com microcontroladores, muitas vezes pode programá-los com ferramentas bastante universais, embora ainda de forma limitada (por exemplo, os chips Atmel geralmente podem ser programados com avrdude).

7
greyfade

para vídeo Seagate de 3 TB (ST3000VX000-9YW1):

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

Eu atualizei com sucesso uma unidade Seagate Barracuda 7200.12 ST31000528AS (1TB SATA) com o seguinte método: ( Use por sua conta e risco !)

  1. Baixe o ISO da Seagate: http://www.seagate.com/staticfiles/support/downloads/firmware/Barracuda12-ALL-CC49.iso
  2. montar/extrair PH-CC49.ima do arquivo .iso
  3. dd o .ima para um pen drive USB: dd if=./PH-CC49.ima of=/dev/sdX bs=512k
  4. Desligue o computador e desconecte todas as unidades, exceto a (s) unidade (s) a serem atualizadas
  5. Inicialize a partir de um pen drive USB (isso inicializará no utilitário de atualização de firmware Seagate
  6. Siga as instruções simples na tela para atualizar a (s) unidade (s)
  7. Desligue, reconecte tudo e ligue

É isso aí! Sem Windows, sem CDs volumosos, sem edições do Grub, sem FreeDos, sem Windows .exe instáveis ​​(tentei, mas falhou com uma mensagem de erro obscura)

O crédito vai para a fonte: http://ubuntuaddicted.blogspot.ca/2014/10/seagate-firmware-flash-using-usb.html (encontrou-o pesquisando PH-CC49.ima)

3
Alecz

Para o meu Seagate ST2000NM0024-1HT174 eu fiz isso: baixei o firmware da Seagate e o armazenei em uma chave USB. reiniciei meu pc com um usb (ou dvd) do linux mint mate 17.3. e descompacte todos os utilitários seagate diretamente no Desktop. copiou um comando do firmware no Desktop e, em seguida, renomeou o comando seaflashlin_33_054 para mais simplesmente seaflashlin. Depois de abrir o terminal e escrever:

[email protected] ~ $ Sudo su    (enter in Superuser live mint)

mint mint # cd Desktop

mint Desktop # ./seaflashlin

bash: ./seaflashlin: Permission denied 

(Erro! Eu mudo o arquivo de permissão)

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

(isso confirma que meu firmware é da versão SN02 e HD está localizado em/dev/sg0)

Agora posso fazer o Flash do BIOS com: (xxx.LOD = disco rígido do 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 confirmam que o BIOS foi alterado de SN02 para SN05

Muito perigoso, use isso por sua própria conta e risco!

Boa sorte !

2
erikkssen

Você pode usar flashrom para atualizar o BIOS de uma placa-mãe.

Exemplo (Abit KN9 Ultra):

A placa é AMD Athlon 64, soquete AM2, chipset Nvidia, lançada em 2006. Ela tem um chip flash de 256 KB que é substituível. O BIOS é rotulado com 'Award', que parece ser uma marca comercial da Phoenix.

Flashrom suporta esse chipset e esse chip flash.

O suporte pode ser testado com um 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.

Faz sentido fazer backup do conteúdo atual do chip flash, primeiro:

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

Em seguida, ele pode ser comparado a um arquivo de imagem Vanilla do fornecedor (usando, por exemplo, xxd e vimdiff).

Algumas diferenças são esperadas - porque alguns BIOS 'também armazenam informações adicionais (por exemplo, DMI) e configuração (por exemplo, endereços MAC) no flash. Este também é o caso da Abit KN9 Ultra. Os dados DMI são armazenados nos primeiros 1872 bytes - e são facilmente regenerados pelo BIOS durante a inicialização. Os endereços MAC são armazenados no deslocamento 0x74E30.

Os arquivos de firmware do fornecedor são empacotados em um arquivo Zip que contém awdflash.exe e um arquivo BIN, por exemplo M520A_23.BIN. Neste exemplo, o arquivo bin contém a imagem do BIOS no estado em que se encontra, ou seja, pode ser escrito diretamente no chip flash com um 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.

Dependendo da atualização, pode ser necessário limpar o CMOS para a próxima reinicialização - caso contrário, o BIOS pode não inicializar. Nessa placa, o CMOS pode ser apagado por meio de uma configuração de jumper. A limpeza via software também é possível (por exemplo, via CmosPwd ).

Para manter endereços MAC padrão exclusivos, a imagem do novo fornecedor pode ser corrigida antes de piscar, por exemplo:

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

Armadilhas:

  • A gravação do flash pode falhar devido a um código específico da placa-mãe ativar a placa (ou seja, para desativar a proteção contra gravação) que ainda não foi implementado pelo flashrom.
1
maxschlepzig

Usar o disquete de atualização do DOS inicializado com GRUB como mencionado antes funciona para a maioria dos hardwares. Em alguns casos, você pode encontrar ferramentas nativas. A Dell ainda prepara repositórios que se integram ao sistema de empacotamento da distro:

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

Infelizmente, a maioria das atualizações requer a reinicialização da máquina para ser concluída.

0
zdzichu

Experimentar:

hdparm --fwdownload (E TENHA MUITO CUIDADO!)

No entanto, tenha cuidado!

0
Stoatwblr

Minha pequena experiência é que usei o Flashrom para atualizar o BIOS da minha placa-mãe Intel e funcionou bem. Em geral, parece uma ferramenta muito boa.

0
KellyClowers