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
1 2 3 4 5 6 7 8 9 10 11 12 | 固件提供 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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)