我总是有这个问题,在阅读了man-page并在线搜索后没有得到答案.任何了解此问题的人请发表评论.
我知道SMBIOS表或DMI表是dmidecode定位和解析的内容.但它从何而来?它是否采用Linux中的文件格式?
看起来它来自/ dev/mem
root@aw42e ~]# strace -F -e open dmidecode -t 17open("/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
/dev/mem
被描述为
mem是一个字符设备文件,它是计算机主存的图像.例如,它可用于检查(甚至修补)系统.mem中的字节地址被解释为物理内存地址.
所以要回答,它包含在/ dev/mem中
我正在寻找更多信息,但我认为内核在启动时将DMI表插入内存 - 来自 man dmidecode
当你运行它时,dmidecode将尝试找到DMI表.如果成功,它将解析该表并显示如下记录列表:
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