Computer‎ > ‎BIOS Learning‎ > ‎

SMBIOS introduction

A.學習目標 (Clock generator introduction)

a. DMISMBIOS

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的訊息收集一般是由BIOSPOST過程中,將所偵測到的系統硬體資訊存在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 InterfaceDMI Table做存取的動作。

 

C.3. SMBIOS Structure Table Entry Point

SMBIOS Spec中說明可在主記憶體000F0000h000FFFFFh範圍之間搜尋”_SM_”,
則可以找到SMBIOS Structure TableEntry Point。其Table內容如下:
    
    
     表 10.1 SMBIOS Entry Point Table

 

* Offset 18hDouble Word型式的資料,代表Structure Table Address

* Offset 1Ch為此系統目前有多少個Structure

 

C.4. SMBIOS Structures

在介紹SMBIOSStructure之前,我們先介紹Structure內有一個欄位是填寫此Structure所對應的Type

其中Type0Type1各只能有一個,不能重覆,也就是說只能有一個屬於Type0Structure。同理,Type 1也是一樣的意思。

     
    
    
     表10.2 Structure Name and Type

 

接下來則介紹SMBIOS Structure的結構(10.3)
每個SMBIOS StructureHeader都一定是由Type(10.2)LengthHandle這三個欄位共4Bytes所組成,
      在系統中
只能有一種Structure,但Type可以重覆(除了Type0Type1)

若系統中有二個屬於同一種TypeStructure,則StructureHandle值一定會不一樣。例如: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 eventMemory 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 modeProtect 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

在記憶體F0000hFFFFFh之間的範圍,搜尋$PnP字串,若能尋找成功,代表有支援PnP Function

     
    
    
     表10.8 Expansion Header for Plug and Play

 

STEP2: 檢查Checksum

Checksum0,則代表正確。Checksum欄位為1Byte

 

STEP3:找出Segment BaseOffset

Protect Mode為例,在PnP entry pointoffset 1311h的分別指出Segment:Offset的位置,
      此位置代表了PnP Function Call的進入點。
      不過其中有一個限制是PnP Function Call的範圍會在此Segment前面的
16 bits(64K)
      這是為了能確保在一定的範圍內搜尋到PnP Function Call

 

STEP4:設定參數

如果系統是在32 bitProtect ModeStack最大可達到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

Comments