Cómo volcar datos de BIOS en un archivo

24

Quiero volcar los datos del BIOS de mi computadora portátil a un archivo. La única solución que encontré es el siguiente comando:

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

Xy Yson diferentes en las soluciones sugeridas por diferentes personas porque hay diferentes tipos de BIOS.

¿Hay alguna manera de encontrar la dirección exacta de los datos del BIOS /dev/mem? ¿Puedo usar dmidecodepara encontrar el rango de direcciones de BIOS en la memoria? ¿Y Linux descarga todos los datos del BIOS en la RAM o solo una parte especial?

Si Linux puede volcar los datos del BIOS en la RAM, ¿puede el usuario raíz acceder también al BIOS directamente?

Omid
fuente

Respuestas:

20

Puedes intentar usarlo biosdecode.

Es una utilidad de línea de comandos que analiza la memoria del BIOS e imprime información sobre todas las estructuras (o puntos de entrada) que conoce. Encuentra información sobre hardware como:

  • Dispositivo IPMI
  • Tipo de memoria y velocidad
  • Información del chasis
  • Probeta de temperatura
  • Dispositivo de enfriamiento
  • Sonda de corriente eléctrica
  • Información del procesador y la memoria
  • Números seriales
  • Versión del BIOS
  • Ranuras y velocidad PCI / PCIe

etc.

Cosas para considerar:

  • biosdecodeanaliza la memoria del BIOS e imprime la información sobre todas las estructuras.
  • Decodificar los datos del BIOS es lo mismo que descargar el DMI de una computadora . La tabla DMI describe principalmente de qué está hecho actualmente el sistema.
  • Los datos proporcionados por biosdecodeno están en un formato legible para humanos.

Ver los contenidos en pantalla

Deberá usar el dmidecodecomando para descargar el contenido de la tabla DMI (SMBIOS) de una computadora en la pantalla.

$ sudo dmidecode --type 0 

Busque en la página del manual para obtener más información:

$ man dmidecode

Sí, el núcleo guarda solo la información que necesita del BIOS en la RAM. Sin embargo, puede realizar llamadas de BIOS en tiempo real desde el usuario raíz utilizando aplicaciones C que incluyen ASM incrustado (código de ensamblaje), etc.

Puede leer más sobre el kernel de Linux y el BIOS de un sistema en este artículo de la revista Linux titulada: Linux and the BIOS .

delta24
fuente
12

Creo que lo que estás buscando es flashrom. Siempre que su sistema sea compatible, puede leer el contenido de su BIOS emitiendo

# flashrom -r <outputfile>

Si solo desea guardar la llamada RAM CMOS (esos bytes adicionales en los que guarda la configuración, como la alarma en RTC y otros), el nvramcontrolador y el dispositivo del núcleo pueden ayudarlo:

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.
Andreas Wiese
fuente
Esta es una buena sugerencia, pero probablemente no funcione en su computadora portátil. Falta el soporte del BIOS de la computadora portátil para este software. Por ejemplo, no funcionaría en ninguna computadora portátil Thinkpad que posea (muchos modelos diferentes).
slm
10

Si otras herramientas no están disponibles o no se pueden usar, aquí hay una manera de hacer una suposición informada sobre qué región de memoria volcar.

Por ejemplo, desde dentro de una VM VirtualBox, descargué su BIOS con éxito al hacer:

$ 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
ack
fuente
2
¿Cómo sabe qué tamaños usar según las direcciones de memoria?
unseen_rider
7

Opción de BIOS en dmidecode

dmidecode -t bios

Lea la memoria de C:0000a F:FFFFsin la necesidad de dmidecode

dd if=/dev/mem bs=1k skip=768  count=256 2>/dev/null | strings -n 8
totti
fuente
3

Esto funcionó para mí en VirtualBox:

$ grep ROM /proc/iomem

que da como resultado:
000c0000-000c7fff: ROM de video
000e2000-000e2fff: ROM de adaptador
000f0000-000fffff: ROM del sistema

La ROM del sistema comienza en 000f0000, que es 0xF0000.

Abra el navegador y vaya a http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Esto dice que el valor decimal es 983040, que dividido por 1024 para obtener kilobytes es 960, que es el punto de partida y el valor para 'saltar'.

El número final es 0xFFFFF, que es 1048575, que es poco menos que 1024. 1024 - 960 es 64, que es el valor de 'contar'.

El comando para ejecutar para volcar la BIOS es así:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
Francois Thirion
fuente