किसी फाइल में BIOS डेटा डंप कैसे करें


24

मैं अपने लैपटॉप के BIOS डेटा को फ़ाइल में डंप करना चाहता हूं। एकमात्र समाधान जो मुझे मिला वह निम्न आदेश है:

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

Xऔर Yविभिन्न लोगों द्वारा सुझाए गए समाधानों में भिन्न हैं क्योंकि अलग-अलग BIOS प्रकार हैं।

क्या BIOS डेटा का सटीक पता खोजने का कोई तरीका है /dev/mem? क्या मैं dmidecodeमेमोरी में BIOS की पता सीमा खोजने के लिए उपयोग कर सकता हूं ? और क्या लिनक्स सभी BIOS डेटा को रैम या इसके केवल एक विशेष भाग में डंप करता है?

यदि लिनक्स रैम को BIOS डेटा डंप कर सकता है, तो क्या रूट उपयोगकर्ता भी सीधे BIOS तक पहुंच सकता है?

जवाबों:


20

आप प्रयोग करके देख सकते हैं biosdecode

यह एक कमांड लाइन उपयोगिता है जो BIOS मेमोरी को पार्स करता है और सभी संरचनाओं (या प्रवेश बिंदु) के बारे में जानकारी प्रिंट करता है। यह हार्डवेयर के बारे में जानकारी जैसे:

  • IPMI डिवाइस
  • मेमोरी और गति का प्रकार
  • चेसिस की जानकारी
  • तापमान जांच
  • कूलिंग डिवाइस
  • विद्युत प्रवाह जांच
  • प्रोसेसर और मेमोरी सूचना
  • क्रम संख्याएँ
  • BIOS संस्करण
  • PCI / PCIe स्लॉट्स और स्पीड

आदि।

विचार करने के लिए बातें:

  • biosdecodeBIOS मेमोरी को पार्स करता है और सभी संरचनाओं के बारे में जानकारी प्रिंट करता है।
  • डिकोडिंग BIOS डेटा कंप्यूटर के DMI को डंप करने के समान है । डीएमआई तालिका मुख्य रूप से बताता है कि प्रणाली वर्तमान से बना है।
  • द्वारा प्रदान किया गया डेटा biosdecodeमानव-पठनीय प्रारूप में नहीं है।

स्क्रीन पर सामग्री देखना

आपको dmidecodeकंप्यूटर की DMI (SMBIOS) टेबल सामग्री को स्क्रीन पर डंप करने के लिए कमांड का उपयोग करना होगा ।

$ sudo dmidecode --type 0 

अधिक जानकारी के लिए मैन पेज खोजें:

$ man dmidecode

हां, कर्नेल को RAM में केवल उसी जानकारी की जरूरत होती है जो उसे BIOS से मिलती है। हालाँकि, आप C अनुप्रयोग का उपयोग करके रूट उपयोगकर्ता से वास्तविक-समय पर BIOS कॉल कर सकते हैं जिसमें एम्बेडेड ASM (असेंबली कोड), आदि शामिल हैं।

आप इस लेख में लिनक्स कर्नेल और सिस्टम के BIOS के बारे में और अधिक पढ़ सकते हैं: Linuxmagazine शीर्षक से: लिनक्स और BIOS


12

मुझे लगता है कि तुम क्या देख रहे हो flashrom। बशर्ते आपका सिस्टम समर्थित है, आप जारी करके अपने BIOS सामग्री को पढ़ सकते हैं

# flashrom -r <outputfile>

यदि आप केवल तथाकथित CMOS RAM (उन अतिरिक्त-बाइट्स को सहेजना चाहते हैं, जिन्हें RTC et al पर अलार्म की तरह सहेजना चाहते हैं) तो कर्नेल के nvramड्राइवर और डिवाइस आपकी मदद कर सकते हैं:

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.

यह एक अच्छा सुझाव है, लेकिन संभावना है कि यह आपके लैपटॉप पर काम नहीं करेगा। सॉफ्टवेयर के इस टुकड़े के लिए लैपटॉप BIOS 'के समर्थन की कमी है। उदाहरण के लिए यह किसी भी थिंकपैड लैपटॉप पर नहीं चलेगा, जो मेरे पास (कई अलग-अलग मॉडल) हैं।
SLM

10

यदि अन्य उपकरण उपलब्ध नहीं हैं या उनका उपयोग नहीं किया जा सकता है, तो यहां एक शिक्षित अनुमान लगाने का एक तरीका है कि मेमोरी को किस क्षेत्र में डंप किया जाए।

उदाहरण के लिए, एक वर्चुअलबॉक्स वीएम के भीतर से, मैंने सफलतापूर्वक इसके BIOS को डंप करके किया:

$ 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
आपको कैसे पता चलेगा कि मेमोरी पतों के आधार पर किन आकारों का उपयोग करना है?
अनदेखी

7

में विकल्प बायोस dmidecode

dmidecode -t bios

से स्मृति पढ़ें C:0000करने के लिए F:FFFFdmidecode की आवश्यकता के बिना

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

3

यह मेरे लिए VirtualBox में काम किया:

$ grep ROM /proc/iomem

जिसके परिणामस्वरूप:
000c0000-000c7fff: वीडियो ROM
000e2000-000e2fff: एडाप्टर ROM
000f0000-000fffff: सिस्टम ROM

सिस्टम ROM 000f0000 पर शुरू होता है, जो 0xF0000 है।

ब्राउज़र खोलें और http://www.hexadecimaldEDIA.com/hexadecimal/0xF0000 पर जाएं । यह कहता है कि दशमलव मान 983040 है, जिसे किलोबाइट पाने के लिए 1024 द्वारा विभाजित किया गया है, जो 960 है जो शुरुआती बिंदु है और 'स्किप' के लिए मूल्य है।

अंतिम संख्या 0xFFFFF है जो 1048575 है जो कि केवल 1024 से शर्मीली है। 1024 - 960 64 है, जो 'गिनती' का मान है।

बायोस को डंप करने के लिए चलाने की कमांड इस प्रकार है:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.