塊加載固件的功能模塊。固件核心模塊通過檢索固件卷,依次查找其中的功能模塊,并將其加載到內(nèi)存中。每個功能模塊都被編譯成一個PE/ELF格式的可執(zhí)行鏡像,固件核心模塊需要解析功能模塊鏡像,然后加載到內(nèi)存的特定地址處,并跳轉(zhuǎn)到入口函數(shù)。功能模塊的入口函數(shù)執(zhí)行完成后,通常會返回到固件核心模塊,固件核心模塊繼續(xù)進行下一個功能模塊的加載。
[0027]在步驟(4)中被加載的模塊包括基礎架構(gòu)功能模塊、設備協(xié)議模塊。其中,基礎架構(gòu)功能模塊主要功能是實現(xiàn)UEFI規(guī)范中的Architectural Protocol,主要包括:Boot Device Select1n (BDS)、CPU、Metronome、Monotonic Counter、Real Time Clock、Runtime、Security、Status Code、Timer、Variable、Variable Write、Watchdog Timer,每個Architectural Protocol由一個模塊來實現(xiàn);設備協(xié)議層模塊主要實現(xiàn)訪問PCI/PCIE、SATA、PATA, SCS1、USB、ISA、SMBUS、LPCBUS 等總線的函數(shù)接口,并封裝在 Protocol 中供其他功能模塊調(diào)用,通常是一個模塊實現(xiàn)一種總線協(xié)議。
[0028]上述步驟中,步驟(5)中完成設備的初始工作。固件核心模塊加載設備驅(qū)動模塊,實現(xiàn)主板上外設的初始化和實現(xiàn)訪問外設的函數(shù)接口,包括南北橋芯片、顯卡、SATA/IDE控制器、USB控制器、SMBUS控制器、LPC控制器、鍵盤、網(wǎng)卡等。通常由一個模塊實現(xiàn)一種設備驅(qū)動。另外,在這個階段由設備掃描模塊掃描系統(tǒng)中的所有外設,并為外設分配內(nèi)存、1和中斷資源,這樣外設在操作系統(tǒng)下才能正常工作。
[0029]上述步驟中,步驟¢)中固件核心模塊加載電源管理模塊,并以當前的啟動模式來決定后續(xù)的啟動路徑。電源管理模塊中實現(xiàn)了一些供操作系統(tǒng)調(diào)用的函數(shù)接口,操作系統(tǒng)在進入S3待機狀態(tài)之前調(diào)用這些接口來設置設備的電源狀態(tài)、內(nèi)存工作模式等。另外,電源管理模塊還讀取(由操作系統(tǒng)在進入S3待機或S5休眠狀態(tài)之前存入非易失存儲器中的)啟動模式值,如果發(fā)現(xiàn)當前啟動模式是從S3狀態(tài)喚醒,固件將非易失存儲器中讀取操作系統(tǒng)進入S3狀態(tài)前的運行地址,并跳轉(zhuǎn)到該地址,將控制權(quán)交給操作系統(tǒng),從而結(jié)束啟動過程;如果當前啟動模式是正常啟動模式(包括熱啟動、冷啟動),或是從S5休眠狀態(tài)喚醒,則固件繼續(xù)后續(xù)的步驟。
[0030]上述步驟中,步驟(7)中固件核心模塊加載固件卷中的固件應用模塊,并實現(xiàn)對應的固件功能。包括顯示模塊、系統(tǒng)監(jiān)控模塊、IEEE1275支持模塊、文件系統(tǒng)模塊、內(nèi)核加載模塊、Shell模塊、系統(tǒng)啟動模塊。最后,固件核心模塊將控制權(quán)交給系統(tǒng)啟動模塊,準備啟動操作系統(tǒng)。
[0031]上述步驟中,步驟(8)中系統(tǒng)啟動模塊通過調(diào)用固件核心模塊和其他功能模塊提供的服務接口,顯示出圖形配置界面作為人機交互界面。在這個階段,固件根據(jù)用戶的操作來進行下一步的工作,包括提供系統(tǒng)信息的顯示和系統(tǒng)參數(shù)的配置,以及選擇要啟動的設備,包括硬盤、光盤、U盤、命令行等。用戶通過特定按鍵退出配置界面進入到下一個執(zhí)行步驟。
[0032]上述步驟中,步驟(9)中實現(xiàn)操作系統(tǒng)的啟動。根據(jù)用戶配置的啟動順序,系統(tǒng)啟動模塊依次嘗試從硬盤、光盤、U盤等介質(zhì)將操作系統(tǒng)內(nèi)核文件(或內(nèi)核加載器)加載到內(nèi)存,并為內(nèi)核準備必要的啟動參數(shù),然后將控制權(quán)交給內(nèi)核(或內(nèi)核加載器),從而完成系統(tǒng)的啟動工作。操作系統(tǒng)啟動完成后,可調(diào)用固件中實現(xiàn)的IEEE1275接口和數(shù)據(jù)結(jié)構(gòu)。
[0033]有益效果:
[0034]1、本發(fā)明的方法符合國際主流的UEFI和PI固件規(guī)范,可利用UEFI聯(lián)盟提供的開源代碼資源快速實現(xiàn)固件;很多外設板卡廠商都提供基于UEFI規(guī)范的驅(qū)動,也可大大加快固件開發(fā)的進度;固件層可以提供更多的設備驅(qū)動和豐富的固件功能。另外,UEFI固件支持主要的計算機工業(yè)標準,如目前飛騰處理器還不支持的ACPI (高級配置和電源管理接口)規(guī)范,這樣采用本發(fā)明設計的固件可以方便地增加對這些規(guī)范的支持。
[0035]2、本發(fā)明設計的UEFI固件的重要特點是高度模塊化,固件所要實現(xiàn)的功能被分解成很多子功能,每個子功能由單獨的模塊來實現(xiàn),并由一個核心模塊來加載和管理這些功能模塊。因此可以通過增刪模塊來方便地定制固件的功能。
[0036]3、本發(fā)明設計的UEFI固件可以實現(xiàn)對主流外設的支持,解決飛騰處理器平臺傳統(tǒng)固件OBP在外設兼容支持方面的缺陷,對于推動飛騰處理器的產(chǎn)業(yè)化帶來好處。
【附圖說明】
[0037]圖1是基于飛騰便攜機的UEFI固件的架構(gòu)示意圖。
【具體實施方式】
[0038]下面結(jié)合附圖并舉實施例,對本發(fā)明進行詳細描述。
[0039]如附圖1表示,下面以浪潮北京公司設計的一款型號為LANGCHA0-FT100A-LAPTOP-v1.4的便攜機主板為例,來介紹本發(fā)明描述的UEFI固件的【具體實施方式】。主要包括以下步驟:
[0040](I)實現(xiàn)STU階段的功能模塊,包括兩個模塊,這個兩個模塊在編譯以后將依次被放到FLASH芯片的開始位置,并在系統(tǒng)上電后依次被執(zhí)行。包括:
[0041](1.1)創(chuàng)建一個Start模塊,即處理器驅(qū)動模塊。根據(jù)飛騰FT1000A處理器手冊實現(xiàn)處理器、Cache (高速緩存)、內(nèi)存、地址窗口、TLB (旁路轉(zhuǎn)換緩沖)等初始化,實現(xiàn)MCU (內(nèi)存控制器)、SMBUS和內(nèi)存的初始化,并提供訪問CPU、Cache、內(nèi)存等部件的接口 ;
[0042](1.2)創(chuàng)建一個Sec模塊。這個模塊的實現(xiàn)的功能包括在內(nèi)存創(chuàng)建一些存放處理器、內(nèi)存信息的數(shù)據(jù)結(jié)構(gòu),將FLASH芯片中的功能模塊解壓到內(nèi)存中,最后加載執(zhí)行固件核心模塊DxeCore。
[0043](2)實現(xiàn)固件核心模塊DxeCore。要實現(xiàn)的功能主要包括:實現(xiàn)UEFI規(guī)范中定義的啟動服務和運行時服務表,加載、運行其他功能模塊,管理各模塊之間的交互,實現(xiàn)內(nèi)存的管理,實現(xiàn)和維護時鐘中斷和事件機制,實現(xiàn)和維護固件應用的特權(quán)級機制,實現(xiàn)UEFI規(guī)范中定義的Protocol的管理機制,實現(xiàn)基礎函數(shù)庫,以及調(diào)試接口、壓縮算法、變量存儲
/處理等。
[0044](3)實現(xiàn) Architectural Protocol,包括 Variable, Variable Write, Timer, CPU,Metronome, Monotonic Counter, Status Code, Watchdog Timer, RTC, BDS。一個模塊實現(xiàn)一種 Architectural Protocol。
[0045](4)實現(xiàn)外設驅(qū)動模塊。包括:
[0046](4.1)實現(xiàn)芯片組的驅(qū)動模塊。根據(jù)芯片組手冊實現(xiàn)對AMD RS780北橋芯片、AMDSB710南橋芯片的初始化,以及南橋芯片中PCI總線、USB、SATA/IDE、LPC/SMBUS總線、HDAud1控制器的初始化。
[0047](4.2)實現(xiàn)外設驅(qū)動模塊,包括顯卡驅(qū)動、USB存儲設備驅(qū)動、PS2鍵盤驅(qū)動、USB鍵盤驅(qū)動、SATA設備驅(qū)動、IDE設備驅(qū)動、網(wǎng)卡驅(qū)動、時鐘中斷驅(qū)動。
[0048](4.3)實現(xiàn)外設枚舉模塊,枚舉PCI/PCIE總線上的設備,并為設備分配10、內(nèi)存和中斷資源。
[0049](4.4)實現(xiàn)電源管理模塊。在進行S3待機時,電源管理模塊通知主板上的CPLD來設置外設電源狀態(tài);電源管理模塊還從CMOS中讀取啟動模式值,以決定固件后續(xù)的啟動路徑。
[0050](5)實現(xiàn)總線驅(qū)動模塊,包括 PCI/PCIE、SATA、PATA、SCS1、USB、ISA、SMBUS、LPCBUS,一個模塊實現(xiàn)一種總線協(xié)議。
[0051](6)實現(xiàn)固件應用層模塊。主要包括:
[0052](6.1)實現(xiàn)圖形界面模塊??蓪崿F(xiàn)一個圖形化的配置界面或命令行環(huán)境,支持用戶查看處理器型號和頻率、內(nèi)存容量和頻率、系統(tǒng)時間、啟動順序、外設列表等,并允許用戶對系統(tǒng)時間、啟動順序進行配置。
[0053](6.2)實現(xiàn) IEEE1275 支持模塊,根據(jù) IEEE Std.1275-1994 和 IEEEstd.1275.1-1994規(guī)范,建立操作系統(tǒng)啟動和運行所需要的設備樹(Device Tree),實現(xiàn)客戶程序接口(Client Interface)、設備接口(Device Interface)等。
[0054](6.3)實現(xiàn)內(nèi)核引導模塊,在內(nèi)存中創(chuàng)建數(shù)據(jù)結(jié)構(gòu)以存放操作系統(tǒng)需要的運行參數(shù),并根據(jù)用戶的配置,從硬盤、U盤、光盤的固定扇區(qū)中讀取操作系統(tǒng)內(nèi)核加載器SILO (Sparc Improved boot LOader)到內(nèi)存中,最后將控制權(quán)交給SILO,由SILO完成操作系統(tǒng)內(nèi)核的加載。
[0055](6.4)實現(xiàn)系統(tǒng)啟動模塊,其功能包括:加載配置界面,調(diào)用內(nèi)核引導模塊中的接口實現(xiàn)操作系統(tǒng)的加載。
[0056](6.5)實現(xiàn)Shell模塊,用戶可以通過在配置界面中設置啟動順序來啟動到Shell命令行環(huán)境,Shell提供多個命令實現(xiàn)系統(tǒng)信息