SMBIOS和DMI(DMTF组织指定的规范)

前言:   

SMBIOS和DMI它定义了可用于以标准化方式访问硬件和系统 BIOS 公开的信息的数据结构。 SMBIOS 经常与DMI混淆 ,但它本质上是原始 DMI 规范的演变。这就是 Linux dmidecode实用程序名称的来源。

 

SMBIOS标准

smbios(System Management BIOS 简写为SMBIOS) 是主板或系统制造者以标准格式显示产品管理信息所需遵循的统一规范
SMBIOS是由行业指导机构Desktop Management Task Force (DMTF)起草的开放性的技术标准;
SMBIOS(System Management BIOS)是由BIOS/UEFI在初始化系统的时候收集的关于系统信息的一组结构化的表,并且存放在内存中,
提供给操作系统使用。
https://www.dmtf.org/standards/smbios
linux内核实现:
http://sourceforge.net/projects/smbios/

DMI标准

官网:
https://www.dmtf.org/standards/dmi/
DMI 生成一个标准框架,用于管理和跟踪台式电脑、笔记本电脑或服务器中的组件。DMI 是第一个桌面管理标准。

 

DMI 和SMBIOS的区别

DMI 将系统数据(包括系统管理 BIOS (SMBIOS) 数据)公开给管理软件,但两种规范独立运行。
DMI 通常与 SMBIOS 混淆,SMBIOS 在其第一次修订时实际上称为 DMIBIOS
来自: https://en.wikipedia.org/wiki/Desktop_Management_Interface

查看 DMI和 SMBIOS 信息的 都可以用这个查看用 dmidecode工具查看
dmidecode程序,它可以访问硬件公开的 SMBIOS/DMI 信息。该实用程序可以公开有关机器上硬件和 BIOS 软件的大量信息。


内核启动时,从日志可以看到类似:

[root@aozhejin /proc]#dmesg | grep SMBIOS
[    0.000000] SMBIOS 2.4 present.


我们查看dmi信息(在 sysfs文件系统中,DMI 信息位于/sys/class/dmi/id)

[root@aozhejin /proc]#ls /sys/class/dmi/id
bios_date     board_asset_tag  board_vendor       chassis_serial  chassis_version  product_name    product_version  uevent
bios_vendor   board_name       board_version      chassis_type    modalias         product_serial  subsystem
bios_version  board_serial     chassis_asset_tag  chassis_vendor  power            product_uuid    sys_vendor
另外获取dmi 标准下的硬件信息.

[root@aozhejin /proc]#ll /sys/devices/virtual/dmi/id/
total 0
-r--r--r-- 1 root root 4096 Apr 27  2022 bios_date
-r--r--r-- 1 root root 4096 Apr 27  2022 bios_vendor
-r--r--r-- 1 root root 4096 Apr 27  2022 bios_version
-r--r--r-- 1 root root 4096 Mar 15 13:40 board_asset_tag
-r--r--r-- 1 root root 4096 Mar 15 13:40 board_name
-r-------- 1 root root 4096 Mar 15 13:40 board_serial
-r--r--r-- 1 root root 4096 Mar 15 13:40 board_vendor
-r--r--r-- 1 root root 4096 Mar 15 13:40 board_version
-r--r--r-- 1 root root 4096 Mar 15 13:40 chassis_asset_tag
-r-------- 1 root root 4096 Mar 15 13:40 chassis_serial
-r--r--r-- 1 root root 4096 Mar 15 13:40 chassis_type
-r--r--r-- 1 root root 4096 Mar 15 13:40 chassis_vendor
-r--r--r-- 1 root root 4096 Mar 15 13:40 chassis_version
-r--r--r-- 1 root root 4096 Apr 21  2022 modalias
drwxr-xr-x 2 root root    0 Mar 15 13:40 power
-r--r--r-- 1 root root 4096 Apr 27  2022 product_name
-r-------- 1 root root 4096 Apr 27  2022 product_serial
-r-------- 1 root root 4096 Apr 27  2022 product_uuid
-r--r--r-- 1 root root 4096 Apr 27  2022 product_version
lrwxrwxrwx 1 root root    0 Apr 27  2022 subsystem -> ../../../../class/dmi
-r--r--r-- 1 root root 4096 Apr 21  2022 sys_vendor
-rw-r--r-- 1 root root 4096 Apr 21  2022 uevent
获取硬件基础信息,比如生产厂商、系统、机箱等

 

