วิธีการถ่ายโอนข้อมูล BIOS ไปยังไฟล์


24

ฉันต้องการถ่ายโอนข้อมูล BIOS ของแล็ปท็อปไปยังไฟล์ ทางออกเดียวที่ฉันพบคือคำสั่งต่อไปนี้:

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

XและYแตกต่างกันในโซลูชันที่แนะนำโดยบุคคลอื่นเนื่องจากมีประเภท BIOS แตกต่างกัน

มีวิธีการค้นหาที่อยู่ที่แน่นอนของข้อมูล BIOS /dev/memหรือไม่? ฉันสามารถใช้dmidecodeเพื่อหาช่วงที่อยู่ของ BIOS ในหน่วยความจำได้หรือไม่? และ Linux จะถ่ายโอนข้อมูล BIOS ทั้งหมดใน RAM หรือเพียงส่วนพิเศษของมันหรือไม่?

หาก Linux สามารถถ่ายโอนข้อมูล BIOS ไปยัง RAM ผู้ใช้รูทสามารถเข้าถึง BIOS ได้โดยตรงหรือไม่

คำตอบ:


20

biosdecodeคุณสามารถลองใช้

มันเป็นยูทิลิตี้บรรทัดคำสั่งที่จะแยกวิเคราะห์หน่วยความจำ BIOS และพิมพ์ข้อมูลเกี่ยวกับโครงสร้างทั้งหมด (หรือจุดเข้า) มันรู้ ค้นหาข้อมูลเกี่ยวกับฮาร์ดแวร์เช่น:

  • อุปกรณ์ IPMI
  • ประเภทของหน่วยความจำและความเร็ว
  • ข้อมูลแชสซี
  • โพรบวัดอุณหภูมิ
  • อุปกรณ์ระบายความร้อน
  • เครื่องวัดกระแสไฟฟ้า
  • ข้อมูลโปรเซสเซอร์และหน่วยความจำ
  • หมายเลขซีเรียล
  • รุ่น BIOS
  • สล็อต PCI / PCIe และความเร็ว

เป็นต้น

สิ่งที่ต้องพิจารณา:

  • biosdecodeแยกวิเคราะห์หน่วยความจำBIOSและพิมพ์ข้อมูลเกี่ยวกับโครงสร้างทั้งหมด
  • ถอดรหัสไบออสข้อมูลที่เป็นเช่นเดียวกับการทุ่มตลาดของคอมพิวเตอร์DMI ตาราง DMIส่วนใหญ่อธิบายว่าระบบที่ทำในปัจจุบัน
  • ข้อมูลที่จัดทำโดยbiosdecodeไม่อยู่ในรูปแบบที่มนุษย์สามารถอ่านได้

ดูเนื้อหาบนหน้าจอ

คุณจะต้องใช้dmidecodeคำสั่งเพื่อทิ้งเนื้อหาตาราง DMI (SMBIOS) ของคอมพิวเตอร์บนหน้าจอ

$ sudo dmidecode --type 0 

ค้นหา man page สำหรับข้อมูลเพิ่มเติม:

$ man dmidecode

ใช่เคอร์เนลจะเก็บเฉพาะข้อมูลที่ต้องการจาก BIOS ใน RAM อย่างไรก็ตามคุณสามารถทำการเรียก BIOS แบบเรียลไทม์จากผู้ใช้รูทโดยใช้แอปพลิเคชัน C ซึ่งรวมถึง ASM แบบฝัง (รหัสแอสเซมบลี) ฯลฯ

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับลินุกซ์เคอร์เนลและระบบไบออสในบทความนี้จาก Linuxmagazine หัวข้อ: ลินุกซ์และไบออส


12

flashromผมคิดว่าสิ่งที่คุณกำลังมองหาอยู่ หากระบบของคุณรองรับคุณสามารถอ่านเนื้อหา BIOS ของคุณได้โดยการออก

# flashrom -r <outputfile>

หากคุณต้องการบันทึกCMOS RAM ที่เรียกว่า(ไบต์พิเศษที่คุณบันทึกการกำหนดค่าเช่นการเตือนภัยบน RTC และอื่น ๆ ) 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 'ไม่เพียงพอสำหรับซอฟต์แวร์ชิ้นนี้ ตัวอย่างเช่นมันจะไม่ทำงานบนแล็ปท็อป Thinkpad ที่ฉันเป็นเจ้าของ (มีหลายรุ่น)
slm

10

หากเครื่องมืออื่นไม่พร้อมใช้งานหรือไม่สามารถใช้งานได้นี่เป็นวิธีที่จะคาดเดาการศึกษาเกี่ยวกับพื้นที่ของหน่วยความจำที่จะถ่ายโอนข้อมูล

ตัวอย่างเช่นจากใน VirtualBox VM ฉันได้ทำการทิ้งไบออสของมันโดยทำ:

$ 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
คุณจะรู้ขนาดที่ใช้ตามที่อยู่หน่วยความจำได้อย่างไร
unseen_rider

7

ตัวเลือกประวัติใน dmidecode

dmidecode -t bios

อ่านหน่วยความจำจากC:0000ถึงF:FFFFโดยไม่จำเป็นต้องใช้ dmidecode

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 ระบบ

System ROM เริ่มต้นที่ 000f0000 ซึ่งเป็น 0xF0000

เปิดเบราว์เซอร์และไปhttp://www.hexadecimaldictionary.com/hexadecimal/0xF0000 นี่บอกว่าค่าทศนิยมคือ 983040 ซึ่งหารด้วย 1024 เพื่อรับกิโลไบต์คือ 960 ซึ่งเป็นจุดเริ่มต้นและค่าสำหรับ 'ข้าม'

หมายเลขสิ้นสุดคือ 0xFFFFF ซึ่งคือ 1048575 ซึ่งเป็นเพียงขี้อายของ 1024 1024 - 960 คือ 64 ซึ่งเป็นค่าของ 'count'

คำสั่งเพื่อรันดัมพ์ไบออสจึง:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.