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?
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 .
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.
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
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”.
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:
źródło
Opcja bios w
dmidecode
Czytaj pamięć od
C:0000
doF:FFFF
bez potrzeby używania kodu dmidecodeźródło
To działało dla mnie w VirtualBox:
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:
źródło