dmidecode在哪里获得SMBIOS表?

igl*_*ory 4 linux x86 bios

我总是有这个问题,在阅读了man-page并在线搜索后没有得到答案.任何了解此问题的人请发表评论.

我知道SMBIOS表或DMI表是dmidecode定位和解析的内容.但它从何而来?它是否采用Linux中的文件格式?

Par*_*ime 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>
Run Code Online (Sandbox Code Playgroud)

/dev/mem 被描述为

mem是一个字符设备文件,它是计算机主存的图像.例如,它可用于检查(甚至修补)系统.mem中的字节地址被解释为物理内存地址.

所以要回答,它包含在/ dev/mem中

我正在寻找更多信息,但我认为内核在启动时将DMI表插入内存 - 来自 man dmidecode

当你运行它时,dmidecode将尝试找到DMI表.如果成功,它将解析该表并显示如下记录列表:


pau*_*sm4 7

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

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

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

大约在同一时间,微软开始要求OEM和BIOS供应商支持接口/数据集,以获得Microsoft认证......

您可以阅读有关Linux实现的更多信息 - 以及用于将实际原始数据导出到用户空间("/ sys/class/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