web-dev-qa-db-fra.com

Comment vider les données du BIOS dans un fichier

Je veux vider les données du BIOS de mon ordinateur portable dans un fichier. La seule solution que j'ai trouvée est la commande suivante:

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

X et Y sont différentes dans les solutions suggérées par différentes personnes car il existe différents types de BIOS.

Existe-t-il un moyen de trouver l'adresse exacte des données du BIOS dans /dev/mem? Puis-je utiliser dmidecode pour trouver la plage d'adresses du BIOS en mémoire? Et Linux décharge-t-il toutes les données du BIOS dans RAM ou juste une partie spéciale de celui-ci?

Si Linux peut vider les données du BIOS dans la RAM, l'utilisateur root peut-il également accéder directement au BIOS?

25
Omid

Vous pouvez essayer d'utiliser biosdecode.

Il s'agit d'un utilitaire de ligne de commande pour analyser la mémoire du BIOS et imprimer des informations sur toutes les structures (ou points d'entrée) qu'il connaît. Il trouve des informations sur le matériel telles que:

  • Périphérique IPMI
  • Type de mémoire et vitesse
  • Informations sur le châssis
  • Sonde de température
  • Dispositif de refroidissement
  • Sonde de courant électrique
  • Informations sur le processeur et la mémoire
  • Numéros de série
  • Version du BIOS
  • Emplacements PCI/PCIe et vitesse

etc.

Choses à considérer:

  • biosdecode analyse la mémoire [~ # ~] bios [~ # ~] et affiche les informations sur toutes les structures.
  • Le décodage [~ # ~] du bios [~ # ~] équivaut à vider un ordinateur [~ # ~] dmi [~ # ~] . La table DMI décrit principalement la composition actuelle du système.
  • Les données fournies par biosdecode ne sont pas dans un format lisible par l'homme.

Affichage du contenu à l'écran

Vous devrez utiliser la commande dmidecode pour vider le contenu de la table DMI (SMBIOS) d'un ordinateur à l'écran.

$ Sudo dmidecode --type 0 

Recherchez la page de manuel pour plus d'informations:

$ man dmidecode

Oui, le noyau conserve uniquement les informations dont il a besoin du BIOS dans la RAM. Cependant, vous pouvez effectuer des appels BIOS en temps réel à partir de l'utilisateur root à l'aide d'applications C qui incluent l'ASM intégré (code d'assemblage), etc.

Vous pouvez en savoir plus sur le noyau Linux et le BIOS d'un système dans cet article de Linuxmagazine intitulé: Linux et le BIOS .

20
delta24

Je pense que ce que vous cherchez est flashrom . À condition que votre système soit pris en charge, vous pouvez lire le contenu de votre BIOS en émettant

# flashrom -r <outputfile>

Si vous souhaitez uniquement enregistrer la soi-disant RAM CMOS (les octets supplémentaires dans lesquels vous enregistrez la configuration, comme l'alarme sur RTC et al) le pilote et le périphérique nvram du noyau peuvent vous aider:

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.
12
Andreas Wiese

Si d'autres outils ne sont pas disponibles ou ne peuvent pas être utilisés, voici un moyen de faire une estimation éclairée de la région de mémoire à vider.

Par exemple, à partir d'une machine virtuelle VirtualBox, j'ai réussi à vider son BIOS en faisant:

$ 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
10
ack

Option bios dans dmidecode

dmidecode -t bios

Lisez la mémoire de C:0000 à F:FFFF sans besoin de dmidecode

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

Cela a fonctionné pour moi dans VirtualBox:

$ grep ROM /proc/iomem

ce qui se traduit par:
000c0000-000c7fff: ROM vidéo
000e2000-000e2fff: ROM de l'adaptateur
000f0000-000fffff: ROM système

Système ROM commence à 000f0000, qui est 0xF0000.

Ouvrez le navigateur et accédez à http://www.hexadecimaldictionary.com/hexadecimal/0xF00 . Cela signifie que la valeur décimale est 983040, divisée par 1024 pour obtenir des kilo-octets, soit 960, qui est le point de départ et la valeur pour "ignorer".

Le numéro de fin est 0xFFFFF qui est 1048575 qui est juste timide de 1024. 1024 - 960 est 64, qui est la valeur de 'count'.

La commande à exécuter pour vider le bios est donc:

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