Como atualizar o firmware no Linux na prática?

15

Bem, estou me sentindo velho demais para pular vários aros para atualizar vários firmwares por meio da maneira usual do fornecedor: baixar algumas ferramentas do DOS, perder tempo criando um meio de inicialização DOS (Free-) e perder mais tempo para faça o BIOS inicializar a partir disso e finalmente atualize o firmware.

Isto é tão 1980-s.

Me deparei com uma ferramenta Flash do Linux do Projeto Coreboot . Parece apoiar vários chips FLASH. Mas como funciona na prática?

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

Atualmente, eu provavelmente tenho que atualizar, por exemplo:

  • o firmware de alguns discos de 1,5 TB da Seagate
  • o firmware de um antigo painel Abit Athlon 64 (Prêmio bios)
  • Bios / Embedded-Controller-BIOS de um Thinkpad

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

    
por maxschlepzig 12.09.2010 / 14:26

9 respostas

11

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

  1. Verifique se você está usando o 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. Faça o download fdboot.img , salve-o no seu diretório pessoal ou em algum outro diretório que você possa facilmente digitar com um layout de teclado nos EUA
  4. Incorpore seu software intermitente à imagem do 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á mostrada.
    2. Conclua a opção de disco rígido para que a linha diga linux16 (hd0, , por exemplo.
    3. Pressione a guia novamente para obter uma lista de partições. Você precisa encontrar a partição na qual o /usr/lib/syslinux está montado em sua instalação do Linux.
    4. Agora você tem o disco rígido e a especificação da partição, você pode concluir o caminho para que fique assim: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk . Pressione enter.
  8. Carregue o FreeDOS:
    1. Use a mesma conclusão de tabulação para encontrar fdboot.img , mas com o comando initrd16 em vez de linux16 . Você vai acabar 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 flash do firmware, por exemplo: FLASH.EXE . Pressione enter.
  13. Aguarde o flash terminar.
  14. O pisca-pisca do firmware pode inicializar a própria máquina ou você pode receber o prompt de volta. Se você receber o prompt de volta, pressione Control-Alt-Delete para reiniciar.
  15. Como você não alterou a configuração do GRUB permanentemente, ela será reinicializada no sistema operacional padrão.

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

Como alternativa, consulte link

    
por 26.07.2012 / 16:52
7

Todo dispositivo com firmware atualizável provavelmente terá seus próprios métodos para fazer isso. As motherboards em particular são notoriamente incompatíveis a este respeito.

Quanto aos discos rígidos, novamente, este é um assunto de propriedade. A Seagate fornece liveCDs e downloads do Windows para executar atualizações de firmware, mas não para Linux ou Unix ferramentas.

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

Caso contrário, você só precisará verificar com o fabricante as ferramentas.

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

    
por 13.09.2010 / 04:14
6

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

sg_write_buffer -v -m 5 -I <FW file> <dev>
    
por 19.01.2013 / 20:15
3

Eu exibi uma unidade Seagate Barracuda 7200.12 ST31000528AS (1TB SATA) com o seguinte método: ( Use a seu próprio risco! )

  1. Faça o download do ISO da Seagate: link
  2. monte / extraia PH-CC49.ima do arquivo .iso
  3. dd o .ima para um thumb-drive USB: %código%
  4. Desligue o computador e desconecte todas as unidades, exceto as unidades a serem acionadas
  5. Inicialize a partir da unidade USB-thumb (isso será inicializado no utilitário de atualização do Seagate Firmware
  6. Siga as instruções simples na tela para exibir a (s) unidade (s)
  7. Desligue, volte a ligar tudo e ligue

É isso! Sem Windows, sem CDs volumosos, sem edições no Grub, sem FreeDos, sem exagero .exe do Windows (tentei, mas falhou com uma mensagem de erro obscura)

O crédito vai para a fonte: link (encontrado por pesquisando PH-CC49.ima)

    
por 12.02.2015 / 04:50
2

Para minha Seagate ST2000NM0024-1HT174 eu fiz assim: baixado o firmware da seagate e armazenado em uma chave usb. reiniciei meu pc com um live usb (ou dvd) do linux mint mate 17.3. e descompacte todo o utilitário Seagate diretamente na área de trabalho. copiou o firmware de um comando na área de trabalho, em seguida, renomeou o comando seaflashlin_33_054 para mais simplesmente seaflashlin Depois de aberto o terminal e writed:

mint@mint ~ $ 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

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

Agora posso fazer o flash da 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 a BIOS é alterada de SN02 para SN05

Muito perigoso, use isso por sua conta e risco!

Boa sorte!

    
por 03.11.2016 / 15:02
1

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

Exemplo (Abit KN9 Ultra):

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

O 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 o 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 padrão 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 do Abit KN9 Ultra. Os dados da DMI são armazenados nos primeiros 1872 bytes - e são facilmente gerados novamente pelo BIOS durante a inicialização. Os endereços MAC são armazenados no offset 0x74E30.

Os arquivos de firmware do fornecedor são compactados em arquivo zip que contém o arquivo awdflash.exe e BIN , por exemplo, %código%. Neste exemplo, o arquivo bin contém a imagem do BIOS como está, ou seja, ele pode ser gravado diretamente do 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 comece. Naquela placa, o CMOS pode ser limpo por meio de uma configuração de jumper. A compensação por meio de software também é possível (por exemplo, CmosPwd ).

Para manter endereços MAC padrão exclusivos, a nova imagem do 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 em flash pode falhar devido a um quadro habilitar (ou seja, para desabilitar proteção contra gravação) específico da placa-mãe que não é implementado pelo flashrom, ainda.
por 23.02.2015 / 00:12
0

Minha pequena experiência é que eu usei o Flashrom para atualizar o BIOS da minha Motherboard Intel e funcionou bem. Em geral, parece uma ferramenta muito legal.

    
por 15.09.2010 / 07:00
0

O uso do disquete de atualização do DOS com o GRUB, como mencionado antes, funciona para a maioria dos hardwares. Em alguns casos, você pode encontrar ferramentas nativas. A Dell até prepara repositórios que se integram ao sistema de distribuição de distribuição:

link

Infelizmente, a maioria das atualizações exige a reinicialização da máquina para concluir.

    
por 15.09.2010 / 09:35
0

Tente:

hdparm --fwdownload (E SEJA MUITO CUIDADO!)

No entanto, tenha cuidado!

    
por 28.08.2013 / 18:07