Como despejar dados do BIOS em um arquivo

20

Eu quero despejar os dados do BIOS do meu laptop para um arquivo. A única solução que encontrei é o seguinte comando:

dd if=/dev/mem bs=X skip=Y count=1

X e Y são diferentes nas soluções sugeridas por pessoas diferentes porque existem diferentes tipos de BIOS.

Existe uma maneira de encontrar o endereço exato dos dados da BIOS em /dev/mem ? Posso usar dmidecode para encontrar o intervalo de endereços do BIOS na memória? E o Linux faz o dump de todos os dados da BIOS na RAM ou apenas em uma parte especial?

Se o Linux pode descarregar dados do BIOS para a RAM, o usuário root também pode acessar o BIOS diretamente?

    
por Omid 23.04.2014 / 16:51

5 respostas

18

Você pode tentar usar biosdecode .

É um utilitário de linha de comando para analisar a memória da BIOS e imprime informações sobre todas as estruturas (ou pontos de entrada) de que ela conhece. Descobre informações sobre hardware como:

  • Dispositivo IPMI
  • Tipo de memória e velocidade
  • Informações do chassi
  • Sonda de temperatura
  • Dispositivo de resfriamento
  • Sonda de corrente elétrica
  • Informações do processador e da memória
  • Números de série
  • versão do BIOS
  • Slots PCI / PCIe e velocidade

etc.

Coisas a considerar:

  • biosdecode analisa a memória do BIOS e imprime as informações sobre todas as estruturas.
  • Decodificar dados BIOS é o mesmo que descarregar DMI de um computador. A tabela DMI descreve principalmente do que o sistema é feito atualmente.
  • Os dados fornecidos por biosdecode não estão em um formato legível por humanos.

Visualizando o conteúdo na tela

Você precisará usar o comando dmidecode para despejar o conteúdo da tabela DMI (SMBIOS) de um computador na tela.

$ sudo dmidecode --type 0 

Pesquise na página man para mais informações:

$ man dmidecode

Sim, o kernel mantém apenas as informações necessárias do BIOS na RAM. No entanto, você pode fazer chamadas de BIOS em tempo real a partir do usuário root usando aplicativos C que incluem o ASM (código de montagem) incorporado, etc.

Você pode ler mais sobre o kernel do Linux e um BIOS do sistema neste artigo da Linuxmagazine intitulado: Linux e o BIOS .

    
por 02.05.2014 / 19:24
11

Acho que o que você está procurando é flashrom . Desde que o seu sistema seja suportado, você pode ler o conteúdo do BIOS emitindo

# flashrom -r <outputfile>

Se você quiser apenas salvar o chamado CMOS RAM (os bytes extra que você salvar a configuração, como alarme no RTC et al), o driver e o dispositivo nvram do kernel podem ajudá-lo:

config NVRAM
     tristate "/dev/nvram support"
     depends on ATARI || X86 || (ARM && RTC_DRV_CMOS) || GENERIC_NVRAM
     ---help---
       If you say Y here and create a character special file /dev/nvram
       with major number 10 and minor number 144 using mknod ("man mknod"),
       you get read and write access to the extra bytes of non-volatile
       memory in the real time clock (RTC), which is contained in every PC
       and most Ataris.  The actual number of bytes varies, depending on the
       nvram in the system, but is usually 114 (128-14 for the RTC).

       This memory is conventionally called "CMOS RAM" on PCs and "NVRAM"
       on Ataris. /dev/nvram may be used to view settings there, or to
       change them (with some utility). It could also be used to frequently
       save a few bits of very important data that may not be lost over
       power-off and for which writing to disk is too insecure. Note
       however that most NVRAM space in a PC belongs to the BIOS and you
       should NEVER idly tamper with it. See Ralf Brown's interrupt list
       for a guide to the use of CMOS bytes by your BIOS.

       On Atari machines, /dev/nvram is always configured and does not need
       to be selected.

       To compile this driver as a module, choose M here: the
       module will be called nvram.
    
por 23.04.2014 / 18:06
8

Se outras ferramentas não estiverem disponíveis ou não puderem ser usadas, aqui está uma maneira de descobrir qual região da memória será despejada.

Por exemplo, de dentro de uma VM do VirtualBox, eu despejei seu BIOS com sucesso:

$ grep ROM /proc/iomem # https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-firmware-memmap
000c0000-000c7fff : Video ROM
000e2000-000e2fff : Adapter ROM
  000f0000-000fffff : System ROM
# dd if=/dev/mem of=pcbios.rom bs=64k skip=15 count=1 # 15*64k + 64k
    
por 05.12.2015 / 08:04
6

Option bios em dmidecode

dmidecode -t bios

Leia a memória de C:0000 para F:FFFF sem a necessidade de dmidecode

dd if=/dev/mem bs=1k skip=768  count=256 2>/dev/null | strings -n 8
    
por 04.05.2014 / 20:16
1

Isso funcionou para mim no VirtualBox:

$ grep ROM /proc/iomem

que resulta em:
000c0000-000c7fff: ROM de vídeo
000e2000-000e2fff: ROM do adaptador
000f0000-000fffff: ROM do sistema

A ROM do sistema começa em 000f0000, que é 0xF0000.

Abra o navegador e vá para link . Isto diz que o valor decimal é 983040, que dividido por 1024 para obter kilobytes é 960, que é o ponto de partida e o valor para 'skip'.

O número final é 0xFFFFF, que é 1048575, que é pouco mais que 1024. 1024 - 960 é 64, que é o valor de 'count'.

O comando para executar a descarga da bios é assim:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
    
por 15.03.2018 / 11:31

Tags