【发布时间】:2016-04-04 21:28:46
【问题描述】:
我一直有这个问题,在阅读手册页和在线搜索后没有得到答案。有这方面知识的朋友请留言。
我了解 SMBIOS 表或 DMI 表是 dmidecode 定位和解析的。但它是从哪里得到的呢?它是Linux中的文件格式吗?
【问题讨论】:
我一直有这个问题,在阅读手册页和在线搜索后没有得到答案。有这方面知识的朋友请留言。
我了解 SMBIOS 表或 DMI 表是 dmidecode 定位和解析的。但它是从哪里得到的呢?它是Linux中的文件格式吗?
【问题讨论】:
貌似来自/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@.
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”和朋友) - 在这里:
访问 DMI 信息的实际内核代码在这里(您的发行版/版本可能不同):
https://elixir.bootlin.com/linux/latest/source/drivers/firmware/dmi-sysfs.c
【讨论】: