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