Comment vider les données du BIOS dans un fichier

24

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

Xet Ysont 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 dmidecodepour trouver la plage d'adresses du BIOS en mémoire? Et Linux décharge-t-il toutes les données du BIOS dans la 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?

Omid
la source

Réponses:

20

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:

  • biosdecodeanalyse la mémoire du BIOS et imprime les informations sur toutes les structures.
  • Le décodage des données du BIOS revient à vider le DMI d' un ordinateur . Le tableau DMI décrit principalement la composition actuelle du système.
  • Les données fournies par biosdecodene sont pas dans un format lisible par l'homme.

Affichage du contenu à l'écran

Vous devrez utiliser la dmidecodecommande 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 .

delta24
la source
12

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 ne souhaitez enregistrer que ce que l'on appelle la RAM CMOS (les octets supplémentaires dans lesquels vous enregistrez la configuration, comme l'alarme sur RTC et al), le nvrampilote et le périphérique 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.
Andreas Wiese
la source
Ceci est une bonne suggestion, mais ne fonctionnera probablement pas sur votre ordinateur portable. Le support du BIOS des ordinateurs portables fait défaut pour ce logiciel. Par exemple, il ne fonctionnerait pas sur les ordinateurs portables Thinkpad que je possède (de nombreux modèles différents).
slm
10

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 la 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
ack
la source
2
Comment savez-vous quelles tailles utiliser en fonction des adresses mémoire?
unseen_rider
7

Option bios dans dmidecode

dmidecode -t bios

Lire la mémoire de C:0000à F:FFFFsans avoir besoin de dmidecode

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

Cela a fonctionné pour moi dans VirtualBox:

$ grep ROM /proc/iomem

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

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

Ouvrez le navigateur et accédez à http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . 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
François Thirion
la source