一、从 SMBIOS 2.3 版本开始,兼容 SMBIOS 的实现必须包含以下 10 个数据表结构

SMBIOS 规范定义了以下 DMI 类型:

类型 信息
0 BIOS
1 系统
2 底板
3 机壳
4 处理器
5 内存控制器
6 内存模块
7 缓存
8 端口连接器
9 系统插槽
10 车载设备
11 OEM 琴弦
12 系统配置选项
13 BIOS语言
14 团体协会
15 系统事件日志
16 物理内存阵列
17 记忆装置
18 32 位内存错误
19 内存阵列映射地址
20 存储设备映射地址
21 内置指点设备
22 便携式电池
23 系统重置
24 硬件安全
25 系统电源控制
26 电压探头
27 冷却装置
28 温度探头
29 电流探头
30 带外远程访问
31 启动完整性服务
32 系统启动
33 64 位内存错误
34 管理设备
35 管理设备组件
36 管理设备阈值数据
37 内存通道
38 IPMI 设备
39 电源
40 附加信息
41 板载设备扩展信息
42 管理控制器主机接口

 

  此外,类型 126 用于禁用条目,类型 127 是表尾标记。类型 128 到 255 用于 OEM 特定数据。 默认情况下, dmidecode会显示这些条目,但只有在供应商为它们提供文档或代码时,它才能解码它们。

可以使用关键字代替带有 --type的类型数字。每个关键字都相当于一个类型数字列表:

关键词 类型
BIOS 0, 13
系统 1, 12, 15, 23, 32
底板 2, 10, 41
机壳 3个
处理器 4个
记忆 5, 6, 16, 17
缓存 7
连接器 8个

二、SMBIOS 规范2.6定义的type如下。

TYPE 0->BIOS 信息,        TYPE 1->系统信息                            
TYPE 2->基板(模块)信息     TYPE 3->系统外围或底架 
TYPE 4->处理器信息         TYPE 5->存储控制器信息(Obsolete),TYPE 6->存储模块信息(Obseolete)  TYPE 7->缓存信息
TYPE 8->端口连接器信息      TYPE 9->系统插槽                           
TYPE 10->板载系统信息       TYPE 11->OEM字符串
TYPE 12->系统配置信息.............................

 这里我看下 TYPE 1(系统信息)

位置   名称            长度                  描述
00h     TYPE 号      1BYTE          结构的TYPE 号,此处是1
01h     长度         1BYTE          格式区域总长度,2.0 版为08h ,2.1-2.3.4 版为19h ,从2.4 版开始为1Bh
02h     句柄         2BYTE          指向本结构的句柄
04h     电脑制造商    1BYTE          一般为01h ,表示在字符串区域中的编号
05h     产品名称      1BYTE          在字符串区域中的编号
06h     版本号        1BYTE          在字符串区域中的编号
07h     序列号        1BYTE          在字符串区域中的编号
09h     UUID         16BYTE         通用唯一标识符
18h     唤醒类型      BYTE           用来标识导致系统开电启动的事件
19h     SKU 号       BYTE              在字符串区域中的编号,SKU 号通常为产品ID 或采购订单号
1Ah     产品家族     1BYTE           在字符串区域中的编号


三 、SMBIOS 规范 2.7.1 中定义了如下的结构类型:

type   Description
0 BIOS Information
1 System Information
2 Baseboard (or Module) Information
3 System Enclosure or Chassis
4 Processor Information
5 Memory Controller Information (Obsolete)
6 Memory Module Information (Obsolete)
7 Cache Information
8 Port Connector Information
9  System Slots
10 On Board Devices Information
11 OEM Strings
12 System Configuration Options
13 BIOS Language Information
14 Group Associations
15 System Event Log
16 Physical Memory Array
17 Memory Device
18 32-Bit Memory Error Information
19 Memory Array Mapped Address
20 Memory Device Mapped Address
21 Built-in Pointing Device
22 Portable Battery
23 System Reset
24 Hardware Security
25 System Power Controls
26 Voltage Probe
27 Cooling Device
28 Temperature Probe
29 Electrical Current Probe
30 Out-of-Band Remote Access
31 Boot Integrity Services (BIS) Entry Point
32 System Boot Information
33 64-Bit Memory Error Information
34 Management Device
35 Management Device Component
36 Management Device Threshold Data
37 Memory Channel
38 IPMI Device Information
39 System Power Supply
40 Additional Information
41 Onboard Devices Extended Information
42 Management Controller host Interface
126 Inactive
127 End-of-Table
128-255 Available for system- and OEM- specific informatio

 

