我总是有这个问题,在阅读了man-page并在线搜索后没有得到答案。任何了解此事的人都请发表评论。
据我所知,SMBIOS表或DMI表是dmidecode定位和解析的内容。但它从何而来?它是否采用Linux中的文件格式?
答案 0 :(得分:7)
看起来它来自/ 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表。如果它 成功之后,它会解析这个表格 显示像这样的记录列表:
答案 1 :(得分:7)
DMI表中定义的数据是行业标准;适用于Linux和Windows(以及其他PC操作系统):
https://en.wikipedia.org/wiki/System_Management_BIOS
系统管理BIOS(SMBIOS)规范定义数据 可用于读取信息的结构(和访问方法) 存储在计算机的BIOS中。大约1999年,它成为了一部分 分布式管理任务组(DMTF)的域......
大约在同一时间,微软开始要求OEM 和BIOS供应商支持接口/数据集 微软认证......
您可以阅读有关Linux实现的更多信息 - 以及用于将实际原始数据导出到用户空间的驱动程序(&#34; / sys / class / dmi /&#34;,&#34; / dev / mem& #34;和朋友们) - 这里:
http://www.linux.org/threads/the-linux-kernel-configuring-the-kernel-part-19.4929/
用于访问DMI信息的实际内核代码在此处(您的发行版/版本可能不同):
http://lxr.free-electrons.com/source/drivers/firmware/dmi-sysfs.c