Jak zrzucić dane systemu BIOS do pliku

24

Chcę zrzucić dane BIOS mojego laptopa do pliku. Jedyne znalezione przeze mnie rozwiązanie to następujące polecenie:

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

Xi Yróżnią się sugerowanymi rozwiązaniami różnych osób, ponieważ istnieją różne typy systemu BIOS.

Czy istnieje sposób na znalezienie dokładnego adresu danych BIOS-u /dev/mem? Czy mogę użyć, dmidecodeaby znaleźć zakres adresów BIOS w pamięci? I czy Linux zrzuca wszystkie dane BIOS-u w pamięci RAM, czy tylko jego specjalną część?

Jeśli Linux może zrzucić dane BIOS-u do pamięci RAM, czy użytkownik root może również uzyskać bezpośredni dostęp do BIOS-u?

Omid
źródło

Odpowiedzi:

20

Możesz spróbować użyć biosdecode.

Jest to narzędzie wiersza poleceń do analizowania pamięci BIOS i drukowania informacji o wszystkich znanych strukturach (lub punktach wejścia). Znajduje informacje o sprzęcie, takie jak:

  • Urządzenie IPMI
  • Rodzaj pamięci i szybkość
  • Informacje o podwoziu
  • Sonda temperatury
  • Urządzenie chłodzące
  • Sonda prądu elektrycznego
  • Informacje o procesorze i pamięci
  • Numer seryjny
  • Wersja systemu BIOS
  • Gniazda i szybkość PCI / PCIe

itp.

Rzeczy do rozważenia:

  • biosdecodeanalizuje pamięć BIOS i drukuje informacje o wszystkich strukturach.
  • Dekodowanie danych BIOS-u jest takie samo jak zrzut DMI komputera . Stół DMI opisuje głównie co system jest obecnie wykonana.
  • Dane dostarczone przez biosdecodenie są w formacie czytelnym dla człowieka.

Wyświetlanie zawartości na ekranie

Będziesz musiał użyć dmidecodepolecenia do zrzucenia zawartości tabeli DMI komputera (SMBIOS) na ekranie.

$ sudo dmidecode --type 0 

Przeszukaj stronę podręcznika, aby uzyskać więcej informacji:

$ man dmidecode

Tak, jądro przechowuje w pamięci RAM tylko potrzebne informacje z BIOS-u. Można jednak wykonywać połączenia BIOS w czasie rzeczywistym od użytkownika root przy użyciu aplikacji C, które zawierają wbudowany ASM (kod asemblera) itp.

Możesz przeczytać więcej o jądrze Linuksa i systemie BIOS w tym artykule z Linuxmagazine zatytułowanym: Linux and BIOS .

delta24
źródło
12

Myślę, że to, czego szukasz flashrom. Pod warunkiem, że twój system jest obsługiwany, możesz odczytać zawartość BIOS-u poprzez wydanie

# flashrom -r <outputfile>

Jeśli chcesz tylko zapisać tak zwaną pamięć CMOS RAM (te dodatkowe bajty, w których zapisujesz konfigurację, takie jak alarm w RTC i in.), nvramSterownik i urządzenie jądra mogą ci pomóc:

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
źródło
To dobra sugestia, ale prawdopodobnie nie będzie działać na twoim laptopie. W przypadku tego oprogramowania nie ma obsługi BIOS-u laptopa. Na przykład nie działałby na żadnym laptopie Thinkpad, który posiadam (wiele różnych modeli).
slm
10

Jeśli inne narzędzia nie są dostępne lub nie można ich użyć, oto sposób, aby w wyrafinowany sposób odgadnąć, który region pamięci należy zrzucić.

Na przykład z poziomu maszyny wirtualnej VirtualBox z powodzeniem zrzuciłem BIOS, wykonując:

$ 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
źródło
2
Skąd wiesz, jakich rozmiarów użyć na podstawie adresów pamięci?
unseen_rider
7

Opcja bios w dmidecode

dmidecode -t bios

Czytaj pamięć od C:0000do F:FFFFbez potrzeby używania kodu dmidecode

dd if=/dev/mem bs=1k skip=768  count=256 2>/dev/null | strings -n 8
Totti
źródło
3

To działało dla mnie w VirtualBox:

$ grep ROM /proc/iomem

co powoduje:
000c0000-000c7fff: ROM ROM
000e2000-000e2fff: ROM ROM adaptera
000f0000-000fffff: ROM systemowy

Systemowa pamięć ROM zaczyna się od 000f0000, czyli 0xF0000.

Otwórz przeglądarkę i przejdź do strony http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Oznacza to, że wartość dziesiętna to 983040, która podzielona przez 1024, aby uzyskać kilobajty, to 960, która jest punktem początkowym i wartością „pominięcia”.

Końcowy numer to 0xFFFFF, który wynosi 1048575, a więc po prostu nie ma 1024. 1024 - 960 to 64, co jest wartością „count”.

Polecenie uruchomienia, aby zrzucić bios to:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
Francois Thirion
źródło