2. SMBIOS 规范基础
SMBIOS(System Management BIOS)是主板与操作系统之间交换硬件管理信息的标准接口。理解规范的版本演进、文档结构和获取途径,是进行定制开发的第一步。本章将系统梳理 SMBIOS 规范的版本脉络、文档组织方式以及如何获取最新规范。
2.1 SMBIOS 规范版本演进
SMBIOS 规范由 DMTF(Distributed Management Task Force)维护,经历了从 2.x 到 3.x 再到 3.5+ 的演进。不同版本在结构、容量和扩展能力上有显著差异。
| 版本系列 | 主要特征 | Entry Point 结构 | 最大表长度 | 适用场景 |
|---|---|---|---|---|
| 2.x | 经典 32 位结构,广泛兼容 | SMBIOS 2.1 Entry Point (EPS) | 64 KB | 传统 BIOS、旧式系统 |
| 3.x | 64 位结构,支持大表 | SMBIOS 3.0 Entry Point (EPS) | 16 MB | UEFI 固件、现代服务器 |
| 3.5+ | 新增 Type 42 管理控制器、扩展 Type 9 插槽信息 | SMBIOS 3.0 EPS(扩展字段) | 16 MB+ | 数据中心、可管理性增强 |
版本选择建议: 新项目应优先基于 SMBIOS 3.x 或 3.5+ 开发,以获得更大的表空间和更丰富的结构类型。2.x 仅用于兼容老旧固件。
2.2 规范文档结构
SMBIOS 规范文档(DSP0134)采用 DMTF 标准文档模板,主要包含以下章节:
- 1. 范围(Scope): 定义规范的适用领域和约束条件。
- 2. 规范性引用(Normative References): 列出依赖的其他标准(如 ACPI、UEFI)。
- 3. 术语和定义(Terms and Definitions): 解释关键术语,如 Entry Point、Structure Type、String。
- 4. 约定(Conventions): 字节序、数据对齐、保留位处理规则。
- 5. 总体架构(Overall Architecture): 描述 SMBIOS 表在内存中的布局和 Entry Point 结构。
- 6. 结构类型定义(Structure Type Definitions): 核心章节,逐一定义 Type 0 ~ Type 42+ 的字段布局。
- 7. 字符串和文本约定(Strings and Text Conventions): 字符串编码、终止符、最大长度。
- 附录(Annexes): 包含示例、变更历史、供应商自定义 GUID 注册表。
开发重点: 第 5 章和第 6 章是定制开发的核心阅读区域。第 5 章决定 Entry Point 的解析方式,第 6 章决定每个 Type 结构的字段偏移和含义。
2.3 主要章节导读
对于固件开发者,以下章节需要重点精读:
| 章节 | 内容 | 精读理由 |
|---|---|---|
| 第 5 章 | Entry Point 结构(2.1 EPS / 3.0 EPS) | 定位 SMBIOS 表入口,校验签名和版本 |
| 第 6 章 Type 0 | BIOS Information | 固件版本、BIOS 起始地址、特性标志 |
| 第 6 章 Type 1 | System Information | 制造商、产品名称、序列号、UUID |
| 第 6 章 Type 3 | System Enclosure | 机箱类型、资产标签、安全状态 |
| 第 6 章 Type 4 | Processor Information | CPU 类型、频率、核心数、升级插槽 |
| 第 6 章 Type 7 | Cache Information | 缓存层级、大小、类型、操作模式 |
| 第 6 章 Type 9 | System Slots | PCIe 插槽 ID、宽度、长度、特性 |
| 第 6 章 Type 17 | Memory Device | 内存大小、速度、类型、制造商、序列号 |
| 第 6 章 Type 41 | Onboard Devices Extended Information | 板载设备类型、描述、状态 |
注意: 3.5+ 版本新增了 Type 42(Management Controller Host Interface),用于描述 BMC 与主机之间的通信接口。如果项目涉及带外管理,必须阅读此 Type。
2.4 如何获取最新规范
SMBIOS 规范由 DMTF 免费提供,无需注册即可下载。以下是获取途径:
- DMTF 官网:
https://www.dmtf.org/standards/smbios— 主下载页面,提供 PDF 和 HTML 版本。 - DSP0134 最新版本: 当前最新为 3.7.0(2024 年发布),直接搜索 DSP0134_3.7.0.pdf 即可。
- GitHub 镜像: DMTF 在 GitHub 上维护规范仓库,地址为
https://github.com/DMTF/DSP0134,可查看历史版本和变更记录。 - Errata 勘误表: 每个正式版本发布后,DMTF 会发布勘误表(Errata),修正印刷错误和字段歧义。建议同时下载对应版本的 Errata 文件。
下载建议: 开发时同时保留 3.2.0 和 3.7.0 两个版本。3.2.0 是广泛支持的稳定版本,3.7.0 包含最新 Type 定义。对比阅读可以快速了解新增字段。
2.5 SMBIOS 规范版本与 Entry Point 结构
Entry Point 是操作系统或固件定位 SMBIOS 表的入口。2.x 和 3.x 的 Entry Point 结构完全不同,解析时必须区分。
2.6 规范文档中的关键字段解析示例
以 Type 0(BIOS Information)为例,展示规范文档中字段定义的典型格式:
Offset | Name | Length | Description
-------|-----------------------|--------|----------------------------------------------
00h | Type | BYTE | 0x00 (BIOS Information)
01h | Length | BYTE | 0x12 (18 bytes for v2.4+)
02h | Handle | WORD | Unique structure handle
04h | Vendor | BYTE | String number for BIOS vendor name
05h | BIOS Version | BYTE | String number for BIOS version
06h | BIOS Starting Address | WORD | Segment address of BIOS entry point
08h | BIOS Release Date | BYTE | String number for release date
09h | BIOS ROM Size | BYTE | Size in 64 KB blocks (0 = 64 KB)
0Ah | BIOS Characteristics | QWORD | 64-bit feature flags
12h | BIOS Characteristics | BYTE | Extension bytes (v2.4+)
| Extension Bytes | |
开发提示: 在固件中填充 Type 0 时,必须确保
BIOS Characteristics 字段的位定义与规范一致。例如,Bit 3 表示“BIOS 支持即插即用”,Bit 11 表示“BIOS 支持 ACPI”。错误的位设置会导致操作系统识别异常。
2.7 规范版本选择决策流程
在项目启动阶段,按以下流程确定使用的 SMBIOS 规范版本:
2.8 规范文档中的保留字段与扩展机制
SMBIOS 规范为每个 Type 结构预留了保留字段(Reserved),用于未来扩展。定制开发时,必须遵守以下规则:
- 读取时: 忽略保留字段的值,不依赖其默认值。
- 写入时: 保留字段必须填 0,除非规范明确允许使用。
- 扩展方式: 通过增加 Type 结构的 Length 字段来追加自定义字段。操作系统会通过 Length 判断结构大小。
- 供应商自定义: 使用 Type 128~255(OEM Reserved)或 Type 42(Management Controller)的供应商扩展区域。
常见错误: 有些开发者直接在标准 Type 的保留字段中写入自定义数据,导致操作系统解析时出现校验错误或字段错位。正确的做法是增加 Length 并在末尾追加字段,或者使用 OEM 专用 Type。