999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于UEFI的SMBIOS設計與研究

2013-09-10 01:19:00朱賀新王正鵬
計算機工程與設計 2013年9期
關鍵詞:規范服務信息

朱賀新,王正鵬

(1.北京工業職業技術學院 信息工程系,北京100042;2.瞬聯軟件科技 (北京)有限公司,北京100102)

0 引 言

系統管理基本輸入輸出系統 (system management basic input output system,SMBIOS)負責收集系統信息,提供給操作系統,用于操作系統安裝與管理。由于計算機涉及的軟硬件種類繁多,每種設備的品牌、型號、版本各不相同,各種配置的組合致使機型數目巨大,操作系統無法根據各種機型逐一定制,因此需要SMBIOS的支持。從計算機分層設計角度出發,操作系統不會直接掃描全部計算機固件和硬件,他需要基本輸入輸出系統 (basic input output system,BIOS)的支持,BIOS負責初始化硬件設備,收集計算機系統信息和引導操作系統。BIOS中的系統軟硬件基本信息將以SMBIOS的形式組織,并提供給操作系統訪問。SMBIOS是BIOS的核心組成部分之一,是計算機系統不可或缺的部分。目前有關SMBIOS的研究多集中在SMBIOS所提供信息的應用,如通過讀取SMBIOS表用于生成隨機數并加密[1],讀取特定表項并分析以讀取系統固件[2],使用表項進行雜湊并數字簽名[3],傳輸整個SMBIOS表[4]。有關架構設計及實現方法的資料比較缺乏,工程師在開發SMBIOS過程很難獲得指導其開發的相關資料,而SMBIOS的開發與客戶化定制是目前工程應用中研發熱點與難點之一,本文源自實際工程應用,針對研發過程,系統介紹SMBIOS架構和參考實現,從而為SMBIOS研發工程師及相關領域的研究提供指導。

1 技術綜述

1.1 UEFI

BIOS介于硬件和操作系統之間,負責系統加電自檢,硬件設備初始化,執行驅動和某些應用程序,收集系統信息,屏蔽硬件差異,引導操作系統并提供系統調用。統一可擴 展 固 件 接 口 (unified extensible firmware interface,UEFI)是替代傳統BIOS的升級方案[5]。UEFI規范定義了固件于固件之間,固件與操作系統之間的接口與服務,相比傳統BIOS,UEFI采用全新的架構與模塊化設計[6]的理念;具有豐富的可擴展性,良好的兼容性,絕大多數采用C語言開發,易于開發與維護,UEFI規范中已定義SMBIOS_TABLE_GUID用來定位SMBIOS表因而本文在UEFI的基礎上設計SMBIOS。

1.2 SMBIOS

系統管理BIOS (system management BIOS,SMBIOS)規范定義了用戶或者應用程序存儲和訪問計算機系統信息的一系列數據結構 (即信息存放格式)以及訪問方法[7](例如如何在系統中獲得SMBIOS所描述的計算機系統信息),是主板或系統制造者以標準格式顯示產品管理信息所需遵循的統一規范。根據SMBIOS規范,系統管理者可以獲取系統各部件的型號,參數設置,所處狀態等一系列信息,通常SMBIOS實現至少包含BIOS,整機,主板,內存,CPU,端口和集成設備的詳細信息。

SMBIOS的數據存儲結構由兩部分構成:入口結構(Entry Point Structure,EPS)表和SMBIOS數據表,EPS表對SMBIOS版本,SMBIOS數據表在內存中存儲位置,長度等信息進行說明。SMBIOS數據表對計算機系統各組件的數據存儲及結構進行詳細說明。SMBIOS EPS表部分結構見表1。

表1 EPS結構

通過EPS表結構中的16H以及18H處,獲得數據表長度和數據表地址,即可訪問結構表。從EPS表中的1CH處可得知SMBIOS數據表表項的總數。

2 架構設計

為實現對SMBIOS規范的支持,基于固件和軟件相關規范設計了SMBIOS系統架構,如圖1所示。

圖1 SMBIOS系統架構

SMBIOS核心服務部分主要需要完成兩方面功能,首先將負責創建EPS并將其注冊到固件系統;其次需要提供SMBIOS表項的操作接口,操作接口需要完成如下方面功能:添加SMBIOS數據表項;更新表項中字符串信息;刪除數據表項;查找獲取某數據表項。

