我想将笔记本电脑的 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中,那么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