2011年7月8日 星期五

SMBIOS 簡介

【轉貼】史丹利部落格

SMBIOS (System Management BIOS, SMBIOS),它是一種定出主機板及系統廠商如何以標準的格式顯示產品管理資訊的規格。SMBIOS 及 DMI(Desktop Management Interface)規格兩者皆是由 Desktop Management Task Force (DMTF) 所草擬的,它是一個由業界所領導,實行技術規格以確認開放性標準的組織。

對於符合SMBIOS規範的電腦,可以通過訪問SMBIOS的結構獲得系統訊息,共有兩種辦法可以訪問:

1.(刪除)

2.基於表結構的方法,表内容是tableentry point的數據,這個訪問方法從SMBIOS2.1以後開始被使用,從2.1開始,以後的版本都推薦使用這種訪問方式。在2.1版本中允許支援這兩種方法中的任意一種和兩種都支援,但在2.2已經以後的版本,必須支援方法2。

3.在SMBIOS規範中,定義了二種方法可以存取SMBIOS:
     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。

鑒於市場上計算機已經均支援SMBIOS2.3標准,所以只考慮方法2,基於表結構的訪問方式。

基於表結構訪問SMBIOS的過程是先找到EntryPoint Structure(EPS)表,然後通過EntryPoint Structure(EPS)表的數據找到SMBIOS數據表。

訪問SMBIOSEPS表的操作過程如下:

1.從物理内存0xF0000-0xFFFFF間尋找關鍵字“_SM_”

2.找到後再向後16個字節,看後面5個BYTE是否是關鍵字“_DMI_”,如果是,EPS表即找到。

注:按照SMBIOS規範説明,找到關鍵字”_SM_”後就可以確定此處就是EPS表結構,但我在實際操作中發現有為數不少的電腦的指定64K内存中有不只一個“_SM_”,所以不能只用找到”_SM_”來確定,需要繼續判斷16個字節後是否是“_DMI_”

ref: 史丹利部落格

沒有留言:

張貼留言