如何将 BIOS 数据转储到文件

如何将 BIOS 数据转储到文件

我想将笔记本电脑的 BIOS 数据转储到文件中。我找到的唯一解决方案是以下命令:

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

XY由于BIOS类型不同,不同的人建议的解决方案也不同。

有没有办法找到 BIOS 数据的确切地址/dev/mem?我可以用来dmidecode查找BIOS在内存中的地址范围吗? Linux 是否将所有 BIOS 数据转储到 RAM 中还是仅转储其中的特殊部分?

如果Linux可以将BIOS数据转储到RAM中,那么root用户是否也可以直接访问BIOS?

答案1

您可以尝试使用biosdecode.

它是一个命令行实用程序,用于解析 BIOS 内存并打印有关它所知道的所有结构(或入口点)的信息。它查找有关硬件的信息,例如:

  • IPMI设备
  • 内存类型和速度
  • 底盘信息
  • 温度探头
  • 冷却装置
  • 电流探头
  • 处理器和内存信息
  • 序列号
  • BIOS版本
  • PCI / PCIe 插槽和速度

ETC。

需要考虑的事项:

  • biosdecode解析BIOS内存并打印有关所有结构的信息。
  • 解码BIOS数据与转储计算机的数据相同DMI。这DMI表主要描述系统当前由什么构成。
  • 提供的数据biosdecode不是人类可读的格式。

查看屏幕上的内容

您将需要使用dmidecode命令将计算机的 DMI (SMBIOS) 表内容转储到屏幕上。

$ sudo dmidecode --type 0 

搜索手册页以获取更多信息:

$ man dmidecode

是的,内核仅将 BIOS 所需的信息保留在 RAM 中。但是,您可以使用包含嵌入式 ASM(汇编代码)等的 C 应用程序从 root 用户进行实时 BIOS 调用。

您可以在 Linuxmagazine 上的这篇文章中阅读有关 Linux 内核和系统 BIOS 的更多信息,标题为:Linux 和 BIOS

答案2

我想你正在寻找的是flashrom。如果您的系统受支持,您可以通过发出以下命令来读取 BIOS 内容

# flashrom -r <outputfile>

如果你只想保存所谓的CMOS内存(您保存配置的额外字节,例如 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.

答案3

如果其他工具不可用或无法使用,可以通过以下方法对要转储的内存区域进行有根据的猜测。

例如,在 VirtualBox VM 中,我通过执行以下操作成功转储了其 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

答案4

这在 VirtualBox 中对我有用:

$ grep ROM /proc/iomem

结果是:
000c0000-000c7fff :视频 ROM
000e2000-000e2fff :适配器 ROM
000f0000-000fffff :系统 ROM

系统ROM从000f0000开始,即0xF0000。

打开浏览器并转到http://www.hexadecimaldictionary.com/hexadecimal/0xF0000。这表示十进制值为 983040,除以 1024 得到千字节为 960,这是起始点和“跳过”的值。

结束数字是 0xFFFFF,即 1048575,略小于 1024。1024 - 960 是 64,这是“count”的值。

转储 BIOS 的命令如下:

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

相关内容