四、在Linux中,可以通过dmidecode命令查看,不同类型的 SMBIOS子表 通过type数值来区分

    语法 dmidecode -t type_num(在系统里面查看smbios表的信息)

查询方法:
[root@ht8 devices]#dmidecode 
[root@ht8 devices]#dmidecode -t 0
[root@ht8 devices]# dmidecode -t system

     1)  type=0代表bios

[root@ht8 devices]# dmidecode -t 0  //0代表bios
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
    Vendor: Phoenix Technologies LTD
    Version: 6.00
    Release Date: 09/21/2015
    Address: 0xE99E0
    Runtime Size: 91680 bytes
    ROM Size: 64 kB
    Characteristics:
        ISA is supported
        PCI is supported
        PC Card (PCMCIA) is supported
        PNP is supported
        APM is supported
        BIOS is upgradeable
        BIOS shadowing is allowed
        ESCD support is available
        Boot from CD is supported
        Selectable boot is supported
        EDD is supported
        Print screen service is supported (int 5h)
        8042 keyboard services are supported (int 9h)
        Serial services are supported (int 14h)
        Printer services are supported (int 17h)
        CGA/mono video services are supported (int 10h)
        ACPI is supported
        Smart battery is supported
        BIOS boot specification is supported
        Function key-initiated network boot is supported
        Targeted content distribution is supported
    BIOS Revision: 4.6
    Firmware Revision: 0.0

   2)  type=9代表系统插槽

[root@ht8 devices]# dmidecode -t 9
# dmidecode 3.2
Getting SMBIOS data from sysfs.
SMBIOS 2.4 present.
 ......

五、他们从哪里读取信息的

[root@aozhejin /sys/firmware/dmi/tables]#ll
total 0
-r-------- 1 root root 27170 Mar 15 15:21 DMI
-r-------- 1 root root 31 Mar 15 15:21 smbios_entry_point

上面这两个文件:
[root@aozhejin /proc]#file /sys/firmware/dmi/tables/DMI
/sys/firmware/dmi/tables/DMI: data  #这是一个二进制属性的文件
[root@aozhejin /proc]#cat /sys/firmware/dmi/tables/smbios_entry_point
_SM_

 我们来看看官方对/sys/firmware/dmi/tables/ 这个的解释
    https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-firmware-dmi-tables

固件提供 DMI 数据结构作为打包列表被 SMBIOS 表入口点引用的数据。
   SMBIOS 入口点包含一般信息,如 SMBIOS 版本、DMI 表大小等结构、内容和
   SMBIOS 入口点的大小取决于 SMBIOS 版本。
   SMBIOS 入口点 和 DMI 结构的格式可以在 SMBIOS 规范中阅读。

    dmi/tables 提供原始(raw)的SMBIOS 入口点和 DMI 表
通过 sysfs文件来作为实用程序的替代方案(例如: ),读取来自/dev/mem。
原始 SMBIOS 入口点和 DMI表是呈现为二进制属性,
  可通过以下方式访问:
 /sys/firmware/dmi/tables/smbios_entry_point
 /sys/firmware/dmi/tables/DMI
 使用这两个可以得到完整的DMI信息表。

 

参考资料: 

https://www.dmtf.org/zh-hans 
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.4.0.pdf smbios规范下载
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.5.0.pdf
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.6.0WIP50.pdf Work in Progress Documents
https://www.dmtf.org/sites/default/files/standards/documents/DSP0130.pdf Historical Documents
https://opensource.apple.com/source/AppleSMBIOS/AppleSMBIOS-22/SMBIOS.h.auto.html 苹果公司关于smbios实现
https://www.dmtf.org/standards/dmi
https://www.dmtf.org/sites/default/files/standards/documents/DSP0005.pdf    DMI规范
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/firmware/dmi-id.c
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/firmware/dmi_scan.c
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.1.1.pdf  SMBIO规范
https://www.kernel.org/doc/Documentation/ABI/testing/sysfs-firmware-dmi-tables
https://linuxcommandlibrary.com/man/dmidecode

posted @ 2022-04-01 14:59  jinzi  阅读(1418)  评论(0编辑  收藏  举报