dmidecode从哪里获取SMBIOS表?

问题描述 投票:0回答:3

我一直有这个问题,但在阅读手册页和在线搜索后没有得到答案。有了解这方面知识的请评论。

我理解SMBIOS表或DMI表是dmidecode定位和解析的。但它从哪里得到呢?是Linux下的文件格式吗?

linux x86 bios
3个回答
11
投票

看起来它来自/dev/mem

root@aw42e ~]# strace -F -e open dmidecode -t 17
   <snip>
    open("/sys/firmware/efi/systab", O_RDONLY) = -1 ENOENT (No such file or directory)
    open("/proc/efi/systab", O_RDONLY)      = -1 ENOENT (No such file or directory)
    open("/dev/mem", O_RDONLY)              = 3
    SMBIOS 2.5 present.

    open("/dev/mem", O_RDONLY)              = 3
    Handle 0x0016, DMI type 17, 27 bytes
    Memory Device
<snip>

/dev/mem
被描述为

mem 是一个字符设备文件,它是主存的映像 电脑。例如,它可以用于检查(甚至修补) 系统。 mem 中的字节地址被解释为物理内存 地址。

所以回答,它包含在 /dev/mem

我正在寻找更多信息,但我假设内核在启动时将 DMI 表插入内存 - 来自

man dmidecode

当您运行它时,dmidecode 将尝试查找 DMI 表。如果它 成功后,它将解析该表并 显示如下记录列表:


8
投票

DMI表中定义的数据是行业标准;适用于 Linux 和 Windows(以及其他 PC 操作系统):

https://en.wikipedia.org/wiki/System_Management_BIOS

系统管理 BIOS (SMBIOS) 规范定义数据 可用于读取信息的结构(和访问方法) 存储在计算机的 BIOS 中。大约 1999 年,它成为 分布式管理任务组 (DMTF) 的领域...

大约在同一时间,微软开始要求 OEM BIOS 供应商支持接口/数据集,以便 微软认证...

您可以阅读有关 Linux 实现的更多信息 - 以及用于将实际原始数据导出到用户空间的驱动程序(“/sys/class/dmi/”、“/dev/mem”等) - 这里:

https://web.archive.org/web/20160318010215/http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-19.4929/

用于访问 DMI 信息的实际内核代码在这里(您的发行版/版本可能有所不同):

https://elixir.bootlin.com/linux/latest/source/drivers/firmware/dmi-sysfs.c


0
投票

DMTF 定义的 SMBIOS 标准。您可以在https://www.dmtf.org/standards/smbios/

找到相关pdf

SMBIOS 可以是 32 位或 64 位,无论 CPU 架构如何。就像64位系统可以有32位smbios结构一样。规范版本 3.7.0 描述了 smbios 在 5.2.1(针对 32 位)和 5.2.2(针对 64 位)的位置。

注意:UEFI BIOS 和Legacy BIOS 不同,smbios 的位置不同。如果 BIOS 是旧版,您将在

0xF0000-0xFFFFF
之间的内存中寻找
_SM_
(对于 32 位)或 _SM3_(对于 64 位)。您应该同时寻找
_SM_
_SM3_
。 UEFI 非常有趣。 UEFI 为 UEFI 应用程序入口点提供了
system_table
接口。这是一个ms c结构(字节对齐不同)。该结构有一个由多个表组成的数组,例如 ACPI、SAL、SMBIOS 等。要查找 smbios 结构,您可以搜索 v2 或 v3 smbios 结构的相关 GUID。

找到smbios结构后,需要借助版本进行解析。 v2 和 v3 具有不同的结构布局。 smbios 结构为您提供数据数组的指针。

Linux 内核将该数组缓存到 sysfs 中。

dmidecode 使用缓存数据或如上所述查找数据。

该数组使用 dmtf 提供的规范进行解析(我在上面提到了链接)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.