一、INTRODUCTION
The System Management BIOS(SMBIOS)解决了主板和系统供应商如何通过平台固件以标准格式展现其产品信息,这些信息包括CPU/Memory的serial number、manufacture、speed等资料,也有PCIe Devices、USB Device、Redfish Services等资讯。
SMBIOS储存在NVRAM中,其存在物理地址000F0000h到000FFFFFh之间。如果是非UEFI系统,可以通过在物理内存内存地址范围000F0000h到000FFFFFh搜索anchor-string(_SM_)找到SMBIOS的EPS(Entry Point structure)。如果是UEFI系统,可以直接在UEFI配置表查找SMBIOS GUID(SMBIOS_TABLE_GUID, {EB9D2D31-2D88-11D3-9A16-0090273FC14D})来找到SMBIOS ESP。
SMBIOS的数据存储结构由两部分组成,ESP和SMBIOS数据表。ESP表的结构如图所示,当拿到ESP表后,就可以根据16H和18H确定数据表的信息。
二、 SMBIOS结构
2.1 SMBIOS结构头
每个SMBIOS结构都有一个格式化部分和可选的非格式化部分。每个格式化部分都以4 bytes的头开始,剩余的部分由机构类型决定,整个格式化部分的长度也是这样。
格式化部分的头结构由以下几个部分组成:
Offset | Name | Length | Description |
00h | Type | BYTE | 结构的类型,类型0到127为本规范保留和定义,类型128到256可用于特定系统和OEM |
01h | Length | BYTE | 结构格式化部分的长度,从类型开始,不包括结构的字符串集 |
02h | Handle | Word | 16位,所指结构的句柄 |
2.2 SMBIOS结构类型
SMBIOS的结构类型有:
Structure Name and Type | Data Requirements |
Firmware Information (Type 0) | 结构表中有且仅有一个结构表。固件版本和固件发布日期是非空的,日期用4位的年份表示(如1999).所有其它部分由固件信息决定。 |
System Information(Type 1) | 制造商和产品名称字符串是非空的。UUID是系统非零的UUID值。唤醒字段不能是未知的。在结构表中有且仅有一个结构。 |
System Enclosure(Type 3) | 制造商字符串是非空的,Type字段用于表示机箱的的类型 |
Processor Information(Type 4) | 每个系统处理器都需要一个结构,如果有两个Type 4结构,说明系统含有两个CPU |
Cache Information(Type 7) | 处理器外部的每个缓存都需要一个结构 |
System Slots(Type 9) | 每个可升级的系统插槽都需要一个结构 |
Physical Memory Array(Type 16) | 系统内存需要一种结构。位置、使用和内存纠错都设置为“已知”值。 “最大容量”和“扩展最大容量”必须设置为已知的非零值。“内存设备数量”为非零,标识与此物理内存阵列相关联的内存设备结构的数量。 |
Memory Device(Type 17) | 每个套接的系统内存设备都需要一个结构 |
Memory Array Mapped Address(Type 19) | 每个映射到物理内存阵列的连续内存块都需要一个结构 |
System Boot Information(Type 32) | 结构的长度至少为0Bh(至少有一个系统启动状态) |
(1)Platform Firmware Information(Type 0)
Offset | Spec Version | Name | Length | Value | Description |
00h | 2.0+ | Type | BYTE | 0 | 平台固件信息指示器 |
01h | Length | BYTE | Varies | 12h+ 固件特征扩展字节数 | |
02h | Handle | WORD | Varies | ||
04h | Vendor | BYTE | STRING | 固件厂商名称 | |
05h | Firmware Version | BYTE | STRING | 固件版本字符串 | |
06h | BIOS Starting Address Segment | WORD | Varies | BIOS起始地址的段位制 | |
08h | Firmware Release Date | BYTE | STRING | BIOS发布日期 | |
09h | Firmware ROM Size | Varies | Varies | 固件ROM的大小 | |
0Ah | Firmware Characteristics | QWORD | Bit Field | 定义固件支持哪些功能(设备) | |
12h | 2.4+ | Firmware Characteristics Extension Bytes | Zero or more BYTES | BIt Field | 为将来支持的函数保留的可选空间 |
14h | Platform Firmware Major Release | BYTE | Varies | 平台固件的主要版本 | |
15h | Platform Firamware Minor Release | BYTE | Varies | 表示平台的次要版本 | |
16h | Embedded Controller Firmware Major Release | BYTE | Varies | 识别嵌入式控制器固件的主要版本 | |
17h | Embedded Controller Firmware Minor Release | 次要版本 | |||
18h | 3.1+ | Extended Firmware ROM Size | WORD | Bit Field | 包含固件的物理设备大小 |
(2)System Information (Type 1)
定义了整个系统属性
包括:结构类型、长度、句柄、制造商、产品名称、版本、串口数、UUID、唤醒类型、SKU等
(3)Baseboard Information (Type 2)
主板信息
(4)System Enclosure or Chassis(Type3)
机箱外壳信息
(5)Processor Information(Type 4)
单个处理器信息
Offset | Spec Version | Name | Length | Value | Description |
00h | 2.0+ | ||||
01h | |||||
02h | |||||
04h | Socket Designation | BYTE | STRING | ||
05h | Processor Type | BYTE | ENUM | 处理器类型 01h 其它 02h 未知 03h 中央处理器 04h 数学处理器 05h DSP处理器 06h 视频处理器 | |
06h | Processor family | BYTE | ENUM | ||
07h | Processor Manufacturer | BYTE | STRING | 处理器制造商 | |
08h | Processor ID | QWORD | Varies | 原始处理器识别数据 | |
10h | Processor Version | BYTE | STRING | 处理器版本 | |
11h | Voltage | BYTE | Varies | 电压 | |
12h | External Clock | WORD | Varies | 外部时钟 | |
14h | Max Speed | 这个处理器的最大速度,用MHz表示 | |||
16h | Current Speed | WORD | |||
18h | Status | BYTE | Varies | bit 7:保留,必须为0 bit 6:CPU插槽已填充 1 CPU插槽已填充 0 CPU插槽未填充 bit 5:3 保留必须为0 bit 2:0 CPU状态 0h-未知 1h-CPU被启用 2h-CPU通过固件被设置为禁用 3h-CPU被禁用(POST) 4h-CPU空闲等待启用 5-6h-保留 7h:其他 | |
19h | Processor Upgrade | BYTE | ENUM | ||
1Ah | 2.1+ | L1 Cache Handle | 缓存句柄信息结构:定义主缓存(L1)属性 | ||
1Ch | L2 Cache Handle | ||||
1Eh | L3 缓存句柄 | ||||
20h | 2.3+ | Serial Number | CPU生产商设定的序列字符串编号 | ||
21h | Asset Tag | 处理器的资产标签字符串编号 | |||
22h | Part Number | 该处理器部件号的字符串编号 | |||
23h | 2.5+ | Core Count | BYTE | Varies | 每个处理器插槽的核心数 |
24h | Core Enabled | 每个处理器插槽启用的核心数 | |||
25h | Thread Count | 每个处理器插槽的线程数 | |||
26h | processor characteristic | WORD | Bit Field | 处理器支持的功能 | |
25h | 2.6+ | Processor Family 2 | WORD | Enum | |
2Ah | 3.0+ | Core Count2 | WORD | Varies | |
2Ch | Core Enabled 2 | ||||
2Eh | Thread Count 2 | ||||
30h | 3.6+ | ThreadEnable | |||
32h | 3.8+ | Socket Type | socket类型 |
(6)缓存信息(Type 7)
定义了CPU缓存设备的属性
(7)端口连接器信息(Type 8)
(8)系统槽位(Type 9)
定义了系统插槽的属性,系统中每个插槽需要一个结构
Offset | Spec Version | Name | Length | Value | Description |
00h | Type | ||||
01h | Length | ||||
02h | Handle | ||||
04h | slot Designation | ||||
05h | slot type | BYTE | ENUM | 01h other 02h 未知 03h ISA 04h MCA 05h EISA 06h PCI 07h PC Card 08h VL-VESA 09h Proprietary 专有 0Ah processor card slot 0Bh proprietary memory card slot 0Ch I/O Riser Card slot 0Dh NuBus 0Eh PCI-66MHz capable ... | |
06h | slot data Bus Width | BYTE | ENUM | ||
07h | Current usage | ||||
08h | slot length | ||||
09h | Slot ID | ||||
0Bh | slot Characteristic 1 | ||||
0Ch | Slot characteristic 2 | ||||
0Dh | Segment Group Number | ||||
0Fh | BUS number | ||||
10h | Devices/Function Number | ||||
11h | Data Bus Width | ||||
12h | Peer grouping count | ||||
13h | peer groups | ||||
13h + 5*n | slot information | ||||
14h + 5*n | slot Physical Width | ||||
15h + 5*n | slot pitch | ||||
17h + 5*n | Slot Hight |
(9) OEM Strings(Type11)
原始设备制造商
(10)System Configuration Options(Type 12)
(11)Firmware language Information(Type 13)
(12)Group Associations(Type 14)
(13)System Event Log(Type 15) 系统事件日志
(14)Physical Memory Array (Type 16) 存储设备集合
(15)Memory Device (Type 17)
一个内存设备的信息
(16)32位内存错误信息(Type 18)
三、SMBIOS信息读取
3.1 UEFI Shell下读取SMBIOS信息
在UEFI Shell下可以利用smbiosview命令来读取smbios的信息
smbiosview [-t SmbiosType] | [-h SmbiosHandle] | [-s] | [-a]其中:
-t 展示Smbios结构类型0 BIOS Information1 System Information3 System Enclosure4 Processor Information5 Memory Controller Information6 Memory Module Information7 Cache Information8 Port Connector Information9 System Slots10 On Board Devices Information15 System Event Log16 Physical Memory Array17 Memory Device18 32-bit Memory Error Information19 Memory Array Mapped Address20 Memory Device Mapped Address21 Built-in Pointing Device22 Portable Battery34 Management Device37 Memory Channel38 IPMI Device Information39 System Power Supply-h 展示SmbiosHandle的结构-s 显示统计表-a 显示所有信息
以读取的几个type为例简单讲解:
smbioseview -t 0
3.2 系统下读取Smbios信息
在linux系统下,使用命令dmidecode读取smbios信息
dmidecode
dmidecode -t 1
dmidecode -t system