Como atualizar o firmware no Linux na prática?

15

Bem, estou me sentindo velho demais para passar por vários obstáculos para atualizar vários firmwares através da maneira usual específica do fornecedor: Faça o download de algumas ferramentas do DOS, gaste algum tempo criando um meio de inicialização do DOS (gratuito) e perdendo mais tempo para fazer o BIOS realmente inicialize a partir disso e, finalmente, atualize a atualização do firmware.

Isso é tão anos 80.

Me deparei com alguma ferramenta flash linux do projeto Coreboot . Parece suportar vários chips FLASH. Mas como isso funciona na prática?

Eu acho que existem algumas armadilhas que convertem as atualizações de firmware fornecidas pelo fornecedor no formato certo. Ou que tal identificar o chip de destino certo?

Atualmente, eu provavelmente tenho que atualizar, por exemplo:

  • o firmware de alguns discos Seagate de 1,5 TB
  • o firmware de uma placa antiga Abit Athlon 64 (biografias de prêmios)
  • BIOS / BIOS de controlador incorporado de um Thinkpad

Como você atualiza o firmware do seu dispositivo em um sistema Linux?

maxschlepzig
fonte

Respostas:

11

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

  1. Verifique se você está usando o GRUB2 (verifique se você tem o pacote grub-pcinstalado no Ubuntu)
  2. Se apossar do MEMDISK do SYSLINUX. No Ubuntu, instale o pacote syslinux-commone seu memdisk residirá em/usr/lib/syslinux/memdisk
  3. Faça o download do arquivo fdboot.img , salve-o em seu diretório pessoal ou em outro diretório que você possa digitar facilmente com um layout de teclado americano
  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.EXEe BIOS.IMGsã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. Enter linux16 (hd. Agora pressione tab. Uma lista de discos rígidos será exibida.
    2. Conclua a opção do disco rígido para que a linha diga linux16 (hd0,, por exemplo.
    3. Pressione tab novamente para obter uma lista de partições. Você precisa encontrar a partição em que /usr/lib/syslinuxestá montada na instalação do Linux.
    4. Agora você tem a especificação de disco rígido e partição, você pode completar o caminho para que ele se parece com isso: linux16 (hd0,msdos3)/usr/lib/syslinux/memdisk. Pressione Enter.
  8. Carregar FreeDOS:
    1. Use a mesma conclusão da guia para encontrar fdboot.img, mas com o comando em initrd16vez de linux16. Você vai acabar com uma linha como esta: initrd16 (hd0,msdos3)/home/janus/fdboot.img. Pressione Enter.
  9. Escreva boote 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 firmware piscar executável, por exemplo: FLASH.EXE. Pressione Enter.
  13. Aguarde o piscar para terminar.
  14. O pisca-pisca de 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á inicializada novamente 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 xxd. Agora pesquise 55aa . Deveria estar em 0x1fe. Você pode montar a imagem offset=$((0x200))como um sinalizador de montagem adicional. Cuidado 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/

Janus Troelsen
fonte
Você deve atualizar sua resposta existente em vez de duplicá-la.
26412 maxschlepzig
Eu sugeriria colocar essas linhas no grub.cfg para torná-lo uma entrada de menu. É mais fácil copiá-los e colá-los, ou pelo menos redigitar usando um editor de texto real.
5263 derobert
@derobert: Como encontro o ID do dispositivo e da partição Grub2 de maneira confiável? Você precisaria saber que, se estiver assando na configuração. É por isso que a conclusão da guia é boa.
Janus Troelsen
1
@derobert: Tem certeza de que está falando sobre o Grub2? Esse formato parece o Grub0. * Para mim. Quando é msdosanexado? Tentarei responder sua pergunta se você publicá-la. Avise-se me.
Janus Troelsen
1
@ysangkok, que é o grub1 e o grub2, o msdos é apenas o tipo de partição ... Não tenho uma pergunta a fazer, pensei que sim ("Como encontro o ID do dispositivo e da partição do Grub2 de maneira confiável?").
Derebert
7

Todo 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 sentido.

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

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

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

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

greyfade
fonte
6

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

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

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

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

É isso aí! Sem Windows, sem CD volumoso, sem edições do Grub, sem FreeDos, sem exageros do Windows .exe (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 (encontrado através da pesquisa em PH-CC49.ima)

Alecz
fonte
(? Parecia a mesma pessoa) só quer vincular sua resposta a outra resposta que você deu em outro lugar: linuxquestions.org/questions/linux-hardware-18/...
Peter Teoh
Sim, fui eu que copiei minha resposta nos dois sites. Novamente, o crédito vai para a fonte.
Alecz
2

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

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

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

Agora posso atualizar o 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 do SN02 para SN05

Muito perigoso, use isso por sua conta e risco!

Boa sorte !

erikkssen
fonte
1

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

Exemplo (Abit KN9 Ultra):

A placa é a placa AMD Athlon 64, chipset AM2 Socket, Nvidia, lançada em 2006. Possui um chip flash de 256 KB que é substituível. O BIOS está rotulado com 'Award', que parece ser uma marca comercial 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 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 de baunilha do fornecedor (usando, por exemplo, xxde vimdiff).

Algumas diferenças são esperadas - porque algumas 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 do DMI são armazenados nos primeiros 1872 bytes - e são facilmente gerados 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.exee um BINarquivo, por exemplo M520A_23.BIN. Neste exemplo, o arquivo bin contém a imagem do BIOS como está, ou seja, pode ser gravada 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 iniciar. Nessa placa, o CMOS pode ser limpo através de uma configuração de jumper. A limpeza por software também é possível (por exemplo, via 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 do flash pode falhar devido a um código de habilitação da placa- mãe específico (ou seja, para desativar a proteção contra gravação) que ainda não foi implementado pelo flashrom.
maxschlepzig
fonte
0

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

KellyClowers
fonte
Você poderia postar um exemplo de linha de comando usada para isso?
Maxschlepzig 15/09
0

O uso do disquete de atualização do DOS inicializado com o GRUB, conforme mencionado anteriormente, funciona para a maioria do hardware. Em alguns casos, você pode encontrar ferramentas nativas. A Dell ainda prepara repositórios que se integram ao sistema de distribuição de pacotes:

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

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

zdzichu
fonte
0

Experimentar:

hdparm --fwdownload (E tenha muito cuidado!)

No entanto, tenha cuidado!

Stoatwblr
fonte