Cara membuang data BIOS ke file

24

Saya ingin membuang data BIOS laptop saya ke file. Satu-satunya solusi yang saya temukan adalah perintah berikut:

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

Xdan Yberbeda dalam solusi yang disarankan oleh orang yang berbeda karena ada berbagai jenis BIOS.

Apakah ada cara untuk menemukan alamat pasti data BIOS /dev/mem? Dapatkah saya menggunakan dmidecodeuntuk menemukan kisaran alamat BIOS di memori? Dan apakah Linux membuang semua data BIOS dalam RAM atau hanya bagian khusus saja?

Jika Linux dapat membuang data BIOS ke RAM, dapatkah pengguna root juga mengakses BIOS secara langsung?

Omid
sumber

Jawaban:

20

Anda dapat mencoba menggunakan biosdecode.

Ini adalah utilitas baris perintah untuk mem-parsing memori BIOS dan mencetak informasi tentang semua struktur (atau titik masuk) yang diketahuinya. Ia menemukan informasi tentang perangkat keras seperti:

  • Perangkat IPMI
  • Jenis memori dan kecepatan
  • Informasi Sasis
  • Pemeriksaan suhu
  • Perangkat pendingin
  • Penyelidikan Arus Listrik
  • Informasi Prosesor dan Memori
  • Nomor serial
  • Versi BIOS
  • Slot dan Kecepatan PCIe / PCIe

dll.

Hal yang perlu dipertimbangkan:

  • biosdecodemem-parsing memori BIOS dan mencetak informasi tentang semua struktur.
  • Mengurai data BIOS sama dengan membuang DMI komputer . The meja DMI terutama menggambarkan apa sistem saat ini terbuat dari.
  • Data yang disediakan oleh biosdecodetidak dalam format yang dapat dibaca manusia.

Melihat konten di layar

Anda harus menggunakan dmidecodeperintah untuk membuang konten tabel DMI (SMBIOS) komputer di layar.

$ sudo dmidecode --type 0 

Cari halaman manual untuk informasi lebih lanjut:

$ man dmidecode

Ya, kernel hanya menyimpan informasi yang dibutuhkan dari BIOS di dalam RAM. Namun Anda dapat melakukan panggilan BIOS real-time dari pengguna root menggunakan aplikasi C yang mencakup ASM tertanam (kode Majelis), dll.

Anda dapat membaca lebih lanjut tentang kernel Linux dan BIOS sistem dalam artikel ini dari Linuxmagazine berjudul: Linux dan BIOS .

delta24
sumber
12

Saya pikir apa yang Anda cari flashrom. Asalkan sistem Anda didukung, Anda dapat membaca konten BIOS Anda dengan menerbitkan

# flashrom -r <outputfile>

Jika Anda hanya ingin menyimpan apa yang disebut CMOS RAM (ekstra-byte yang Anda simpan konfigurasi, seperti alarm di RTC et al) nvramdriver dan perangkat kernel mungkin membantu Anda:

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
sumber
Ini adalah saran yang bagus tetapi kemungkinan tidak akan berfungsi pada laptop Anda. Dukungan BIOS laptop 'kurang untuk perangkat lunak ini. Misalnya tidak akan berjalan pada laptop Thinkpad yang saya miliki (banyak model berbeda).
slm
10

Jika alat lain tidak tersedia atau tidak dapat digunakan, berikut adalah cara untuk membuat perkiraan terdidik tentang wilayah memori yang akan dibuang.

Misalnya, dari dalam VirtualBox VM, saya berhasil membuang BIOS-nya dengan melakukan:

$ 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
sumber
2
Bagaimana Anda tahu ukuran mana yang digunakan berdasarkan alamat memori?
unseen_rider
7

Opsi bios di dmidecode

dmidecode -t bios

Baca memori dari C:0000hingga F:FFFFtanpa perlu dmidecode

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

Ini bekerja untuk saya di VirtualBox:

$ grep ROM /proc/iomem

yang menghasilkan:
000c0000-000c7fff: ROM Video
000e2000-000e2fff: ROM Adapter
000f0000-000fffff: ROM Sistem

Sistem ROM dimulai pada 000f0000, yaitu 0xF0000.

Buka browser dan kunjungi http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 . Ini mengatakan nilai desimal adalah 983040, yang dibagi dengan 1024 untuk mendapatkan kilobyte adalah 960 yang merupakan titik awal dan nilai untuk 'lewati'.

Angka akhir adalah 0xFFFFF yaitu 1048575 yang hanya sedikit dari 1024. 1024 - 960 adalah 64, yang merupakan nilai 'hitung'.

Perintah untuk menjalankan dump BIOS adalah:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
Francois Thirion
sumber