SMBIOS數據表定制部分需要動態收集或靜態填充相關規范所定義的數據表項信息,并調用SMBIOS核心服務部分提供的操作接口將組織好的SMBIOS表項添加到SMBIOS表中。該部分負責SMBIOS表項安裝功能,提供針對特定環境或系統客戶定制話開發,該部分至少需要包括如下信息:BIOS廠商信息,版本信息,編譯時間;BIOS制造商名稱,產品名稱,產品序列號;主板制造商信息,序列號;SMBIOS結束表。

操作系統及應用部分將根據UEFI提供的接口和傳遞的數據,訪問SMBIOS數據表內容。

3 核心實現

UEFI系統維護著一張系統表 (system table),每個UEFI驅動程序或應用程序的程序入口參數都包含該表信息,它包含了UEFI系統的服務與信息,主要的服務包括引導時服務 (boot service)和運行時服務 (runtime service),通過這兩種服務可以獲取UEFI多數資源。System table同時也包括各種固件版本信息、錯誤信息等,系統配置信息表 (EFI configuration table)也包含在系統表中,常用的工業規范都將在本表中描述。如高級電源管理接口[8]、SMBIOS。各系統配置表的表項采用全局唯一標識符(globally unique identifier,GUID)與各表項內容對應,通過該唯一的GUID可以訪問到各表信息。

UEFI規范僅對其進行功能與接口定義,無相關實現方案。相關參考代碼僅對System table給出了框架實現,系統配置信息表中并沒有具體的信息表或工業規范表,我們所需要的SMBIOS表也沒有創建。此時我們需要將SMBIOS表實現,并且注冊到系統配置信息表中,并且以gE-fiSmbiosTableGuid為識別標識。下面具體介紹如何在UEFI中實現SMBIOS表。

3.1 核心服務實現

UEFI核心代碼 (foundation code)已搭建UEFI框架,已經實現EFI系統表的主體部分,且創建了運行UEFI所需的基礎協議 (PROTOCOL)。此時的UEFI系統基本可以運行,但對于各工業規范尚未全部支持,客戶定制化功能缺乏。

SMBIOS的數據存儲結構由EPS表和SMBIOS數據表構成,其中EPS部分通過gEfiSmbiosTalbeGuid可以直接定位。SMBIOS數據表可以通過ESP中的指針尋址并定位。SMBIOS在內存中以特定的字符標識,而這些特定字符定義在EPS表中,按照SMBIOS規范定義EPS數據結構如圖2所示。其中 AnchorString的值為 “_SM _”,IntermediateAnchorString的值為 “_DMI_”,在查詢SMBIOS表時,我們可以在區域內存中搜索這兩個標識來定位SMBIOS表。

圖2 EPS數據結構

在SMBIOS規范實現時需要將上述結構體中定義的各項均填充完整,由于命名顯而易見各域所代表的內容,此處不贅述,僅著重說明一個域---TableAddress,該地址標識實際的表項 (即SMBIOS Table Type)在內存中的物理地址。只要找到這個地址,即可根據SMBIOS規范所定義的各個表項的數據結構解析。

根據箱梁的幾何尺寸,建立ANSYS實體計算模型。雙面組合連續箱梁有限元模型如圖2所示,橫截面如圖3所示。本文采用三維六面體映射網格劃分的方法,截面網格劃分基本與二維模型相同,縱向單元長度約為0.3 m。模型單元總數為38 812個,節點數為66 823個。

為實現上述架構所設計的SMBIOS核心服務,需要使用一個UEFI的驅動程序,采用Protocol的形式,提供一組SMBIOS核心服務,gEfiSmbiosProtocolGuid作為該服務的唯一標識,定義如下:

UEFI系統中任意階段和位置只要該SMBIOS Protocol已通過InstallProtocolInterface安裝到UEFI系統中,即可通過gEfiSmbiosProtocolGuid獲取到SMBIOS相關的服務。針對核心服務功能需求定義增加數據表項,更新字符串,移除表項,獲取表項接口。

