鄭媛 孫建英 康艷麗


摘? 要:在服務器開機啟動過程中時,BIOS會進行上電自檢,對主板部件和接入設備進行檢測,以確保硬件設備正常運行。但在實際應用中,因為檢測信息的顯示方式和內容的限制,會給用戶檢查設備健康狀態帶來不便。服務器BIOS啟動過程設備檢測信息顯示功能模塊化,可以將服務器啟動過程中各階段設備信息,設備檢測信息及設備故障原因信息進行收集,實現更直觀、更詳細的設備檢測信息顯示。功能模塊化既便于BIOS代碼的維護,也利于用戶及時通過啟動過程了解到設備信息及健康狀態,提高用戶使用便利性。
關鍵詞:服務器;BIOS;啟動過程;設備檢測;信息顯示;模塊化
中圖分類號:TP368.5? 文獻標識碼:A? 文章編號:2096-4706(2023)23-0061-04
Modularization of the Device Detection Information Display Function during the Server Startup Procedure
ZHENG Yuan1, SUN Jianying2, KANG Yanli1
(1.Inspur Electronic Information Industry Co., Ltd., Ji'nan? 250101, China;
2.Inspur (Shandong) Computer Technology Co., Ltd., Ji'nan? 250101, China)
Abstract: During the server startup procedure, the BIOS will perform a power-on self-test to detect the motherboard components and access devices to ensure the normal operation of the hardware devices. However, in the practical application, due to the limitation of the display mode and content of the detection information, it will be inconvenient for the user to check the health status of the devices. The devices detection information display function of the server BIOS startup procedure is modularized, and the devices information, devices detection information, and devices failure cause information at each stage of the server startup procedure can be collected to achieve more intuitive and detailed device detection information display. The function modularization is not only convenient for the maintenance of the BIOS code, but also beneficial for the user to know the device information and health status through the startup procedure in time. It improves the convenience of the user.
Keywords: server; BIOS; startup procedure; device detection; information display; modularization
0? 引? 言
在服務器的硬件系統中,基本輸入輸出系統(Basic Input Output System, BIOS)作為固化到計算機主板一個ROM芯片上的程序,起到了重要的作用。它是一組固件,實現服務器上電開機啟動過程對主板上的處理器(CPU)、內存、芯片組(Chipset)、PCIE設備,各種輸入輸出設備的初始化,以及提供基本的輸入輸出(I/O)功能。在服務器開機時,BIOS 會進行硬件檢測并顯示檢測信息,以確保硬件設備正常。但在實際應用中,因為檢測信息的顯示方式和內容的限制,會給用戶檢查設備健康狀態帶來不便,往往無法及時發現或定位問題。因此,如何改進服務器啟動過程中設備檢測信息顯示功能,提高其可用性,顯得尤為重要。
1? BIOS啟動過程
目前服務器BIOS的啟動過程遵循統一可擴展固件接口[1](Unified Extensible Firmware Interface, UEFI)平臺初始化標準規范,分為7個階段[2]:
1)安全驗證階段(Security, SEC),UEFI BIOS啟動的第一個階段,主要任務有處理系統上電和重啟;創建緩存(Cache)作為臨時內存,讓啟動程序先運行在ROM上;提供安全信息可信鏈[3]的根;將系統參數傳遞給到下一個階段。
2)在EFI前期初始化階段(Pre-EFI Initialization, PEI),UEFI BIOS啟動程序從ROM執行轉向到內存執行,同時會對一系列主板硬件設備進行早期初始化,處理器(CPU),芯片組(Chipset),內存控制器,I/O控制器等,并準備HOB(Hand-Off Block)[4]數據列表,為后面DXE階段準備執行環境。
3)驅動執行環境階段(Driver Execution Environment, DXE),執行啟動過程中大部分的系統初始化工作,負責初始化處理器(CPU),芯片組(Chipset),內存,PCIE設備等,為硬件提供驅動程序。
4)啟動設備選擇階段(Boot Device Selection, BDS)負責發現每個啟動設備,并執行啟動策略。
5)操作系統加載階段(Transient System Load, TSL)將系統控制器轉移給操作系統的中間階段。
6)運行時階段(Runtime, RT)為操作系統運行階段。
7)災難恢復階段(After Life, AL)。
1.1? BIOS上電自檢過程
BIOS啟動過程上電自檢(Power On Self Test, POST)[5]階段主要是指SEC,PEI,DXE,BDS階段,對個主板部件設備進行初始化和檢測。以英特爾X86服務器為例,BIOS啟動的PEI階段和DXE階段會使用英特爾RC(Reference Code)參考代碼對關鍵部件CPU處理器,芯片組PCH(Platform Controller Hub),內存等進行初始化。其中CPU初始化,包括CPU微碼加載檢測,CPU信息讀取,CPU相關功能寄存器設置,CPU早期故障檢測,CPU和CPU互聯超級通道互連(Ultra Path Interconnect, UPI)鏈路檢測,處理器集成IO PCIE根端口(Root Port)帶寬分配,啟動處理器集成IO PCIE根端口鏈路訓練;PCH芯片組初始化;內存檢測,內存訓練,內存測試等內存相關初始化;英特爾RC參考代碼執行之后,BIOS還會進行PCIE設備枚舉,USB等設備檢測;DXE階段后期顯示器屏幕點亮,屏幕顯示熱鍵快捷信息,系統信息,BDS階段加載啟動項,之后啟動到系統。
1.2? 啟動過程中設備檢測現狀
BIOS對主板部件和設備的檢測主要分布在啟動過程的PEI和DXE階段多個代碼函數中,設備信息和檢測過程都比較分散。之前BIOS代碼部件設備信息收集都是在各階段BIOS源代碼中打補丁的方式,主板部件及設備檢測結果大部分都是在各階段通過增加功能函數將檢測失敗的結果通過KCS[6]接口上報給服務器帶外管理固件基板管理控制器[6](Baseboard Management Controller, BMC),記錄到BMC的SEL[7]日志中。例如,如果內存檢測和訓練出現失敗情況,通過封裝IPMI[8]命令按照SEL日志命令格式,經KCS接口發送給帶外管理固件BMC進行上報。用戶只能通過登錄BMC Web界面或者系統使用IPMI工具命令查看SEL日志內容,不能直觀了解當前服務器部件健康情況。目前啟動過程中也只有部分關鍵設備的信息顯示,信息顯示的功能代碼,也是在顯示源代碼中修改實現。
服務器研發階段BIOS源代碼隨英特爾RC參考代碼迭代升級比較頻繁,每次都需要將補丁代碼再重新導入源代碼中,有大量重復工作,有時候會出現人為疏忽導致補丁代碼遺漏情況。另外目前主流服務器多是提供部件信息,部件檢測情況沒有顯示,也不便于客戶直觀了解到設備運行情況。所以通過設計實現BIOS啟動過程設備信息及設備檢測信息顯示模塊化功能,對各部件設備信息的收集及各階段設備檢測結果進行整合,并通過功能模塊化對設備檢測信息集中顯示。
2? 設備信息檢測模塊構建
為了實現服務器啟動過程設備檢測信息顯示功能模塊化功能,需要對BIOS源程序進行修改和更新,構建獨立設備檢測功能模塊,命令為OemPOSTInfo模塊,該模塊主要實現將分散在BIOS啟動過程PEI階段和DXE階段的設備信息及檢測信息結果整合,并在DXE階段將設備檢測信息及故障原因進行集中顯示。
2.1? 設備信息檢測的模塊組成
OemPOSTInfo的模塊主要文件組成如下:
OemPOSTInfo的模塊按照UEFI BIOS模塊架構定義,模塊類型為:ModulePart,該模塊主要包括一個OemPOSTInfo.h, OemPOSTPeiInfo.inf和OemPOSTDxeInfo.inf兩個INF(Information File)[9]工程文件包,OemPOSTPeiInfo.inf文件包主要包含OemPOSTPeiInfo.c文件,OemPOSTDxeInfo.inf文件包主要包含OemPOSTDxeInfo.c文件。
2.1.1? 結構體文件設計
OemPOSTInfo.h主要是定義所要收集設備信息和設備診斷信息的結構體,以及HOB(Hand-Off Block)數據結構體用于PEI和DXE階段數據傳遞。具體結構體內容如下:
1)服務產品信息結構體:服務器廠商,服務器型號。
2)CPU信息結構體:CPU的型號,CPU個數,CPU的頻率,CPU的核數,CPU步進(Stepping)信
息,CPU微碼版本等。CPU檢測結果結構體:檢測結果PASS(成功)或Fail(失?。?,檢測失敗CPU位置,檢測失敗原因:CPU型號不匹配,CPU BIST自檢失敗,微碼加載失敗等。
3)UPI信息結構體:UPI端口互聯個數,UPI帶寬,UPI速率;UPI鏈路檢測結果結構體:檢測結果PASS(成功)或Fail(失敗),給出UPI鏈路檢測失敗原因,UPI鏈路降速,UPI鏈路降帶寬等。
4)內存信息結構體:內存廠商,內存型號,內存容量,內存個數,內存標稱速率,內存當前速率等;內存檢測結果結構體:檢測結果PASS(成功)或Fail(失?。瑘箦e內存位置,內存報錯錯誤代碼,內存報錯原因。
5)ME(Management Engine)信息結構體:英特爾SPS的版本,ME運行狀態(operation狀態還是recovery狀態);ME檢測結果結構體:ME自檢結果PASS(成功)或Fail(失?。?,ME自檢失敗的原因。
6)BMC信息結構體:BMC版本,BMC專口IP地址,共享口IP地址;BMC檢測結果結構體:BMC自檢結果PASS(成功)或Fail(失?。珺MC自檢失敗原因。
7)SATA硬盤信息結構體:硬盤廠家,硬盤型號,硬盤個數,硬盤的容量。
8)PCIE設備信息結構體:PCIe設備的BDF(Bus,
Device,Function,總線號,設備號,功能號),PCIE
設備廠家,PCIE設備型號,PCIE設備帶寬,PCIE設備速率。PCIE設備檢測結果結構體:檢結果PASS(成功)或Fail(失敗),PCIE設備檢測原因:PCIe設備丟卡,PCIe設備降速,降帶寬等。
部分結構體構建展示如圖1和圖2所示。
2.1.2? PEI階段文件設計
OemPOSTPeiInfo.inf工程文件包類型是PEIM,運
行在PEI階段,文件包中的主要文件是OemPOSTPeiInfo.c文件,該文件函數主要實現收集PEI階段CPU檢測信息,UPI信息及檢測信息,ME運行狀態信息等,通過創建HOB函數,將這些設備信息和故障診斷信息,更新到OemPOSTInfo.h定義的HOB數據結構體中,用于傳遞到下一個DXE階段。
2.1.3? DXE階段文件設計
OemPOSTDxeInfo.inf工程文件包類型是DXE_DRIVER,運行在DXE階段,文件包主要文件是OemPOSTDxeInfo.c文件,該文件按設備來創建函數,每個函數分為設備信息收集,設備檢測信息和診斷信息收集,設備信息和檢測信息結果通過調用封裝的DisplayPostMessage()函數在BIOS啟動過程POST界面顯示。例如,文件中CPUPostInfo()函數,由獲取設備信息子函數GetCPUInfo()將讀取CPU資產信息更新到CPU信息結構體,GetCPUPeiInfo()子函數通過調用GetHob函數獲取PEI階段CPU檢測信息,更新到CPU檢測結構體,DisplayCPUInfo()通過調用封裝的DisplayPostMessage()函數將CPU信息顯示在BIOS啟動過程POST界面,其他設備信息檢測函數功能類似,具體功能實現下面進行詳細介紹。
2.2? 信息檢測模塊功能實現
各部件設備信息及檢測信息,故障原因收集的具體實現方法如下:
BIOS通過讀取SMBIOS Table表收集CPU和內存設備資產信息。SMBIOS(System Management BIOS)
是主板或者系統制造廠商以標準格式顯示產品信息所遵循的統一規范,在BIOS POST界面顯示階段,CPU和內存資產信息已經更新到SMBIOS Type 4[10](CPU信息),Type 7[10](內存信息)中,所以我們可以通過編寫函數,直接從SMBIOS表中讀取CPU和內存設備資產信息,更新到OemPOSTInfo.h定義CPU和內存信息結構體中。
在DXE階段OemPOSTDxeInfo.c文件各設備函數中,CPU檢測信息,UPI信息及檢測信息,ME運行狀態信息等,是通過GetHob函數讀取BIOS在PEI階段通過存入HOB數據結構體更新到OemPOSTInfo.h定義設備信息結構體中。
BIOS還通過和設備接口交互獲取設備資產信息,在OemPOSTDxeInfo.c文件各設備函數更新到OemPOSTInfo.h定義信息結構體中。例如通過跟ME HECI接口獲取ME版本信息;通過IPMI命令跟BMC KCS接口獲取BMC版本,BMC網絡IP地址,BMC自檢結果;通過PCIE設備配置空間,獲取PCIE設備廠商,設備型號信息,當前運行帶寬和運行速率,檢測PCIE設備是否有出現降速降帶寬等;通過SATA接口讀取接入硬盤數量,硬盤廠商,型號,容量信息等。
通過定義pcd全局變量,將處理器集成IO PCIE根端口(Root Port)鏈路訓練失敗,導致PCIe設備丟卡的根端口BDF信息,通過SetPcd函數設置到已定義的pcdPCIeLinkFail全局變量中,在OemPOSTDxeInfo.c文件PciePostInfo()函數中通過GetPcd函數獲取pcd全局變量值,更新到OemPOSTInfo.h定義信息結構體中。
在定義的每個部件設備信息檢測顯示函數中,最后都需要將更新到各結構體中的數據轉換成Unicode格式字符串,通過調用封裝的DisplayPostMessage()函數在BIOS啟動過程顯示到POST界面。
模塊執行流程圖如圖3所示,BIOS啟動階段截圖如圖4所示。
2.3? 信息檢測模塊功能應用
目前設備信息檢測模塊在研發階段通過編譯和調試后已增加到BIOS源代碼中,升級后的BIOS版本已發布給到測試部門。測試部門經過測試驗證,升級后的BIOS版本已經應用到部分服務器項目,功能正常運行。內部測試部門經過測試反饋,新增的設備信息檢測模塊可以幫助測試部門在測試過程中更方便,直觀地看到當前服務器設備的運行健康狀態,設備出現檢測失敗,可以及時排查產生失敗原因。
3? 結? 論
設備檢測信息模塊實現BIOS啟動過程設備信息及設備檢測信息顯示功能模塊化,功能的模塊化利于BIOS代碼的維護,避免每次BIOS源代碼升級在源文件中打補丁的方式,同時減少重復工作,可以避免人為疏忽導致補丁代碼遺漏情況,提高工作效率。
設備檢測信息模塊實現了服務器啟動過程更詳細的設備信息及檢測信息顯示,并給出設備檢測失敗的原因,便于用戶在服務器啟動階段更直觀地了解各部件設備的健康狀態,對故障設備及時處理,提高了用戶的使用便利性。
參考文獻:
[1] Unified EFI Forum. Unified Extensible Firmware Interface Specification Version 2.7 [EB/OL].(2023-03-09).http://www.uefi.org.
[2] 戴正華.UEFI原理與編程 [M].北京:機械工業出版社,2015.
[3] 周振柳,李銘,翟偉斌,等.基于UEFI的可信BIOS研究與實現 [J].計算機工程,2008,34(8):174-176.
[4] 羅冰.UEFI編程實踐 [M].北京:機械工業出版社,2021.
[5] 韓山秀,樊曉椏,張盛兵,等.BIOS的設計與實現 [J].微電子學與計算機,2005,22(11):113-120.
[6] 汪濤.服務器基本輸入輸出系統和基板管理控制器之間紅魚接口的設計實現 [J].信息記錄材料,2022,23(3):154-156.
[7] 楊金穎,高文煒,羅雪等.基于VPX平臺的國產BMC設計與實現 [J].微電子學與計算機,2021,38(8):80-86.
[8] IPMI. Intelligent Platform Management Interface Specification Second Generation v2.0 Revision 1.0 [EB/OL].[2023-04-12].https://www.intel.com/content/dam/www/public/us/en/documents/specification-updates/ipmi-addenda-errata-clarifications-e7-2nd-gen-spec-v2-0-rev-1-0-1-1-spec-update.pdf.
[9] SourceForge. EDK II Module Information (INF) File Specification Revision 1.24 [EB/OL].[2023-04-16].https://sourceforge.net/projects/edk2/.
[10] DMTF. System Management BIOS (SMBIOS) Reference Specification Version: 3.0.0 [EB/OL].[2023-04-17].https://www.docin.com/p-1769934535.html.
作者簡介:鄭媛(1983.01—),女,漢族,山東臨沂
人,工程師,碩士,研究方向:服務器固件BIOS開發;孫建英(1979.07—),女,漢族,河北唐山人,工程師,本科,研究方向:服務器和PC部件;康艷麗(1983.07—),女,漢族,山東棗莊人,工程師,本科,研究方向:服務器系統測試。