BIOS verilerini bir dosyaya yazma


24

Dizüstü bilgisayarımın BIOS verilerini bir dosyaya aktarmak istiyorum. Bulduğum tek çözüm şu komuttur:

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

Xve Yfarklı çözümler tarafından önerilen çözümlerde farklılıklar vardır çünkü farklı BIOS tipleri vardır.

BIOS verilerinin tam adresini bulmanın bir yolu var mı /dev/mem? dmidecodeBIOS adres aralığını bellekte bulmak için kullanabilir miyim ? Ve Linux tüm BIOS verilerini RAM'e mi yoksa sadece özel bir bölümüne mi atıyor?

Linux, BIOS verilerini RAM'e gönderebiliyorsa, kök kullanıcı BIOS'a doğrudan erişebilir mi?

Yanıtlar:


20

Kullanmayı deneyebilirsiniz biosdecode.

BIOS belleğini ayrıştırmak ve bildiği tüm yapılar (veya giriş noktaları) hakkında bilgi basmak bir komut satırı yardımcı programıdır. Gibi donanım hakkında bilgi bulur:

  • IPMI Cihazı
  • Hafıza türü ve hız
  • Şasi Bilgisi
  • Sıcaklık probu
  • Soğutma cihazı
  • Elektrik Akımı Probu
  • İşlemci ve Bellek Bilgisi
  • Seri numaraları
  • BIOS sürümü
  • PCI / PCIe Yuvaları ve Hız

vb.

Düşünülmesi gereken şeyler:

  • biosdecodeBIOS belleğini ayrıştırır ve tüm yapılar hakkındaki bilgileri yazdırır.
  • BIOS verilerinin kodunun çözülmesi , bilgisayarın DMI'sini boşaltmakla aynıdır . DMI tablo esas Sistem şu anda neyden yapıldığını açıklar.
  • Tarafından sağlanan veriler biosdecodeinsan tarafından okunabilir bir biçimde değildir.

İçeriği ekranda görüntüleme

dmidecodeBir bilgisayarın DMI (SMBIOS) tablo içeriğini ekrana bırakmak için komutu kullanmanız gerekir .

$ sudo dmidecode --type 0 

Daha fazla bilgi için man sayfasını arayın:

$ man dmidecode

Evet, çekirdek RAM'deki BIOS'tan yalnızca ihtiyaç duyduğu bilgileri tutar. Bununla birlikte, yerleşik ASM (Assembly code) vb. İçeren C uygulamalarını kullanarak kök kullanıcıdan gerçek zamanlı BIOS çağrıları yapabilirsiniz.

Linux çekirdeği ve bir sistemin BIOS'u hakkında daha fazla bilgiyi Linuxmagazine: Linux ve BIOS başlıklı makaleden okuyabilirsiniz .


12

Sanırım aradığın şey flashrom. Sisteminizin desteklenmesi koşuluyla, BIOS içeriğinizi yayınlayarak okuyabilirsiniz.

# flashrom -r <outputfile>

Yalnızca CMOS RAM (RTC ve diğerleri üzerindeki alarm gibi yapılandırmayı kaydettiğiniz ekstra baytlar) kaydetmek istiyorsanız, çekirdeğin nvramsürücüsü ve aygıtı size yardımcı olabilir:

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.

Bu iyi bir öneri ama muhtemelen dizüstü bilgisayarınızda işe yaramaz. Dizüstü bilgisayar BIOS'unun desteği bu yazılım parçası için eksik. Örneğin, sahip olduğum herhangi bir Thinkpad dizüstü bilgisayarda çalışmaz (birçok farklı model).
slm

10

Eğer diğer araçlar mevcut değilse veya kullanılamıyorsa, hangi hafıza bölgesini boşaltacağı konusunda eğitimli bir tahmin yapmanın yolu budur.

Örneğin, bir VirtualBox VM içinden, BIOS’u başarıyla yaparak şunları yaptım:

$ 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
Bellek adreslerine göre hangi boyutları kullanacağınızı nasıl biliyorsunuz?
unseen_rider

7

Seçenek bios girişi dmidecode

dmidecode -t bios

Dan hafızayı oku C:0000için F:FFFFdmidecode ihtiyaç duymadan

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

3

Bu VirtualBox benim için çalıştı:

$ grep ROM /proc/iomem

hangi sonuçlarla sonuçlanır:
000c0000-000c7fff: Video ROM
000e2000-000e2fff: Adaptör ROM
000f0000-000fffff: Sistem ROM'u

Sistem ROM'u, 0xF0000 olan 000f0000 ile başlar.

Tarayıcıyı açıp http://www.hexadecimaldictionary.com/hexadecimal/0xF0000 adresine gidin . Bu, ondalık değerin 983040 olduğunu, kilobayt almak için 1024'e bölünen 960 olduğunu ve bunun başlangıç ​​noktası olduğunu ve 'atlama' için değer olduğunu söylüyor.

Son sayı 1048575 olan 0xFFFFF'dir ve 1024'e yalnızca utangaçtır. 1024 - 960, 64'dür ve 'sayım' değeridir.

Bu nedenle, biosları terk etmek için çalıştırılacak komut şöyledir:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.