【问题标题】:Where does dmidecode get the SMBIOS table?dmidecode 从哪里获得 SMBIOS 表?
【发布时间】:2016-04-04 21:28:46
【问题描述】:

我一直有这个问题,在阅读手册页和在线搜索后没有得到答案。有这方面知识的朋友请留言。

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

【问题讨论】:

    标签: linux x86 bios


    【解决方案1】:

    貌似来自/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 表。如果它 成功后,它将解析此表并 显示这样的记录列表:

    【讨论】:

    • /dev/mem 似乎不是dmidecode 查询的唯一位置,在我的情况下,主要是如果不仅从/sys/firmware/dmi/tables 中的两个文件中提取信息,它们是smbios_entry_point 和@ 987654328@.
    【解决方案2】:

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

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

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

    大约在同一时间,Microsoft 开始要求 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

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多