一種基于龍芯服務(wù)器的uefi固件實(shí)現(xiàn)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計(jì)算機(jī)固件技術(shù)領(lǐng)域,涉及一種基于龍芯處理器服務(wù)器計(jì)算機(jī)系統(tǒng)(以下簡稱龍芯服務(wù)器)的UEFI固件實(shí)現(xiàn)方法。
【背景技術(shù)】
[0002]UEFI (Unified Extensible Firmware Interface,統(tǒng)一的可擴(kuò)展固件接口)是一種計(jì)算機(jī)固件(或稱為B1S)的接口規(guī)范,也是關(guān)于固件的最主要的工業(yè)標(biāo)準(zhǔn)。UEFI規(guī)范最初是面向Intel公司的Itanium和X86處理器進(jìn)行制定的,但是UEFI規(guī)范本身是與處理器架構(gòu)無關(guān)的,目前已經(jīng)應(yīng)用于X86、Itanium、ARM等處理器平臺。符合UEFI規(guī)范的計(jì)算機(jī)固件(以下簡稱UEFI固件)相對于傳統(tǒng)的固件有很多優(yōu)越性,目前主流的X86商用計(jì)算機(jī)系統(tǒng)基本上都是采用了 UEFI固件。
[0003]龍芯(Loongson)是由中國科學(xué)院計(jì)算所研制的國產(chǎn)通用中央處理器,采用MIPS精簡指令集架構(gòu)。龍芯處理器已形成一系列產(chǎn)品,分別可應(yīng)用于嵌入式、臺式、便攜式計(jì)算機(jī)以及服務(wù)器產(chǎn)品。目前應(yīng)用于服務(wù)器產(chǎn)品的龍芯處理器主要是龍芯3A和龍芯3B。
[0004]PMON是一款開源固件,最初是為LSI Logic MIPS R3000評估板而設(shè)計(jì),后來成為MIPS領(lǐng)域評估板和開發(fā)系統(tǒng)的通用固件。官方的PMON固件已經(jīng)停止維護(hù)與發(fā)展,最新的PM0N2000是PMON的非官方后繼版本。龍芯廠商采用PM0N2000作為調(diào)試處理器的固件,并應(yīng)用在龍芯服務(wù)器解決方案中。但PMON與常規(guī)的UEFI計(jì)算機(jī)固件相比存在很多不足,主要表現(xiàn)在:ΡΜ0Ν項(xiàng)目在很多年前就已經(jīng)停止更新,在計(jì)算機(jī)工業(yè)界很少有廠家使用PMON或?qū)ζ溥M(jìn)行支持,因此PMON無法進(jìn)行規(guī)范化和得到發(fā)展;不像UEFI固件支持最新的計(jì)算機(jī)技術(shù),PMON代碼對很多技術(shù)規(guī)范都不支持,無法實(shí)現(xiàn)對一些常見功能的支持,比如ACPI (目前最為通用的電源管理技術(shù))、GRUB(目前最為通用的操作系統(tǒng)內(nèi)核加載器)等;與服?1固件相比,PMON沒有采用模塊化方法進(jìn)行設(shè)計(jì)實(shí)現(xiàn),可擴(kuò)展性不強(qiáng),開發(fā)維護(hù)也不方便。
【發(fā)明內(nèi)容】
[0005]本發(fā)明的目的主要是為了解決上述現(xiàn)有技術(shù)的缺陷,提供一種基于龍芯服務(wù)器的UEFI固件的實(shí)現(xiàn)方法。根據(jù)這個(gè)方法,可以在龍芯服務(wù)器上實(shí)現(xiàn)出符合國際主流UEFI固件規(guī)范、可擴(kuò)展性強(qiáng)、功能完善的固件產(chǎn)品,以支持龍芯服務(wù)器的正常啟動和運(yùn)行。
[0006]一種基于龍芯服務(wù)器的UEFI固件的實(shí)現(xiàn)方法,固件劃分為硬件抽象層、固件核心層、設(shè)備協(xié)議層和固件應(yīng)用層。
[0007]其中,硬件抽象層實(shí)現(xiàn)處理器、內(nèi)存、芯片組等關(guān)鍵硬件部件的初始化,對其他板級硬件進(jìn)行包裝和抽象并實(shí)現(xiàn)初始化,同時(shí)為上層模塊提供訪問底層硬件設(shè)備的函數(shù)接口。其包括處理器驅(qū)動模塊、芯片組驅(qū)動模塊和外設(shè)驅(qū)動模塊,處理器驅(qū)動模塊實(shí)現(xiàn)對多處理器初始化的支持,完成內(nèi)存的初始化,并提供訪問處理器和內(nèi)存的接口 ;芯片組驅(qū)動模塊主要完成龍芯服務(wù)器硬件平臺中南北橋芯片的初始化工作,包括橋片本身和各個(gè)外設(shè)控制器的初始化和資源分配工作,并提供訪問南北橋的接口 ;外設(shè)驅(qū)動模塊主要是主板上各種外設(shè)的驅(qū)動,如顯卡、硬盤、鍵盤、USB設(shè)備、網(wǎng)卡等,每個(gè)外設(shè)會對應(yīng)一個(gè)(或多個(gè))驅(qū)動模塊。
[0008]固件核心層類似于操作系統(tǒng)的內(nèi)核,建立UEFI中的系統(tǒng)服務(wù)表,進(jìn)行固件中所有模塊的統(tǒng)一管理和各種資源的管理。其包括固件核心加載模塊、固件核心模塊和基礎(chǔ)架構(gòu)功能模塊,固件核心加載模塊負(fù)責(zé)加載固件核心模塊,并為其準(zhǔn)備運(yùn)行環(huán)境,固件核心模塊負(fù)責(zé)建立UEFI規(guī)范中的啟動服務(wù)(Boot Service)和運(yùn)行時(shí)服務(wù)(Runtime Service)表,加載、運(yùn)行其他功能模塊,管理各模塊之間的交互,實(shí)現(xiàn)內(nèi)存的管理,實(shí)現(xiàn)和維護(hù)時(shí)鐘中斷和事件機(jī)制,實(shí)現(xiàn)和維護(hù)固件應(yīng)用的特權(quán)級機(jī)制,實(shí)現(xiàn)UEFI規(guī)范中定義的Protocol的管理機(jī)制,實(shí)現(xiàn)UEFI規(guī)范要求實(shí)現(xiàn)的其他機(jī)制和功能,如調(diào)試接口、壓縮算法、變量存儲/處理等?;A(chǔ)架構(gòu)功能模塊實(shí)現(xiàn)UEFI規(guī)范中的Architectural Protocol,包括多個(gè)功能模塊,每個(gè)模塊實(shí)現(xiàn)一個(gè) Architectural Protocol。每個(gè) Architectural Protocol 包含一些基礎(chǔ)服務(wù)接口,供固件中的其他功能模塊調(diào)用。
[0009]設(shè)備協(xié)議層實(shí)現(xiàn)各種標(biāo)準(zhǔn)的工業(yè)規(guī)范,包括總線協(xié)議、外設(shè)接口、網(wǎng)絡(luò)協(xié)議棧等。其包括總線協(xié)議模塊和網(wǎng)絡(luò)協(xié)議棧模塊,總線協(xié)議模塊實(shí)現(xiàn)各種總線協(xié)議,如PCI/PCIE、SATA, PATA, SCS1、USB、ISA、SMBUS, LPCBUS等。通常是一個(gè)模塊實(shí)現(xiàn)一種總線協(xié)議,并通過UEFI規(guī)范中的Protocol機(jī)制“發(fā)布”這些總線的接口,這樣其他模塊就可以使用這些接口來訪問總線;網(wǎng)絡(luò)協(xié)議棧模塊實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議棧,如TCP/IP、SNP、DHCP, TFTP等,這樣其他模塊可以基于這些協(xié)議棧來實(shí)現(xiàn)網(wǎng)絡(luò)相關(guān)的功能。
[0010]固件應(yīng)用層實(shí)現(xiàn)固件的各項(xiàng)功能,如配置界面、系統(tǒng)監(jiān)控、文件系統(tǒng)、操作系統(tǒng)引導(dǎo)等,其包括設(shè)備掃描模塊、人機(jī)界面顯示模塊、系統(tǒng)監(jiān)控模塊、服務(wù)器管理支持模塊、系統(tǒng)啟動模塊、文件系統(tǒng)模塊、內(nèi)核加載模塊、運(yùn)行時(shí)模塊和Shell模塊,設(shè)備掃描模塊枚舉系統(tǒng)中的所有外部設(shè)備,如PCI/PCIE總線上的設(shè)備,為這些設(shè)備分配資源,并將設(shè)備與相應(yīng)的外設(shè)驅(qū)動模塊進(jìn)行Connect (也即交給該設(shè)備驅(qū)動進(jìn)行管理);人機(jī)界面顯示模塊位于顯卡驅(qū)動模塊之上,實(shí)現(xiàn)所有顯示相關(guān)的接口,如設(shè)置顯示模式、在特定位置打印字符串、顯示圖片、清屏等;系統(tǒng)監(jiān)控模塊實(shí)時(shí)檢測處理器溫度、系統(tǒng)電壓和風(fēng)扇轉(zhuǎn)速,根據(jù)溫度值來調(diào)整風(fēng)扇的轉(zhuǎn)速,允許用戶設(shè)定溫度閾值,當(dāng)溫度過高時(shí),進(jìn)行自動關(guān)機(jī);服務(wù)器管理支持模塊主要實(shí)現(xiàn)對服務(wù)器中的BMC管理單元和KVM單元的支持;系統(tǒng)啟動模塊提供一個(gè)圖形化的用戶配置界面,用戶通過菜單操作的方式,查看系統(tǒng)信息和對系統(tǒng)進(jìn)行配置。最后根據(jù)用戶的選擇,從存儲設(shè)備啟動操作系統(tǒng);文件系統(tǒng)模塊實(shí)現(xiàn)FAT/FAT32、EXT2/3/4和IS09660文件系統(tǒng),支持對文件的讀取操作;內(nèi)核加載模塊在系統(tǒng)啟動的最后階段,這個(gè)模塊從硬盤、U盤、光盤等存儲介質(zhì)中將內(nèi)核文件加載到內(nèi)存中,并為內(nèi)核文件準(zhǔn)備必要的參數(shù),然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)執(zhí)行,這樣就將控制權(quán)交給了操作系統(tǒng);運(yùn)行時(shí)模塊實(shí)現(xiàn)了UEFI規(guī)范定義的供操作系統(tǒng)在其運(yùn)行階段調(diào)用的運(yùn)行時(shí)(Runtime)接口,以及龍芯處理器平臺的操作系統(tǒng)與固件定義的一些接口,如系統(tǒng)重啟、關(guān)機(jī)等;Shell模塊Shell是UEFI固件提供的一個(gè)命令行環(huán)境,基于UEFI固件中提供的大量接口服務(wù),可以開發(fā)出Shell下的多種固件應(yīng)用程序。
[0011]本發(fā)明的基于龍芯服務(wù)器的UEFI固件的具體運(yùn)行步驟如下:
[0012](I)初始化處理器、內(nèi)存,建立起固件運(yùn)行的基本環(huán)境;
[0013](2)將UEFI固件代碼復(fù)制到內(nèi)存,并對固件進(jìn)行解壓,加載固件核心模塊;
[0014](3)建立UEFI固件的基礎(chǔ)服務(wù);
[0015](4)加載UEFI固件功能模塊,包括基礎(chǔ)架構(gòu)功能模塊、設(shè)備協(xié)議模塊;
[0016](5)掃描設(shè)備并為設(shè)備分配系統(tǒng)資源,加載設(shè)備驅(qū)動模塊,完成設(shè)備初始化;
[0017](6)加載執(zhí)行固件應(yīng)用模塊;
[0018](7)運(yùn)行配置界面;
[0019](8)從存儲設(shè)備加載操作系統(tǒng)。
[0020]上述步驟中,步驟(I)中執(zhí)行處理器驅(qū)動模塊。處理器驅(qū)動模塊采用MIPS匯編語言實(shí)現(xiàn),是系統(tǒng)上電后首先執(zhí)行的模塊,此時(shí)內(nèi)存還未完成初始化,所以這個(gè)模塊直接在FLASH芯片中運(yùn)行。處理器驅(qū)動模塊實(shí)現(xiàn)龍芯3A/3B處理器、Cache (高速緩存)、內(nèi)存、TLB (旁路轉(zhuǎn)換緩沖)等初始化,實(shí)現(xiàn)MCU (內(nèi)存控制器)、SMBUS和內(nèi)存的初始化,配置內(nèi)存地址窗口,并提供訪問CPU、Cache、內(nèi)存等部件的接口。處理器驅(qū)動模塊還要初始化處理器中的串口模塊,為后續(xù)的固件代碼的提供調(diào)試手段。
[0021]上述步驟中,步驟(2)中執(zhí)行固件核心加載模塊。步驟(I)執(zhí)行完成后,系統(tǒng)內(nèi)存已經(jīng)初始化好,此時(shí)固件代碼可以在內(nèi)存中運(yùn)行以加快運(yùn)行速度;而且可以用C語言來實(shí)現(xiàn)固件代碼,加快開發(fā)速度。固件中包含的功能模塊較多,而FLASH芯片的容量有限,一般需要將存放功能模