Quero despejar os dados do BIOS do meu laptop em um arquivo. A única solução que encontrei é o seguinte comando:
dd if=/dev/mem bs=X skip=Y count=1
Xe Ysã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 do BIOS /dev/mem? Posso usar dmidecodepara encontrar o intervalo de endereços do BIOS na memória? E o Linux despeja todos os dados do BIOS na RAM ou apenas uma parte especial?
Se o Linux pode despejar dados do BIOS na RAM, o usuário root também pode acessar o BIOS diretamente?
É um utilitário de linha de comando para analisar a memória do BIOS e imprimir informações sobre todas as estruturas (ou pontos de entrada) que conhece. Ele encontra informações sobre hardware, como:
Dispositivo IPMI
Tipo de memória e velocidade
Informações do chassi
Sonda de temperatura
Dispositivo de refrigeração
Sonda de corrente elétrica
Informações sobre processador e memória
Números de série
Versão do BIOS
Slots e velocidade PCI / PCIe
etc.
Coisas a considerar:
biosdecodeanalisa a memória do BIOS e imprime as informações sobre todas as estruturas.
Decodificar dados do BIOS é o mesmo que descarregar a DMI de um computador . A tabela DMI descreve principalmente de que o sistema é composto atualmente.
Os dados fornecidos por biosdecodenão estão em um formato legível por humanos.
Visualizando o conteúdo na tela
Você precisará usar o dmidecodecomando para despejar o conteúdo da tabela DMI (SMBIOS) de um computador na tela.
$ sudo dmidecode --type 0
Pesquise a página do manual para obter 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 ASM (código de montagem) incorporado etc.
Você pode ler mais sobre o kernel do Linux e o BIOS de um sistema neste artigo da Linuxmagazine intitulado: Linux and the BIOS .
Eu 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ê deseja salvar apenas a chamada RAM CMOS (os bytes extras em que você salva a configuração, como o alarme no RTC et al), o nvramdriver e o dispositivo 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.
Essa é uma boa sugestão, mas provavelmente não funcionará no seu laptop. Falta o suporte do BIOS do laptop para este software. Por exemplo, ele não roda em nenhum laptop Thinkpad que eu possuo (muitos modelos diferentes).
Slm
10
Se outras ferramentas não estiverem disponíveis ou não puderem ser usadas, aqui está uma maneira de adivinhar qual a região da memória a ser despejada.
Por exemplo, de dentro de uma VM do VirtualBox, eu despejei seu BIOS com êxito, fazendo:
$ 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
Se outras ferramentas não estiverem disponíveis ou não puderem ser usadas, aqui está uma maneira de adivinhar qual a região da memória a ser despejada.
Por exemplo, de dentro de uma VM do VirtualBox, eu despejei seu BIOS com êxito, fazendo:
fonte
BIOS de opções em
dmidecode
Leia a memória de
C:0000
paraF:FFFF
sem a necessidade de dmidecodefonte
Isso funcionou para mim no VirtualBox:
que resulta em:
000c0000-000c7fff: ROM de vídeo
000e2000-000e2fff: ROM do adaptador
000f0000-000fffff: ROM do sistema
A ROM do sistema inicia em 000f0000, que é 0xF0000.
Abra o navegador e acesse http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Isso indica que o valor decimal é 983040, dividido por 1024 para obter kilobytes, 960, que é o ponto de partida e o valor de 'ignorar'.
O número final é 0xFFFFF, que é 1048575, que é apenas 1024. 1024 - 960 é 64, que é o valor de 'count'.
O comando a ser executado para despejar o BIOS é assim:
fonte