[DMI] SMBIOS introduction
A.學習目標 (Clock generator introduction)
a. DMI與SMBIOS
b. 瞭解SMBIOS的架構
c. 瞭解SMBIOS的存取方式
d. 瞭解PnP function call
B.大綱
1. DMI v.s. SMBIOS
2. SMBIOS Architecture
3. SMBIOS Structure Table Entry Point
4. SMBIOS Structures
4.1 UUID
4.2 System Event Log
5. PnP Function Call
6. Utility Tool
C. SMBIOS Introduction
C.1. DMI v.s. SMBIOS
DMI (Desktop Management Interface, DMI)為搜集電腦系統訊息,在遵照SMBIOS規範下,DMI適用於任何平台與操作系統,
透過DMI,作業系統與應用軟體和用戶無須透過實際的硬體控制就能獲得電腦廠商名稱及硬體元件訊息。
DMI的訊息收集一般是由BIOS在POST過程中,將所偵測到的系統硬體資訊存在DMI Table中,
此Table會放在F segment中,在DMI Table中有分為動態資料,例如:Building BIOS時,並無動態資料結構,
只有在更新BIOS且在第一次POST過程中,若DMI Table不存在時,會動態建立DMI Table,並以動態方式更新DMI Table內容。
靜態資料如電腦廠商名稱。
SMBIOS (System Management BIOS, SMBIOS),它是一種定出主機板及系統廠商如何以標準的格式顯示產品管理資訊的規格。
SMBIOS 及 DMI(Desktop Management Interface)規格兩者皆是由 Desktop Management Task Force (DMTF) 所草擬的
(在Spec2.0後都稱為SMBIOS),
它是一個由業界所領導,實行技術規格以確認開放性標準的組織。[1]
目前SMBIOS Specification最新的版本是SMBIOS 2.6 (March 17, 2009)。
C.2. SMBIOS Architecture
在SMBIOS規範中,定義了二種方法可以存取SMBIOS:[2]
A. Plug-and-Play function interface
在SMBIOS Specification v2.3.2之後,則不推薦使用PnP function interface,建議使用Table-base method。
B. Table-base method
透過table entry point,可以獲得SMBIOS structures裡的各項資訊。
在SMBIOS Specification v2.1說明這兩種方法可以擇一選擇使用。但v2.2以後的版本,則規定一定要提供table-based method。
圖 10.1 SMBIOS Architecture
在系統中會有許多元件存取DMI Table(圖10.1)。例如在第一次POST階段時,會根據系統建立此Table。
此Table並不是每次更新,只要BIOS將此Table與目前系統上的元件做比對,只要有一個Byte不同就會重寫DMI Table。
此外,AP/Utility可直接或透過PnP Interface對DMI Table做存取的動作。
C.3. SMBIOS Structure Table Entry Point
在SMBIOS Spec中說明可在主記憶體000F0000h到000FFFFFh範圍之間搜尋”_SM_”,
則可以找到SMBIOS Structure Table的Entry Point。其Table內容如下:
表 10.1 SMBIOS Entry Point Table
* Offset 18h為Double Word型式的資料,代表Structure Table Address。
* Offset 1Ch為此系統目前有多少個Structure。
C.4. SMBIOS Structures
在介紹SMBIOS的Structure之前,我們先介紹Structure內有一個欄位是填寫此Structure所對應的Type。
其中Type0和Type1各只能有一個,不能重覆,也就是說只能有一個屬於Type0的Structure。同理,Type 1也是一樣的意思。
表10.2 Structure Name and Type
接下來則介紹SMBIOS Structure的結構(表10.3)。
每個SMBIOS Structure的Header都一定是由Type(表10.2)、Length、Handle這三個欄位共4Bytes所組成,
在系統中只能有一種Structure,但Type可以重覆(除了Type0和Type1)。
若系統中有二個屬於同一種Type的Structure,則Structure的Handle值一定會不一樣。例如:Memory Device。
表10.3 SMBIOS Structure Header
這邊以Type0的做為一個例子。
表10.4 BIOS Information Type 0 Table
表10.4 則為一個完整的SMBIOS Structure Table,前4Bytes為固定欄位,後面欄位則是描述此系統的BIOS資訊。
例如: Offset 09h,表示BIOS ROM Size,其公式為64k * (n+1)。
C.4.1 UUID
在Type 1內有一欄位為UUID,作為Identifier,以16Bytes所組成,提供給Lan、網管使用。
若要查看細節,請參考Spec 2.6.1(3.3.2.1 System — UUID)。
C.4.2 System Event Log
System Event Log是屬於Type15,可回傳有關System Event資料,像是Post error event、Memory error、
CPU temperature(可參考表10.5)。
System Event Log儲存在非揮發性記憶體中固定長度的區域。
表10.5 System Event Log Type
C.5. PnP Function Call
SMBIOS現今較少使用PnP Function Call,但是若廠商要求使用,還是必須建置此功能。
在PnP BIOS Spec中,定義了如何使用PnP Function Call[3],表10.6定義了SMBIOS相關的PnP Function。
PnP Function 能在Real mode和Protect mode底下使用,使用時會保留所有Register的值,
但除了AX Register除外,因為AX Register會包含Return Code(表10.7)。
表10.6 SMBIOS Functions
表10.7 Error Return Codes
Call Function Call的步驟如下:
■ STEP1: 搜尋PnP Signature
在記憶體F0000h到FFFFFh之間的範圍,搜尋$PnP字串,若能尋找成功,代表有支援PnP Function。
表10.8 Expansion Header for Plug and Play
■ STEP2: 檢查Checksum
若Checksum為0,則代表正確。Checksum欄位為1Byte。
■ STEP3:找出Segment Base和Offset
以Protect Mode為例,在PnP entry point的offset 13和11h的分別指出Segment:Offset的位置,
此位置代表了PnP Function Call的進入點。
不過其中有一個限制是PnP Function Call的範圍會在此Segment前面的16 bits(64K),
這是為了能確保在一定的範圍內搜尋到PnP Function Call。
■ STEP4:設定參數
如果系統是在32 bit的Protect Mode,Stack最大可達到32 bits,其作用是可供PnP Function暫時儲存參數。
但是儲存PnP Function的參數並不會完全使用到32 bits,只使用16 bits,
因此呼叫PnP Function時,必須確保是push 16 bits的值,而不是32 bits,
其示意圖如下:
圖10.9 16-bit Stack Frame on 32-bit Stack
C.6. Utility Tool
Phoenix SMBCFG為一個可改寫SMBIOS的程式,需在DOS下執行,可增加或修改SMBIOS Type的值,
但某些重要Type的值無法修改,例如Type0 或 Type1的值。
參考資料
[1] http://stenlyho.blogspot.com/2008/09/smbios.html
[2] System Management BIOS (SMBIOS) Reference Specification Version 2.6.1
[3] Plug and Play BIOS Specification
留言
張貼留言