SmbiosAdd函數能將Record的內容添加到已有的SMBIOS Record之后,并返回新添加到Record的句柄SmbiosHandle,該句柄是作為此Record的身份識別標志,在后續移除某項紀錄或添加字符串,都需要使用該句柄。該函數將實現SMBIOS各表項 (Item)或者不同類型的表(Type)的添加,實現表項的增加,原型定義如下:

SmbiosUpdateString函數根據將使用This指針將待寫入的字符串信息 (String),根據已有Record紀錄所對應句柄 (SmbiosHandle),寫入到對應的位置 (StringNumber參數所指示位置)。該函數將實現SMBIOS各表項 (Item)或表 (Type)中字符串的添加功能,原型定義如下:

SmbiosRemove()和SmbiosGetNext()原型定義與SmbiosAdd(),SmbiosUpdateString()類似,原型在此不額外贅述,僅對參數及功能進行說明:SmbiosRemove函數根據將使用This將句柄SmbiosHandle所指示的的SMBIOS表項從SMBIOS整體表結構中移除。SmbiosGet-Next將使用This通過給定的參數,查找SmbiosHandle的下一個表項,并返回該表項所對應的句柄。如果Smbios-Handle輸入值為0,則表示返回第一個SMBIOS Record所對應的句柄。返回句柄為0時,表示此時SMBIOS不存在SMBIOS Record,簡而言之,此刻無SMBIOS表項。

當上述核心服務函數各自功能完成之后,需要將上述服務安裝到UEFI系統之中,且于預先定義的gEfiSmbiosProtocolGuid相關聯,可以通過UEFI提供的系統服務InstallProtocolInterface實現SMBIOS核心服務函數與gE-fiSmbiosProtocolGuid關聯并安裝到UEFI系統之中。具體實現如圖3所示。

3.2 數據表定制

圖3 核心服務安裝

本部分最重要的工作是通過gEfiSmbiosProtocolGuid定位到一個可以使用的實例 (instance),并通過該實例調用SMBIOS核心服務,通過SmbiosAdd()和SmbiosUpdateString()核心服務添加表項和字符串。為便于客戶化定制,我們設計一個單獨的驅動程序來完成該任務。該驅動的入口點為SmBiosTableDxeInitialize。如圖4所示。

圖4 數據表定制

第一個方框表示程序的入口地址及入口參數,系統表指針即通過第二個參數傳入,當需要使用系統服務的時候可以通過SystemTable參數獲取,如需要使用運行時服務可以通過gBS=SystemTable->BootServices的方法獲得。第二個方框完成的主要工作是通過gEfiSmbiosProtocolGuid定位到一個可以使用的Smbios實例,后續的表項添加刪除及定位操作都需要使用Smbios實例;第三個方框所封裝的行數將通過調用SmbiosAdd(),SmbiosUpdateString()等將收集到的系統硬件固件各狀態、版本等信息填充到各個表項并安裝至UEFI系統配置表。

各表項安裝原理相似,都是先將該表項的表頭添加通過SmbiosAdd()核心服務添加到現有的SMBIOS表中,然后通過SmbiosUpdateString()更新具體的字符串,下面已SMBIOS規范規定的某一個表項 (類型3)進行簡單說明。如圖5所示。

圖5 數據表項

UpdateSysEnclosureInfoTable函數將創建一個表項(type 3),它將在創建SMBIOS Table表項時被調用,見圖4最后一行代碼顯示調用。本函數使用SmbiosAdd()核心服務通過Smbios->Add的形式將smbiosSysEnclosureInfo實例添加到表項,并返回SysEnclosureHandle句柄以供后續更新字符串或刪除表項使用;同時使用更新字符串核心服務將Test Manufacturer[My Paper Co.,Ltd.]和 Test String Version Number 1.0.0For My Paper更新到SysEnclosureHandle所對應的表項。

4 驗 證

對于本文所的設計方案,已進行相關的代碼測試及實際運行環境驗證,相關的測試與驗證結果如下:

UEFI提供了一套類似于Linux shell的環境,可用來代碼驗證和測試:我們在UEFI shell[9]環境下讀取出整個SMBIOS Table的內容,其中有關 UpdateSysEnclosureInfoTable()部分所寫入的字符串信息截圖如圖6所示。

圖6 UEFI Shell驗證結果

