Come scaricare i dati del BIOS in un file


24

Voglio scaricare i dati del BIOS del mio laptop in un file. L'unica soluzione che ho trovato è il seguente comando:

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

Xe Ydifferiscono nelle soluzioni suggerite da persone diverse perché esistono diversi tipi di BIOS.

C'è un modo per trovare l'indirizzo esatto dei dati del BIOS in /dev/mem? Posso usare dmidecodeper trovare l'intervallo di indirizzi del BIOS in memoria? E Linux scarica tutti i dati del BIOS nella RAM o solo una parte speciale di esso?

Se Linux è in grado di scaricare i dati del BIOS su RAM, anche l'utente root può accedere direttamente al BIOS?

Risposte:


20

Puoi provare a usare biosdecode.

È un'utilità della riga di comando per analizzare la memoria del BIOS e stampare informazioni su tutte le strutture (o punti di ingresso) di cui è a conoscenza. Trova informazioni sull'hardware come:

  • Dispositivo IPMI
  • Tipo di memoria e velocità
  • Informazioni sul telaio
  • Sonda di temperatura
  • Dispositivo di raffreddamento
  • Sonda di corrente elettrica
  • Informazioni sul processore e sulla memoria
  • Numeri seriali
  • Versione del BIOS
  • Slot PCI / PCIe e velocità

eccetera.

Cose da considerare:

  • biosdecodeanalizza la memoria del BIOS e stampa le informazioni su tutte le strutture.
  • La decodifica dei dati del BIOS equivale a scaricare il DMI di un computer . La tabella DMI descrive principalmente di cosa è composto il sistema.
  • I dati forniti da biosdecodenon sono in un formato leggibile dall'uomo.

Visualizzazione dei contenuti sullo schermo

Sarà necessario utilizzare il dmidecodecomando per scaricare sullo schermo il contenuto della tabella DMI (SMBIOS) di un computer.

$ sudo dmidecode --type 0 

Cerca nella pagina man per maggiori informazioni:

$ man dmidecode

Sì, il kernel conserva solo le informazioni di cui ha bisogno dal BIOS nella RAM. Tuttavia, è possibile effettuare chiamate BIOS in tempo reale dall'utente root utilizzando le applicazioni C che includono ASM incorporato (codice assembly), ecc.

Puoi leggere ulteriori informazioni sul kernel di Linux e sul BIOS di un sistema in questo articolo di Linuxmagazine intitolato: Linux and the BIOS .


12

Penso che quello che stai cercando sia flashrom. A condizione che il sistema sia supportato, è possibile leggere il contenuto del BIOS emettendo

# flashrom -r <outputfile>

Se vuoi solo salvare la cosiddetta RAM CMOS (quei byte extra in cui salvi la configurazione, come l'allarme su RTC e altri), il nvramdriver e il dispositivo del kernel potrebbero aiutarti:

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.

Questo è un buon suggerimento ma probabilmente non funzionerà sul tuo laptop. Il supporto del BIOS del laptop 'manca per questo software. Ad esempio, non funzionerebbe su nessun laptop Thinkpad che possiedo (molti modelli diversi).
slm

10

Se altri strumenti non sono disponibili o non possono essere utilizzati, ecco un modo per indovinare quale regione di memoria scaricare.

Ad esempio, all'interno di una VM VirtualBox, ho scaricato correttamente il suo BIOS facendo:

$ 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

2
Come fai a sapere quali dimensioni utilizzare in base agli indirizzi di memoria?
unseen_rider,

7

BIOS di opzione in dmidecode

dmidecode -t bios

Leggi la memoria da C:0000a F:FFFFsenza la necessità di dmidecode

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

3

Questo ha funzionato per me in VirtualBox:

$ grep ROM /proc/iomem

che risulta in:
000c0000-000c7fff: ROM video
000e2000-000e2fff: ROM adattatore
000f0000-000fffff: ROM di sistema

La ROM di sistema inizia da 000f0000, ovvero 0xF0000.

Apri il browser e vai a http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Questo dice che il valore decimale è 983040, che diviso 1024 per ottenere i kilobyte è 960 che è il punto di partenza e il valore per 'skip'.

Il numero finale è 0xFFFFF che è 1048575 che è appena timido di 1024. 1024 - 960 è 64, che è il valore di 'count'.

Il comando da eseguire per scaricare il BIOS è quindi:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.