我总是有这个问题,在阅读手册和在网上搜索之后没有得到任何答案。任何对此有了解的人请评论。
我知道dmidecode定位和分析的是SMBIOS表或DMI表。但它是从哪里得到的呢?它是Linux中文件的格式吗?
发布于 2015-12-30 21:43:36
看起来它来自/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表。如果成功,它将解析此表并显示如下记录的列表:
发布于 2015-12-30 22:08:40
DMI表中定义的数据是一个行业标准;为Linux和Windows (以及其他PC OSs)实现:
BIOS 系统管理BIOS (SMBIOS)规范定义了可用于读取存储在计算机BIOS中的信息的数据结构(和访问方法)。大约在1999年,它成为分布式管理工作队(DMTF)的一部分。 大约在同一时间,微软开始要求原始设备制造商和BIOS供应商支持接口/数据集,以便获得Microsoft认证.
您可以在这里阅读更多关于Linux实现以及用于将实际原始数据导出到用户空间("/sys/class/dmi/“、"/dev/mem”和朋友)的驱动程序的信息:
用于访问DMI信息的实际内核代码如下(您的发行版/版本可能有所不同):
https://elixir.bootlin.com/linux/latest/source/drivers/firmware/dmi-sysfs.c
https://stackoverflow.com/questions/34537435
复制相似问题