圖6右側方框即為UpdateSysEnclosureInfoTable()函數所寫入的字符串信息的Ascii碼顯示,而其左側則為對應的二進制顯示信息,通過SMBIOS Table解析程序解析完該 表 后 可見該表 類 型 為 System Enclosure (Type 3),Manufacturer為 Test Manufacturer[My Paper Co.,Ltd.],版本 信 息 為:Test String Version Number 1.0.0For My Paper,至于其他信息暫時沒有填充全面,但作為真實的對外銷售產品,其余各項已被補全。

使用 Win32 系統函數 GetSystemFirmwareTable[10-11]也可以去讀SMBIOS信息。如圖7所示,在windows控制臺(cmd.exe)下運行讀取SMBIOS的可執行文件,打印出整個SMBIOS表。本程序僅顯示出整個SMBIOS表,并未逐項解析各表。(由于涉及所使用的真實硬件平臺某項私密信息,故將某些部分模糊化處理)為了便于閱讀與理解,此處都是以Ascii形式輸出,由于每個表項皆有各自表頭,表頭信息打印出來的不一定是可讀的Ascii碼,故比較凌亂。

圖7 Win32API驗證結果

Windows下微軟也提供了相應的 組件讀取SMBIOS Table的內容,我們可以使用 WMI[12](Windows Management Instrumentation)讀取SMBIOS信息;圖8是基于WMI的Win 32控制臺程序的運行結果。該程序對各類型的SMBIOS表項進行了解析,劃線部分內容為Update-SysEnclosureInfoTable()函數所寫入字符串信息。

圖8 WMI驗證結果

綜上各環境下的運行結果可見此設計方案具有可行性,在UEFI shell和Windows下均可被各自系統識別且運行結果與期望結果一直。

5 結束語

本設計適用于基于UEFI的SMBIOS相關的研究與開發。由于采用分層設計且符合UEFI規范,較傳統BIOS實現本設計可通過GUID定位SMBIOS并讀取其內容;模塊化設計易于開發、集成與測試,核心服務與SMBIOS數據表分離的設計,Protocol形式提供核心服務,簡單易用;SMBIOS數據表采用單獨驅動實現,方便擴充數據表內容及客戶化定制。本文已進行代碼實現且在真實平臺上正確運行,對設計方案進行全面的驗證,確保設計可行性與可實現性。由于BIOS異常將導致計算機無法啟動,后續需要提升程序容錯能力,錯誤恢復與旁路 (by pass)以增強程序健壯性。

[1]LI Mogang.The software protection research based on SMBIOS[D].Lanzhou:Lanzhou University,2008:14-25 (in Chinese).[李模剛.基于SMBIOS的軟件保護研究 [D].蘭州:蘭州大學,2008:14-25.]

[2]WANG Xiaozhen,ZHOU Zhenliu,LIU Baoxu.Design and implementation of BIOS sampling and analyzing system [J].Computer Engineering,2011,37 (11):2-3 (in Chinese).[王曉箴,周振柳,劉寶旭.BIOS采樣分析系統的設計與實現[J].計算機工程,2011,37 (11):2-3.]

[3]Currid Andrew,Overby Mark A.System and method to accelerate identification of hardware platform classes [P].United States:US2008043000,2008-02-21.

[4]Shah Hemal V,Hurd Stephen,Swindell Robert R.Method and system for a platform level data model and messages for transferring SMBIOS structures and data [P].United States:US2009019278,2009-01-15.

[5]ZHANG Ying,ZHOU Changsheng.Analysis and development of USB device driver on UEFI [D].Dalian:Publishing House of Electronics Industry,2009:217-220 (in Chinese). [張穎,周長勝.基于可擴展固件接口的USB設備驅動的開發與研究[D].大連:電子工業出版社,2009:217-220.]

[6]UEFI Inc.Unified extensible firmware interface specification version2.3 [EB/OL]. [2012-11-13].http://sourceforge.net/,2009/.

[7]DMFT Inc.System management BIOS (SMBIOS)reference specification version 2.7.1 [EB/OL].[2012-11-13].http://www.dmtf.org/,2011-01-26/.

[8]Hewlett Packard Corp,Intel Corp,Microsoft Corp,et al.ACPI specification [EB/OL]. [2012-11-13].http://www.acpi.info/spec.htm,2011/.

