在Linux中阅读BIOS内容的最佳方法

5

这个问题有点奇怪。是否可以读取bios芯片的全部内容呢?我们遇到了一个问题,需要验证bios芯片的内容。

谢谢,詹姆斯

3个回答

3
如果您有dmidecode或biosdecode,您可以尝试使用它们。

1

如何读取BIOS区域

是否有可能读取BIOS芯片的全部内容?我们遇到了一个问题,需要验证BIOS芯片的内容。

我猜你是指特定地读取"BIOS区域",因为同一芯片可能包含多个不同的区域:

要读取BIOS区域:

最简单的方法是从/dev/mem 0xffffffff向下读取。您可以在/proc/iomem中找到范围(尝试命令:sudo grep -- '-ffffffff ' /proc/iomem)。然后,您可以使用dd命令转储该区域。
另一种方法是使用flashrom,如果您的主板支持此工具(类似于sudo flashrom -p internal --ifd -i bios -r /tmp/bios_region.img)。
另一种方法是使用特定供应商的工具,例如AFULNX。这种方式高度依赖于特定的主板和BIOS供应商。
还有一种方法是使用Linux的MTD驱动程序。有时,带有BIOS区域的SPI存储芯片可用作/dev/mtd*。
此外,对于服务器主板,BIOS通常可以通过BMC获得。
如何验证内容(出于安全目的)
实际上,您可以只使用TPM的PCR0值来验证BIOS的内容。它有很多注意事项,但它们已经被研究和解决了(随时提问,我会尽力帮助)。
但是如果你需要直接比较内容,请记住以下几点:
- 原始图像中有占位符,可以用真实数据替换,因此可能得到不匹配的图像,这是正常现象。 - BIOS 可能会在 NVRAM(以及其他地方)写入一些数据。例如,在某些 BIOS 上,每次重新启动时 BIOS 区域转储都不匹配。这也是正常现象。
避免这两个问题最简单的方法就是只使用 PCR0 值。
如何验证内容(用于操作目的):
请参考上面的“安全目的”部分,此外 BIOS 卷和文件具有校验和。在某些情况下,您可能只想检查它们。
附言:
其他答案建议使用诸如 "dmidecode" 的工具。它们不会转储 BIOS 图像,而只会打印 SMBIOS 信息等内容。

0
你读过this吗?

有没有一种简单的方法可以从用户空间读取系统BIOS的内容?

没有。大多数现代BIOS代码都是分页的、压缩的,有些还加密了。


阅读该帖子的其余部分表明,您可以“读取”BIOS。 dmidecodebiosdecode都是用户空间程序,用于询问BIOS。 man biosdecode指出它直接从/dev/mem读取,因此您也可以直接从/dev/mem读取BIOS代码并自行解析。 - spinkus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接