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?
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 .
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.
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
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:
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:
la source
Option bios dans
dmidecode
Lire la mémoire de
C:0000
àF:FFFF
sans avoir besoin de dmidecodela source
Cela a fonctionné pour moi dans VirtualBox:
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:
la source