[9]U EFI Inc.Shell command reference manual revision 2.0 [EB/OL].[2012-11-13].http://sourceforge.net/,2008/.

[10]Microsoft Corp.Get system firmware table function(Windows)[EB/OL]. [2012-11-13].http://msdn.microsoft.com/en-us/library/windows/desktop/ms724379 (v=vs.85).aspx,2012-10-16/.

[11]Microsoft Corp.SMBIOS support in Windows [EB/OL].[2012-11-13]. http://msdn.microsoft.com/en-us/library/windows/hardware/gg463136.aspx,2005-04-25/.

[12]XIE Wei.Design and implementation of multichannel data collecting system [D].Shenyang:Shenyang Ligong University,2010:44-52 (in Chinese).[解威.多通道數據采集系統的設計與實現 [D].沈陽:沈陽理工大學,2010:44-52.]

猜你喜歡
規范服務信息
來稿規范
來稿規范
PDCA法在除顫儀規范操作中的應用
來稿規范
服務在身邊 健康每一天
今日農業(2019年12期)2019-08-15 00:56:32
服務在身邊 健康每一天
今日農業(2019年10期)2019-01-04 04:28:15
服務在身邊 健康每一天
今日農業(2019年16期)2019-01-03 11:39:20
招行30年:從“滿意服務”到“感動服務”
商周刊(2017年9期)2017-08-22 02:57:56
訂閱信息
中華手工(2017年2期)2017-06-06 23:00:31
展會信息
中外會展(2014年4期)2014-11-27 07:46:46
主站蜘蛛池模板: 国产18在线| 欧美不卡二区| 日韩无码视频播放| 国产区精品高清在线观看| 国产真实乱了在线播放| 日本一区高清| 国产精品999在线| 国产免费久久精品99re不卡| 色婷婷在线播放| 日韩精品一区二区三区免费在线观看| 亚洲 欧美 日韩综合一区| 91亚洲精品第一| 88av在线播放| 亚洲成肉网| 九九热精品免费视频| 伊在人亞洲香蕉精品區| 日韩成人免费网站| 精品少妇人妻一区二区| 欧美精品H在线播放| 在线免费观看AV| 最新午夜男女福利片视频| 色AV色 综合网站| 夜夜爽免费视频| 一级毛片在线直接观看| 91在线日韩在线播放| 手机成人午夜在线视频| 精品三级在线| 国产女人18水真多毛片18精品| 欧美成人午夜视频| 日本国产精品一区久久久| 国产自视频| 波多野结衣无码中文字幕在线观看一区二区 | 中文字幕欧美日韩高清| 99精品热视频这里只有精品7| 丰满人妻一区二区三区视频| 亚洲二区视频| 色婷婷啪啪| 国产在线视频自拍| a毛片基地免费大全| 一级全黄毛片| 日韩午夜福利在线观看| 色欲综合久久中文字幕网| 久精品色妇丰满人妻| 精品无码一区二区三区在线视频| 特级做a爰片毛片免费69| 国产福利小视频在线播放观看| 草草影院国产第一页| 国内嫩模私拍精品视频| 五月天福利视频| 精品一区二区三区自慰喷水| 国产真实二区一区在线亚洲| 国产99热| 午夜少妇精品视频小电影| 国产又爽又黄无遮挡免费观看 | 高潮毛片无遮挡高清视频播放| 亚洲欧美日韩天堂| 高清久久精品亚洲日韩Av| 四虎综合网| 亚洲国产在一区二区三区| 国产永久无码观看在线| 日韩欧美国产区| 日本AⅤ精品一区二区三区日| 波多野结衣一区二区三区四区 | 不卡无码h在线观看| 成人年鲁鲁在线观看视频| 亚洲成人网在线观看| 成人免费一级片| 综合社区亚洲熟妇p| 国产亚洲精久久久久久无码AV| 国产精品手机在线观看你懂的| 国产凹凸一区在线观看视频| 伊人色天堂| 亚洲综合色区在线播放2019| 热99精品视频| 国产在线八区| 午夜国产大片免费观看| 老司机精品99在线播放| 国产成人综合亚洲网址| 欧美国产在线看| 亚洲成人手机在线| 亚洲成人一区二区三区| 尤物视频一区|