本發(fā)明屬于本發(fā)明屬于計(jì)算機(jī)固件技術(shù)領(lǐng)域,涉及一種基于一體計(jì)算機(jī)的UEFI固件的實(shí)現(xiàn)方法。
背景技術(shù):
UEFI(Unified Extensible Firmware Interface,統(tǒng)一的可擴(kuò)展固件接口)是一種計(jì)算機(jī)固件(或稱為BIOS)的接口規(guī)范,也是關(guān)于固件的最主要的工業(yè)標(biāo)準(zhǔn)。UEFI規(guī)范最初是面向Intel公司的Itanium和X86處理器進(jìn)行制定的,但是UEFI規(guī)范本身是與處理器架構(gòu)無(wú)關(guān)的,目前已經(jīng)應(yīng)用于X86、Itanium、ARM等處理器平臺(tái)。符合UEFI規(guī)范的計(jì)算機(jī)固件(以下簡(jiǎn)稱UEFI固件)相對(duì)于傳統(tǒng)的固件有很多優(yōu)越性,目前主流的X86商用計(jì)算機(jī)系統(tǒng)基本上都是采用了UEFI固件。
飛騰1500A(FT)是由國(guó)防科學(xué)技術(shù)大學(xué)研制的國(guó)產(chǎn)通用中央處理器,采用ARM V8指令集,采用國(guó)際先進(jìn)的28nm工藝流片,具有高性能、低功耗特點(diǎn),關(guān)鍵技術(shù)國(guó)內(nèi)領(lǐng)先,可實(shí)現(xiàn)對(duì)Intel中高端“至強(qiáng)”服務(wù)器芯片的代替。飛騰1500A系列目前包括4核和16核兩款產(chǎn)品,4核處理器芯片主要面向桌面終端和輕量級(jí)服務(wù)器應(yīng)用領(lǐng)域,適用于構(gòu)建臺(tái)式終端、一體機(jī)、便攜筆記本、微服務(wù)器等產(chǎn)品。16核處理器芯片面向服務(wù)器應(yīng)用領(lǐng)域,適用于構(gòu)建網(wǎng)絡(luò)前端接入服務(wù)器、事務(wù)處理服務(wù)器、郵件服務(wù)器等產(chǎn)品。
U-BOOT是一款開源固件,支持多個(gè)處理器系列,如PowerPC、ARM、X86、MIPS等,飛騰廠商采用U-BOOT作為調(diào)試處理器的固件,并應(yīng)用在飛騰筆記本解決方案中。但U-BOOT與常規(guī)的UEFI計(jì)算機(jī)固件相比存在很多不足, 主要表現(xiàn)在:U-BOOT項(xiàng)目在計(jì)算機(jī)工業(yè)界很少有廠家使用U-BOOT或?qū)ζ溥M(jìn)行支持,因此U-BOOT無(wú)法進(jìn)行規(guī)范化和得到發(fā)展;不像UEFI固件支持最新的計(jì)算機(jī)技術(shù),U-BOOT代碼對(duì)很多技術(shù)規(guī)范都不支持,無(wú)法實(shí)現(xiàn)對(duì)一些常見功能的支持,比如ACPI(目前最為通用的電源管理技術(shù))、GRUB(目前最為通用的操作系統(tǒng)內(nèi)核加載器)等;與UEFI固件相比,U-BOOT沒有采用模塊化方法進(jìn)行設(shè)計(jì)實(shí)現(xiàn),可擴(kuò)展性不強(qiáng),開發(fā)維護(hù)也不方便。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種基于一體計(jì)算機(jī)的UEFI固件的實(shí)現(xiàn)方法。根據(jù)這個(gè)方法,可以在飛騰1500A一體計(jì)算機(jī)上實(shí)現(xiàn)出符合國(guó)際主流UEFI固件規(guī)范、可擴(kuò)展性強(qiáng)、功能完善的固件產(chǎn)品,以支持飛騰1500A一體計(jì)算機(jī)的正常啟動(dòng)和運(yùn)行。
為了達(dá)到上述目的,本發(fā)明的技術(shù)方案為:UEFI固件分為硬件抽象層、固件核心層、設(shè)備協(xié)議層以及固件應(yīng)用層。
硬件抽象層包括處理器驅(qū)動(dòng)模塊、芯片組驅(qū)動(dòng)模塊和外設(shè)驅(qū)動(dòng)模塊,處理器驅(qū)動(dòng)模塊對(duì)筆記本中處理器和內(nèi)存進(jìn)行初始化,并提供訪問處理器和內(nèi)存的接口;芯片組驅(qū)動(dòng)模塊對(duì)筆記本硬件平臺(tái)中南北橋芯片進(jìn)行初始化,包括橋片本身和各個(gè)外設(shè)控制器的初始化和資源分配工作,并提供訪問南北橋的接口;外設(shè)驅(qū)動(dòng)模塊驅(qū)動(dòng)筆記本主板上連接的外設(shè)。
固件核心層包括固件核心加載模塊、固件核心模塊和基礎(chǔ)架構(gòu)功能模塊,固件核心加載模塊加載固件核心模塊,并為其準(zhǔn)備運(yùn)行環(huán)境;固件核心模塊建立UEFI規(guī)范中的啟動(dòng)服務(wù)Boot Service和運(yùn)行時(shí)服務(wù)Runtime Service表,加載、運(yùn)行固件核心層中的其他模塊,管理固件核心層中各模塊之間的交互,管理筆記本中內(nèi)存,實(shí)現(xiàn)和維護(hù)時(shí)鐘中斷和事件機(jī)制,實(shí)現(xiàn)和維護(hù)固件應(yīng)用的特權(quán)級(jí) 機(jī)制,實(shí)現(xiàn)UEFI規(guī)范中定義的Protocol的管理機(jī)制,實(shí)現(xiàn)UEFI規(guī)范要求實(shí)現(xiàn)的機(jī)制和功能;基礎(chǔ)架構(gòu)功能模塊實(shí)現(xiàn)UEFI規(guī)范中的體系結(jié)構(gòu)協(xié)議Architectural Protocol,基礎(chǔ)架構(gòu)功能模塊包括多個(gè)功能模塊,每個(gè)模塊實(shí)現(xiàn)一個(gè)Architectural Protocol;每個(gè)Architectural Protocol包含一些基礎(chǔ)服務(wù)接口,供固件中的其他功能模塊調(diào)用。
設(shè)備協(xié)議層包括總線協(xié)議模塊和網(wǎng)絡(luò)協(xié)議棧模塊,總線協(xié)議模塊實(shí)現(xiàn)各種總線協(xié)議,并通過(guò)UEFI規(guī)范中的Protocol機(jī)制發(fā)布總線的訪問接口;網(wǎng)絡(luò)協(xié)議棧模塊實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議棧。
固件應(yīng)用層包括設(shè)備掃描模塊、人機(jī)界面顯示模塊、系統(tǒng)監(jiān)控模塊、系統(tǒng)啟動(dòng)模塊、文件系統(tǒng)模塊、內(nèi)核加載模塊、運(yùn)行時(shí)模塊和Shell模塊;設(shè)備掃描模塊枚舉筆記本中的所有外設(shè),并為外設(shè)分配資源,將外部設(shè)備與相應(yīng)的外設(shè)驅(qū)動(dòng)模塊進(jìn)行連接;人機(jī)界面顯示模塊與顯卡驅(qū)動(dòng)模塊連接,實(shí)現(xiàn)所有顯示相關(guān)的接口;系統(tǒng)監(jiān)控模塊實(shí)時(shí)檢測(cè)筆記本中處理器溫度、系統(tǒng)電壓和風(fēng)扇轉(zhuǎn)速,根據(jù)處理器溫度來(lái)調(diào)整風(fēng)扇的轉(zhuǎn)速,當(dāng)處理器溫度過(guò)高時(shí),強(qiáng)制關(guān)機(jī);系統(tǒng)啟動(dòng)模塊提供一個(gè)圖形化的用戶配置界面,用戶通過(guò)菜單操作的方式,查看系統(tǒng)信息和對(duì)系統(tǒng)進(jìn)行配置。最后根據(jù)用戶的選擇,從存儲(chǔ)設(shè)備啟動(dòng)操作系統(tǒng);文件系統(tǒng)模塊實(shí)現(xiàn)FAT/FAT32、EXT2/3/4和ISO9660文件系統(tǒng),支持對(duì)文件的讀取操作;內(nèi)核加載模塊在系統(tǒng)啟動(dòng)的最后階段,從筆記本的存儲(chǔ)介質(zhì)中將內(nèi)核文件加載到內(nèi)存中,并為內(nèi)核文件準(zhǔn)備必要的參數(shù),然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)執(zhí)行內(nèi)核文件;運(yùn)行時(shí)模塊實(shí)現(xiàn)UEFI規(guī)范定義的供操作系統(tǒng)在其運(yùn)行階段調(diào)用的運(yùn)行時(shí)Runtime接口,以及處理器平臺(tái)的操作系統(tǒng)與固件定義的接口;Shell是UEFI固件提供的一個(gè)命令行環(huán)境,基于UEFI固件中提供的大量接口服務(wù),開發(fā)出Shell下的多種固件應(yīng)用程序。
在上述UEFI固件的基礎(chǔ)上,該方法包括如下步驟:
步驟一、筆記本上電啟動(dòng),執(zhí)行處理器驅(qū)動(dòng)模塊,初始化處理器和內(nèi)存,并提供訪問處理器和內(nèi)存的接口,從而建立起固件運(yùn)行的基本環(huán)境。
步驟二、執(zhí)行固件核心加載模塊,將UEFI固件代碼復(fù)制到內(nèi)存,并對(duì)固件進(jìn)行解壓,加載固件核心模塊。
步驟三、執(zhí)行固件核心模塊,建立UEFI固件的基礎(chǔ)服務(wù);初始化UEFI的系統(tǒng)服務(wù),完成UEFI系統(tǒng)表、UEFI啟動(dòng)服務(wù)表和UEFI運(yùn)行時(shí)服務(wù)表的初始化,UEFI固件中的所有功能模塊均可調(diào)用系統(tǒng)服務(wù)。
步驟四、加載UEFI固件功能模塊,包括基礎(chǔ)架構(gòu)功能模塊、設(shè)備協(xié)議模塊。
步驟五、加載外設(shè)掃描模塊,掃描外設(shè)并為外設(shè)分配系統(tǒng)資源,加載外設(shè)驅(qū)動(dòng)模塊,完成外設(shè)初始化。
步驟六、加載執(zhí)行固件應(yīng)用層中各模塊,啟動(dòng)操作系統(tǒng)。
上述步驟中,步驟(6)中固件核心模塊加載固件卷中的固件應(yīng)用模塊,并實(shí)現(xiàn)對(duì)應(yīng)的固件功能。包括顯示模塊、系統(tǒng)監(jiān)控模塊、文件系統(tǒng)模塊、內(nèi)核加載模塊、運(yùn)行時(shí)模塊、Shell模塊、系統(tǒng)啟動(dòng)模塊,最后,固件核心模塊將控制權(quán)交給系統(tǒng)啟動(dòng)模塊,準(zhǔn)備啟動(dòng)操作系統(tǒng)。
進(jìn)一步地,步驟一中,筆記本上電啟動(dòng)后,執(zhí)行處理器驅(qū)動(dòng)模塊,此時(shí)筆記本中內(nèi)存還未完成初始化,處理器驅(qū)動(dòng)模塊使用連接在筆記本中的FLASH芯片運(yùn)行;處理器驅(qū)動(dòng)模塊實(shí)現(xiàn)筆記本中處理器、高速緩存Cache、內(nèi)存和旁路轉(zhuǎn)換緩沖TLB的初始化,實(shí)現(xiàn)內(nèi)存控制器MCU、SMBUS和內(nèi)存的初始化,配置內(nèi)存地址窗口,并提供訪問CPU、Cache和內(nèi)存等部件的接口,處理器驅(qū)動(dòng)模塊還要初始化處理器中的串口模塊,提供UEFI固件代碼的調(diào)試。
進(jìn)一步地,步驟二中執(zhí)行固件核心加載模塊,筆記本中系統(tǒng)內(nèi)存已經(jīng)初始化好,此時(shí)固件代碼可以在內(nèi)存中運(yùn)行以加快運(yùn)行速度,F(xiàn)LASH中存有壓縮的固件卷,固件核心加載模塊從FLASH中將壓縮的固件卷復(fù)制到內(nèi)存中,并進(jìn)行 解壓;解壓成功后,在內(nèi)存中創(chuàng)建HOB數(shù)據(jù)表,存放處理器和內(nèi)存和FLASH的信息。
進(jìn)一步地,驟三中執(zhí)行固件核心模塊,初始化UEFI的系統(tǒng)服務(wù)包括代碼調(diào)試、內(nèi)存管理、UEFI鏡像管理、HOB、UEFI時(shí)鐘、FLASH訪問、解壓縮、固件卷解析、UEFI事件、任務(wù)優(yōu)先級(jí)、UEFI Protocol管理、UEFI變量存取。
進(jìn)一步地,步驟四中固件核心模塊加載固件的功能模塊,固件核心模塊通過(guò)檢索固件卷,依次查找其中的功能模塊,并將其加載到內(nèi)存中,每個(gè)功能模塊都被編譯成一個(gè)PE/ELF格式的可執(zhí)行鏡像,固件核心模塊需要解析功能模塊鏡像,然后加載到內(nèi)存的特定地址處,并跳轉(zhuǎn)到入口函數(shù),功能模塊的入口函數(shù)執(zhí)行完成后,返回到固件核心模塊,固件核心模塊繼續(xù)進(jìn)行下一個(gè)功能模塊的加載。
進(jìn)一步地,步驟四,基礎(chǔ)架構(gòu)功能模塊主要功能是實(shí)現(xiàn)UEFI規(guī)范中的Architectural Protocol,每個(gè)Architectural Protocol由一個(gè)模塊來(lái)實(shí)現(xiàn);
設(shè)備協(xié)議層模塊主要實(shí)現(xiàn)訪問PCI/PCIE、SATA、PATA、SCSI、USB、ISA、SMBUS和LPCBUS總線的函數(shù)接口,并封裝在Protocol中供其他功能模塊調(diào)用,一種總線協(xié)議采用一個(gè)模塊實(shí)現(xiàn)。
進(jìn)一步地,步驟五中,外設(shè)包括南北橋芯片、顯卡、SATA/IDE控制器、USB控制器、SMBUS控制器、LPC控制器、鍵盤、網(wǎng)卡。
有益效果:
1、本發(fā)明的方法符合國(guó)際主流的UEFI和PI固件規(guī)范,可利用UEFI聯(lián)盟提供的開源代碼資源快速實(shí)現(xiàn)固件;很多外設(shè)板卡廠商都提供基于UEFI規(guī)范的驅(qū)動(dòng),也可大大加快固件開發(fā)的進(jìn)度。另外,UEFI固件支持主要的計(jì)算機(jī)工業(yè)標(biāo)準(zhǔn),如目前飛騰處理器還不支持的ACPI(高級(jí)配置和電源管理接口)規(guī)范,這樣采用本發(fā)明設(shè)計(jì)的固件可以方便地增加對(duì)這些規(guī)范的支持。
2、本發(fā)明設(shè)計(jì)的UEFI固件的重要特點(diǎn)是高度模塊化,固件所要實(shí)現(xiàn)的功能被分解成很多子功能,每個(gè)子功能由單獨(dú)的模塊來(lái)實(shí)現(xiàn),并由一個(gè)核心模塊來(lái)加載和管理這些功能模塊。因此可以通過(guò)增刪模塊來(lái)方便地定制固件的功能。
附圖說(shuō)明
圖1是基于飛騰筆記本的UEFI固件的架構(gòu)示意圖。
具體實(shí)施方式
下面結(jié)合附圖并舉實(shí)施例,對(duì)本發(fā)明進(jìn)行詳細(xì)描述。
一種基于飛騰一體計(jì)算機(jī)的UEFI固件的實(shí)現(xiàn)方法,固件劃分為硬件抽象層、固件核心層、設(shè)備協(xié)議層和固件應(yīng)用層。
其中,硬件抽象層實(shí)現(xiàn)處理器和內(nèi)存、芯片組等關(guān)鍵硬件部件的初始化,對(duì)其他板級(jí)硬件進(jìn)行包裝和抽象并實(shí)現(xiàn)初始化,同時(shí)為上層模塊提供訪問底層硬件設(shè)備的函數(shù)接口。其包括處理器驅(qū)動(dòng)模塊、芯片組驅(qū)動(dòng)模塊和外設(shè)驅(qū)動(dòng)模塊,處理器驅(qū)動(dòng)模塊完成處理器和內(nèi)存的初始化工作,并提供訪問處理器和內(nèi)存的接口;芯片組驅(qū)動(dòng)模塊主要完成飛騰筆記本硬件平臺(tái)中南北橋芯片的初始化工作,包括橋片本身和各個(gè)外設(shè)控制器的初始化和資源分配工作,并提供訪問南北橋的接口;外設(shè)驅(qū)動(dòng)模塊主要是主板上各種外設(shè)的驅(qū)動(dòng),如顯卡、硬盤、鍵盤、USB設(shè)備、網(wǎng)卡等,每個(gè)外設(shè)會(huì)對(duì)應(yīng)一個(gè)(或多個(gè))驅(qū)動(dòng)模塊。
固件核心層類似于操作系統(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ī)范中的啟動(dòng)服務(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í)機(jī)制,實(shí)現(xiàn)UEFI規(guī)范中定義的Protocol的管理機(jī)制,實(shí)現(xiàn)UEFI規(guī)范要求實(shí)現(xiàn)的其他機(jī)制和功能,如調(diào)試接口、壓縮算法、變量存儲(chǔ)/處理等?;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)用。
設(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、SCSI、USB、ISA、SMBUS、LPCBUS等。通常是一個(gè)模塊實(shí)現(xiàn)一種總線協(xié)議,并通過(guò)UEFI規(guī)范中的Protocol機(jī)制“發(fā)布”這些總線的接口,這樣其他模塊就可以使用這些接口來(lái)訪問總線;網(wǎng)絡(luò)協(xié)議棧模塊實(shí)現(xiàn)網(wǎng)絡(luò)協(xié)議棧,如TCP/IP、SNP、DHCP、TFTP等,這樣其他模塊可以基于這些協(xié)議棧來(lái)實(shí)現(xiàn)網(wǎng)絡(luò)相關(guān)的功能。
固件應(yīng)用層實(shí)現(xiàn)固件的各項(xiàng)功能,如配置界面、系統(tǒng)監(jiān)控、文件系統(tǒng)、操作系統(tǒng)引導(dǎo)等;其包括設(shè)備掃描模塊、人機(jī)界面顯示模塊、系統(tǒng)監(jiān)控模塊、系統(tǒng)啟動(dòng)模塊、文件系統(tǒng)模塊、內(nèi)核加載模塊、運(yùn)行時(shí)模塊和Shell模塊,設(shè)備掃描模塊枚舉系統(tǒng)中的所有外部設(shè)備,如PCI/PCIE總線上的設(shè)備,為這些設(shè)備分配資源,并將設(shè)備與相應(yīng)的外設(shè)驅(qū)動(dòng)模塊進(jìn)行Connect(也即交給該設(shè)備驅(qū)動(dòng)進(jìn)行管理);人機(jī)界面顯示模塊位于顯卡驅(qū)動(dòng)模塊之上,實(shí)現(xiàn)所有顯示相關(guān)的接口,如設(shè)置顯示模式、在特定位置打印字符串、顯示圖片、清屏等;系統(tǒng)監(jiān)控模塊實(shí)時(shí)檢測(cè)處理器溫度、系統(tǒng)電壓和風(fēng)扇轉(zhuǎn)速,根據(jù)溫度值來(lái)調(diào)整風(fēng)扇的轉(zhuǎn)速;允許用戶設(shè)定溫度閾值,當(dāng)溫度過(guò)高時(shí),進(jìn)行自動(dòng)關(guān)機(jī);系統(tǒng)啟動(dòng)模塊提供一個(gè)圖形化的用戶配置界面,用戶通過(guò)菜單操作的方式,查看系統(tǒng)信息和對(duì)系統(tǒng)進(jìn)行配置。最后根據(jù)用戶的選擇,從存儲(chǔ)設(shè)備啟動(dòng)操作系統(tǒng);文件系統(tǒng)模塊實(shí) 現(xiàn)FAT/FAT32、EXT2/3/4和ISO9660文件系統(tǒng),支持對(duì)文件的讀取操作;內(nèi)核加載模塊在系統(tǒng)啟動(dòng)的最后階段,這個(gè)模塊從硬盤、U盤、光盤等存儲(chǔ)介質(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ái)的操作系統(tǒng)與固件定義的一些接口,如系統(tǒng)重啟、關(guān)機(jī)等;Shell是UEFI固件提供的一個(gè)命令行環(huán)境,基于UEFI固件中提供的大量接口服務(wù),可以開發(fā)出Shell下的多種固件應(yīng)用程序。
本發(fā)明的基于飛騰筆記本的UEFI固件的具體運(yùn)行步驟如下:
(1)初始化處理器和內(nèi)存,建立起固件運(yùn)行的基本環(huán)境;
(2)將UEFI固件代碼復(fù)制到內(nèi)存,并對(duì)固件進(jìn)行解壓,加載固件核心模塊;
(3)建立UEFI固件的基礎(chǔ)服務(wù);
(4)加載UEFI固件功能模塊,包括基礎(chǔ)架構(gòu)功能模塊、設(shè)備協(xié)議模塊;
(5)掃描設(shè)備并為設(shè)備分配系統(tǒng)資源,加載設(shè)備驅(qū)動(dòng)模塊,完成設(shè)備初始化;
(6)加載執(zhí)行固件應(yīng)用模塊;運(yùn)行配置界面;從存儲(chǔ)設(shè)備加載操作系統(tǒng)。
上述步驟中,步驟(1)中執(zhí)行處理器驅(qū)動(dòng)模塊。處理器驅(qū)動(dòng)模塊采用指令集實(shí)現(xiàn),是系統(tǒng)上電后首先執(zhí)行的模塊,此時(shí)內(nèi)存還未完成初始化,所以這個(gè)模塊直接在FLASH芯片中運(yùn)行。處理器驅(qū)動(dòng)模塊實(shí)現(xiàn)飛騰1500A處理器、Cache(高速緩存)、內(nèi)存和TLB(旁路轉(zhuǎn)換緩沖)等初始化,實(shí)現(xiàn)MCU(內(nèi)存控制器)、SMBUS和內(nèi)存的初始化,配置內(nèi)存地址窗口,并提供訪問CPU、Cache 和內(nèi)存等部件的接口。處理器驅(qū)動(dòng)模塊還要初始化處理器中的串口模塊,為后續(xù)的固件代碼的提供調(diào)試手段。
上述步驟中,步驟(2)中執(zhí)行固件核心加載模塊。步驟(1)執(zhí)行完成后,系統(tǒng)內(nèi)存已經(jīng)初始化好,此時(shí)固件代碼可以在內(nèi)存中運(yùn)行以加快運(yùn)行速度;而且可以用C語(yǔ)言來(lái)實(shí)現(xiàn)固件代碼,加快開發(fā)速度。固件中包含的功能模塊較多,而FLASH芯片的容量有限,一般需要將存放功能模塊的固件卷進(jìn)行壓縮,固件核心加載模塊負(fù)責(zé)從FLASH中將壓縮的固件卷復(fù)制到內(nèi)存中,并進(jìn)行解壓;解壓成功后,在內(nèi)存中創(chuàng)建HOB(Hand-Off Block)數(shù)據(jù)表,存放處理器、內(nèi)存、FLASH等系統(tǒng)信息,提供給后續(xù)的固件模塊使用;最后,固件核心加載模塊將控制權(quán)交給固件核心模塊。
上述步驟中,步驟(3)中執(zhí)行固件核心模塊。固件核心模塊首先初始化UEFI的系統(tǒng)服務(wù),為后續(xù)的功能模塊的加載、運(yùn)行做準(zhǔn)備。主要是完成UEFI系統(tǒng)表、UEFI啟動(dòng)服務(wù)表和UEFI運(yùn)行時(shí)服務(wù)表的初始化,具體服務(wù)包括代碼調(diào)試、內(nèi)存管理、UEFI鏡像管理、HOB、UEFI時(shí)鐘、FLASH訪問、解壓縮、固件卷解析、UEFI事件、任務(wù)優(yōu)先級(jí)、UEFI Protocol管理、UEFI變量存取等。系統(tǒng)服務(wù)表存放在內(nèi)存的特定區(qū)域,UEFI固件中的所有功能模塊都可以調(diào)用這些系統(tǒng)服務(wù)。
上述步驟中,步驟(4)中固件核心模塊加載固件的功能模塊。固件核心模塊通過(guò)檢索固件卷,依次查找其中的功能模塊,并將其加載到內(nèi)存中。每個(gè)功能模塊都被編譯成一個(gè)PE/ELF格式的可執(zhí)行鏡像,固件核心模塊需要解析功能模塊鏡像,然后加載到內(nèi)存的特定地址處,并跳轉(zhuǎn)到入口函數(shù)。功能模塊的入口函數(shù)執(zhí)行完成后,通常會(huì)返回到固件核心模塊,固件核心模塊繼續(xù)進(jìn)行下一個(gè)功能模塊的加載。
在步驟(4)中被加載的模塊包括基礎(chǔ)架構(gòu)功能模塊、設(shè)備協(xié)議模塊。其中, 基礎(chǔ)架構(gòu)功能模塊主要功能是實(shí)現(xiàn)UEFI規(guī)范中的Architectural Protocol,主要包括:Boot Device Selection(BDS)、CPU、Metronome、Monotonic Counter、Real Time Clock、Runtime、Security、Status Code、Timer、Variable、Variable Write、Watchdog Timer,每個(gè)Architectural Protocol由一個(gè)模塊來(lái)實(shí)現(xiàn);設(shè)備協(xié)議層模塊主要實(shí)現(xiàn)訪問PCI/PCIE、SATA、PATA、SCSI、USB、ISA、SMBUS、LPCBUS等總線的函數(shù)接口,并封裝在Protocol中供其他功能模塊調(diào)用,通常是一個(gè)模塊實(shí)現(xiàn)一種總線協(xié)議。另外,還包括實(shí)現(xiàn)TCP/IP網(wǎng)絡(luò)協(xié)議棧的功能模塊;
上述步驟中,步驟(5)中完成設(shè)備的初始工作。固件核心模塊加載設(shè)備驅(qū)動(dòng)模塊,實(shí)現(xiàn)主板上外設(shè)的初始化和實(shí)現(xiàn)訪問外設(shè)的函數(shù)接口,包括南北橋芯片、顯卡、SATA/IDE控制器、USB控制器、SMBUS控制器、LPC控制器、鍵盤、網(wǎng)卡等。通常由一個(gè)模塊實(shí)現(xiàn)一種設(shè)備驅(qū)動(dòng)。另外,在這個(gè)階段由設(shè)備掃描模塊掃描系統(tǒng)中的所有外設(shè),并為外設(shè)分配內(nèi)存、IO和中斷資源,這樣外設(shè)在操作系統(tǒng)下才能正常工作。
上述步驟中,步驟(6)中固件核心模塊加載固件卷中的固件應(yīng)用模塊,并實(shí)現(xiàn)對(duì)應(yīng)的固件功能。包括顯示模塊、系統(tǒng)監(jiān)控模塊、文件系統(tǒng)模塊、內(nèi)核加載模塊、運(yùn)行時(shí)模塊、Shell模塊、系統(tǒng)啟動(dòng)模塊。最后,固件核心模塊將控制權(quán)交給系統(tǒng)啟動(dòng)模塊,準(zhǔn)備啟動(dòng)操作系統(tǒng)。
系統(tǒng)啟動(dòng)模塊通過(guò)調(diào)用固件核心模塊和其他功能模塊提供的服務(wù)接口,顯示出圖形配置界面作為人機(jī)交互界面。在這個(gè)階段,固件根據(jù)用戶的操作來(lái)進(jìn)行下一步的工作,包括提供系統(tǒng)信息的顯示和系統(tǒng)參數(shù)的配置,以及選擇要啟動(dòng)的設(shè)備,包括硬盤、光盤、U盤、網(wǎng)絡(luò)、命令行等。用戶通過(guò)特定按鍵退出配置界面進(jìn)入到下一個(gè)執(zhí)行步驟。
上述步驟中,實(shí)現(xiàn)操作系統(tǒng)的啟動(dòng),具體步驟如下根據(jù)用戶配置的啟動(dòng)順序,系統(tǒng)啟動(dòng)模塊依次嘗試從硬盤、光盤、U盤、網(wǎng)絡(luò)等介質(zhì)將操作系統(tǒng)內(nèi)核 文件加載到內(nèi)存,并為內(nèi)核準(zhǔn)備必要的啟動(dòng)參數(shù),然后將控制權(quán)交給內(nèi)核,從而完成系統(tǒng)的啟動(dòng)工作。操作系統(tǒng)啟動(dòng)完成后,仍然可調(diào)用固件中運(yùn)行時(shí)模塊提供的少量的函數(shù),包括系統(tǒng)重啟、關(guān)機(jī)等。
綜上,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。