轻松搞懂SMBIOS

之前为了看懂OpenBMC的MDR(Managed Data Region)这个功能,所以花了点时间研究了什么是SMBIOS,所以这篇就是非BIOS专业对SMBIOS的理解

SMBIOS Specification (dmtf.org)https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.5.0.pdfThe System Management BIOS (SMBIOS) 提供了主板和系统供应商如何通过在英特尔架构系统上扩展 BIOS 接口以标准格式呈现有关其产品的管理信息。这些讯息包含了CPU/Memory的serial number、manufacturer、speed等资料,也有PCIe Device、USB Device、或是Redfish Service等资讯,基本上都是Platform 上的韧体和硬件讯息。

访问 SMBIOS 信息

SMBIOS存储在NVRAM中,如果是non-UEFI 系统,可以通过在物理内存地址范围 000F0000h 到 000FFFFFh搜索anchor-string(_SM_),找到SMBIOS的EPS(Entry Point structure)

如果是UEFI-based 系统可以直接搜寻GUID找到(SMBIOS_TABLE_GUID, {EB9D2D31-2D88-11D3-9A16-0090273FC14D}UEFI Specification 2.8 Errata B, May 2020

SMBIOS 结构

SMBIOS Table是由很多个SMBIOS 结构所组合而成的,每个 SMBIOS 结构都有一个格式化部分和一个可选的未格式化部分。每个结构的格式化部分都以一个 4 Byte 的标头开始。格式化部分中的剩余数据由结构类型决定,格式化部分的总长度也是如此。

以底下图为例,如果SMBIOS中有两个Type 4(Processor)的结构,表示BIOS所在的主板上有两个CPU socket

SMBIOS 结构类型

在SMBIOS Spec中有定义目前支援的SMBIOS结构类型,各家厂商的BIOS也可以在自定义范围内定义其他类型

结构的使用指南

这边用Spec中的BIOS Information (Type 0)范例介绍,确定好结构类型后,找到相对应的表,填入相对应的值,如果值的类型是STRING,就填入是未格式化区域中的第几个字串,如果没有字串,就填0

如果想写工具代码处理SMBIOS,就可以定义结构,套上去就能处理的值

当然有些值是要查表的,代码中也要产生一个表才能对应

自定义SMBIOS 结构类型

在Spec中有提到Type 128~256可供OEM defined

像是intel在Intel® Rack Scale Design BIOS & BMC Technical Guide中就有自定义像NIC,HD和PCIe等Type

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值