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?
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 .
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.
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
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í:
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:
fuente
Opción de BIOS en
dmidecode
Lea la memoria de
C:0000
aF:FFFF
sin la necesidad de dmidecodefuente
Esto funcionó para mí en VirtualBox:
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í:
fuente