2015-12-30 41 views
3

我总是有这个问题,在阅读man-page和在线搜索后没有得到答案。任何有此知识的人请评论。dmidecode从哪里得到SMBIOS表?

据我所知,SMBIOS表或DMI表是dmidecode定位和解析的内容。但是它从哪里得到?它是在Linux中的文件格式?

回答

5

看起来它来自的/ dev/MEM

[email protected] ~]# 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表。如果 成功,它将然后解析此表并 显示这样一个记录列表:

+0

'的/ dev/mem'似乎并不成为唯一的位置,其中'dmidecode'查询,在我的情况下,它主要是不仅从'/ sys/firmware/dmi/tables'中的'smbios_entry_point'和'DMI'两个文件中提取信息。 – Meow

7

在DMI表中定义的数据是一个行业标准;为Linux和Windows(其他PC的OS中)来实现:

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

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

在大约相同的时间微软开始要求OEM厂商 和BIOS厂商支持,以便在接口/数据集有 微软认证...

你可以阅读更多关于Linux实现 - 并且用实际的,原始数据导出到用户空间(“/ SYS /班/ DMI /”司机“的/ dev/MEM”,和朋友) - 在这里:

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