So speichern Sie BIOS-Daten in einer Datei

24

Ich möchte die BIOS-Daten meines Laptops in eine Datei speichern. Die einzige Lösung, die ich gefunden habe, ist der folgende Befehl:

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

Xund Yunterscheiden sich in Lösungsvorschlägen von unterschiedlichen Personen, da es unterschiedliche BIOS-Typen gibt.

Gibt es eine Möglichkeit, die genaue Adresse der BIOS-Daten in zu finden /dev/mem? Kann ich dmidecodeden Adressbereich des BIOS im Speicher finden? Und speichert Linux alle BIOS-Daten im RAM oder nur einen speziellen Teil davon?

Kann der Root-Benutzer auch direkt auf das BIOS zugreifen, wenn Linux BIOS-Daten in den RAM sichern kann?

Omid
quelle

Antworten:

20

Sie können versuchen, mit biosdecode.

Es ist ein Befehlszeilendienstprogramm, das den BIOS-Speicher analysiert und Informationen zu allen ihm bekannten Strukturen (oder Einstiegspunkten) ausgibt. Es findet Informationen über Hardware wie:

  • IPMI-Gerät
  • Speicherart und Geschwindigkeit
  • Gehäuseinformationen
  • Temperaturfühler
  • Kühlgerät
  • Stromsonde
  • Prozessor- und Speicherinformationen
  • Seriennummer
  • BIOS-Version
  • PCI / PCIe-Steckplätze und Geschwindigkeit

etc.

Dinge, die man beachten muss:

  • biosdecodeAnalysiert den BIOS- Speicher und druckt die Informationen zu allen Strukturen.
  • Das Dekodieren von BIOS- Daten entspricht dem Speichern des DMI eines Computers . Die DMI-Tabelle beschreibt hauptsächlich, woraus das System derzeit besteht.
  • Die von zur Verfügung gestellten Daten biosdecodesind nicht in einem für Menschen lesbaren Format.

Anzeigen des Inhalts auf dem Bildschirm

Sie müssen den dmidecodeBefehl verwenden, um den Inhalt der DMI-Tabelle (SMBIOS) eines Computers auf dem Bildschirm zu sichern.

$ sudo dmidecode --type 0 

Suchen Sie in der Manpage nach weiteren Informationen:

$ man dmidecode

Ja, der Kernel speichert nur die vom BIOS benötigten Informationen im RAM. Sie können jedoch Echtzeit-BIOS-Aufrufe vom Root-Benutzer mit C-Anwendungen ausführen, die eingebetteten ASM (Assembly-Code) usw. enthalten.

Weitere Informationen zum Linux-Kernel und zum BIOS eines Systems finden Sie in diesem Artikel aus dem Linuxmagazin mit dem Titel: Linux and the BIOS .

delta24
quelle
12

Ich denke, was Sie suchen, ist flashrom. Sofern Ihr System unterstützt wird, können Sie Ihren BIOS-Inhalt durch Ausgabe lesen

# flashrom -r <outputfile>

Wenn Sie nur das sogenannte CMOS-RAM speichern möchten (die zusätzlichen Bytes, in denen Sie die Konfiguration speichern, z. B. Alarm bei RTC usw. ), können der nvramTreiber und das Gerät des Kernels hilfreich sein:

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
quelle
Dies ist ein guter Vorschlag, funktioniert aber wahrscheinlich nicht auf Ihrem Laptop. Für diese Software fehlt die Unterstützung des Laptop-BIOS. Zum Beispiel würde es nicht auf irgendwelchen Thinkpad-Laptops laufen, die ich besitze (viele verschiedene Modelle).
slm
10

Wenn andere Tools nicht verfügbar sind oder nicht verwendet werden können, können Sie hier eine fundierte Vermutung anstellen, welche Speicherregion gesichert werden soll.

Zum Beispiel habe ich in einer VirtualBox-VM das BIOS folgendermaßen erfolgreich gesichert:

$ 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
quelle
2
Woher wissen Sie, welche Größen basierend auf den Speicheradressen verwendet werden sollen?
unseen_rider
7

Option BIOS in dmidecode

dmidecode -t bios

Lesen Sie den Speicher von C:0000bis, F:FFFFohne dmidecode zu benötigen

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

Das hat bei mir in VirtualBox geklappt:

$ grep ROM /proc/iomem

was ergibt:
000c0000-000c7fff: Video-ROM
000e2000-000e2fff: Adapter-ROM
000f0000-000fffff: System-ROM

Das System-ROM beginnt bei 000f0000 (0xF0000).

Öffnen Sie den Browser und gehen Sie zu http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Dies besagt, dass der Dezimalwert 983040 ist, geteilt durch 1024, um Kilobyte zu erhalten, 960, was der Startpunkt und der Wert für 'überspringen' ist.

Die Endnummer ist 0xFFFFF, was 1048575 ist, was nur 1024 scheut. 1024 - 960 ist 64, was der Wert von 'count' ist.

Der Befehl zum Ausführen, um das BIOS zu entleeren, lautet wie folgt:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
François Thirion
quelle