Cách đổ dữ liệu BIOS vào một tệp


24

Tôi muốn chuyển dữ liệu BIOS của máy tính xách tay của tôi vào một tệp. Giải pháp duy nhất tôi tìm thấy là lệnh sau:

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

XYkhác nhau trong các giải pháp được đề xuất bởi những người khác nhau vì có các loại BIOS khác nhau.

Có cách nào để tìm địa chỉ chính xác của dữ liệu BIOS /dev/memkhông? Tôi có thể sử dụng dmidecodeđể tìm phạm vi địa chỉ của BIOS trong bộ nhớ không? Và Linux có đổ tất cả dữ liệu BIOS vào RAM hay chỉ là một phần đặc biệt của nó?

Nếu Linux có thể đổ dữ liệu BIOS vào RAM, người dùng root cũng có thể truy cập BIOS trực tiếp?

Câu trả lời:


20

Bạn có thể thử sử dụng biosdecode.

Nó là một tiện ích dòng lệnh để phân tích bộ nhớ BIOS và in thông tin về tất cả các cấu trúc (hoặc các điểm nhập) mà nó biết. Nó tìm ra thông tin về phần cứng như:

  • Thiết bị IPMI
  • Loại bộ nhớ và tốc độ
  • Thông tin khung gầm
  • Đầu dò nhiệt độ
  • Thiết bị làm mát
  • Đầu dò dòng điện
  • Thông tin bộ xử lý và bộ nhớ
  • Số seri
  • phiên bản sinh học
  • Tốc độ và khe cắm PCI / PCIe

v.v.

Những điều cần cân nhắc:

  • biosdecodephân tích bộ nhớ BIOS và in thông tin về tất cả các cấu trúc.
  • Giải mã dữ liệu BIOS giống như việc hủy DMI của máy tính . Bảng DMI chủ yếu mô tả những gì hệ thống hiện đang được tạo ra.
  • Dữ liệu được cung cấp bởi biosdecodekhông ở định dạng có thể đọc được.

Xem nội dung trên màn hình

Bạn sẽ cần sử dụng dmidecodelệnh để bỏ nội dung bảng DMI (SMBIOS) của máy tính trên màn hình.

$ sudo dmidecode --type 0 

Tìm kiếm trang man để biết thêm thông tin:

$ man dmidecode

Có, hạt nhân chỉ giữ thông tin cần thiết từ BIOS trong RAM. Tuy nhiên, bạn có thể thực hiện các cuộc gọi BIOS thời gian thực từ người dùng root bằng các ứng dụng C bao gồm ASM nhúng (mã hội), v.v.

Bạn có thể đọc thêm về nhân Linux và BIOS của hệ thống trong bài viết này từ Linuxmagazine có tiêu đề: Linux và BIOS .


12

Tôi nghĩ những gì bạn đang tìm kiếm là flashrom. Với điều kiện hệ thống của bạn được hỗ trợ, bạn có thể đọc nội dung BIOS của mình bằng cách phát hành

# flashrom -r <outputfile>

Nếu bạn chỉ muốn lưu cái gọi là RAM RAM (những byte bổ sung mà bạn lưu cấu hình, như cảnh báo trên RTC et al) thì nvramtrình điều khiển và thiết bị của kernel có thể giúp bạn:

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.

Đây là một gợi ý hay nhưng có khả năng sẽ không hoạt động trên máy tính xách tay của bạn. Sự hỗ trợ của BIOS máy tính xách tay 'là thiếu cho phần mềm này. Ví dụ: nó sẽ không chạy trên bất kỳ máy tính xách tay Thinkpad nào mà tôi sở hữu (nhiều mẫu khác nhau).
slm

10

Nếu các công cụ khác không có sẵn hoặc không thể được sử dụng, đây là một cách để đưa ra phỏng đoán có giáo dục về vùng bộ nhớ nào sẽ bị loại bỏ.

Chẳng hạn, từ trong VirtualBox VM, tôi đã kết xuất thành công BIOS của nó bằng cách:

$ 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
Làm thế nào để bạn biết kích thước nào sẽ sử dụng dựa trên các địa chỉ bộ nhớ?
unseen_rider 6/2/2017

7

Tùy chọn bios trong dmidecode

dmidecode -t bios

Đọc bộ nhớ từ C:0000đến F:FFFFmà không cần dmidecode

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

3

Điều này làm việc cho tôi trong VirtualBox:

$ grep ROM /proc/iomem

kết quả là:
000c0000-000c7fff: ROM video
000e2000-000e2fff: Bộ điều hợp ROM
000f0000-000fffff: ROM hệ thống

ROM hệ thống bắt đầu từ 000f0000, là 0xF0000.

Mở trình duyệt và truy cập http://www.hexadecimaldipedia.com/hexadecimal/0xF0000 . Điều này cho biết giá trị thập phân là 983040, được chia cho 1024 để lấy kilobyte là 960, là điểm bắt đầu và giá trị cho 'bỏ qua'.

Số kết thúc là 0xFFFFF là 1048575, chỉ nhỉnh hơn 1024. 1024 - 960 là 64, là giá trị của 'đếm'.

Do đó, lệnh chạy để kết xuất bios là:

dd if=/dev/mem of=pcbios.bin bs=1k skip=960 count=64
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.