專利名稱:一種efi平臺的兼容方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計算機技術(shù)領(lǐng)域,尤其是一種在EFI平臺的兼容方法。
背景技術(shù):
目前現(xiàn)有的計算機技術(shù)里,要讓計算機硬件能啟動操作系統(tǒng),必須由BIOS (基本輸入/輸出系統(tǒng))提供支持,其內(nèi)容集成在微機主板上的一個ROM芯片上,
主要保存著有關(guān)微機系統(tǒng)最重要的基本輸入輸出程序、系統(tǒng)信息設(shè)置、開機上 電自檢程序和系統(tǒng)啟動自舉程序等。而在計算機技術(shù)突飛猛進的今天,現(xiàn)有BIOS 系統(tǒng)已經(jīng)大大制約了計算機產(chǎn)業(yè)的發(fā)展,所以現(xiàn)有BI0S系統(tǒng)被替代是歷史發(fā)展 的必然。
2004年英特爾公司首度大幅改造個人計算機BIOS后,即提出以新EFI規(guī)范 和標(biāo)準(zhǔn)替代現(xiàn)有BIOS的設(shè)想,并已經(jīng)得到微軟、惠普、安邁兒等幾乎所有世界 一流軟硬件廠商的支持,所以,該標(biāo)準(zhǔn)作為新公開的IT (Information Technologies)行業(yè)標(biāo)準(zhǔn),成為未來的工業(yè)標(biāo)準(zhǔn)已經(jīng)是業(yè)內(nèi)共識。EFI的英文全 稱為Extensible Firmware Interface,中文名稱為可擴展固件接口 。 EFI是用 于所有PC(個人計算機)和現(xiàn)行智能設(shè)備的固件標(biāo)準(zhǔn)接口,它可以用于PC在開機 前進行診斷和操作,同時能夠用于簡單的啟動操作系統(tǒng)和配置硬件環(huán)境,并可 用于各種設(shè)備和系統(tǒng)初始化及配置。它具有類似于DOS (Disk Operating System) 功能,但又遠比D0S功能要強大得多。它支持網(wǎng)絡(luò),支持最新IPV6標(biāo)準(zhǔn),同時 支持從外部存儲設(shè)備,比如說軟盤,光盤,USB,硬盤等設(shè)備上面來加載BIOS的模塊和驅(qū)動程序,或者從這些設(shè)備上面來執(zhí)行一些shell命令,從而擺脫了 BIOS容量和功能的限制,沒有重新燒制BIOS的風(fēng)險和麻煩。它是位于PC機硬 件(或者其它外設(shè))和操作系統(tǒng)(如Windows, Linux)之間的固件接口 (即連接 硬件系統(tǒng)和系統(tǒng)軟件之間的底層的軟固件)。EFI不僅可以具有傳統(tǒng)PC中 BIOS(Basic Input Output System)所有的功能,而且它的功能更強大。英特 爾公司已經(jīng)利用EFI建立一個可以取代BIOS開機前軟件的框架,計算機廠商可 以自由撰寫開機前軟件的模塊,并填入這個框架,這種模塊功能很像Windows 的驅(qū)動程序,本發(fā)明簡稱此軟件框架為EFI平臺。
然而,在EFI技術(shù)被廣泛運用之前,還需要一段過渡階段,其中最亟待解 決的技術(shù)問題就是怎樣在32位的EFI環(huán)境中使用現(xiàn)有的操作系統(tǒng),例如 D0S,WIND0S 9X/NT/2000/2003/XP, LINUX等,本發(fā)明稱之為傳統(tǒng)操作系統(tǒng)。這 些基于16位BIOS的操作系統(tǒng)無法直接在設(shè)置EFI的PC上使用?,F(xiàn)有技術(shù)所運 用的16位BI0S、基于16位BIOS的OpROMs (Optional ROM,可選只讀存儲器, 如存儲在主板,顯卡,網(wǎng)卡等只讀存儲器上的程序)、加電自檢內(nèi)存管理器均可 以"傳統(tǒng)"簡單標(biāo)示。注意"傳統(tǒng)BIOS"區(qū)別于"傳統(tǒng)16位形式的BIOS程序"。 而微軟公司即將推出的基于32位EFI的LONGHORN操作系統(tǒng),本發(fā)明稱之為新 型操作系統(tǒng),并取代用戶數(shù)量龐大的傳統(tǒng)操作系統(tǒng)將是一段長期過程。因為將 來EFI不僅用于個人計算機、還會用于嵌入式系統(tǒng),甚至廣泛應(yīng)用于所有家電 或手執(zhí)設(shè)備(例如手機),因此完整的EFI平臺的兼容方案不僅應(yīng)對提供傳統(tǒng)操 作系統(tǒng)兼容,還要提供傳統(tǒng)OpROMs兼容。提供EFI平臺的兼容方案是目前本領(lǐng) 域尚未解決的難題。 發(fā)明內(nèi)容本發(fā)明目的是針對現(xiàn)有技術(shù)存在的問題,提供一種EFI平臺的兼容方法。
為實現(xiàn)上述目的,本發(fā)明提供一種EFI平臺的兼容方法,設(shè)置兼容性支持 模塊并掛接到EFI平臺,兼容性支持模塊構(gòu)建16位實環(huán)境并提供與傳統(tǒng)16位 BIOS運行期間一致的功能,以便支持基于16位BIOS的OpROMs、安裝或啟動基 于16位BIOS的操作系統(tǒng)、和在基于16位BIOS的操作系統(tǒng)安裝或運行期間提 供支持。
兼容性支持模塊的工作流程有以下基本步驟,
(1) 進行兼容性支持模塊內(nèi)部初始化的步驟;
(2) 進行兼容性模塊與EFI的交互步驟;
(3) 激活并調(diào)用基于16位BI0S的0pR0Ms的步驟。 同時,所述兼容性支持模塊還包括以下部分,
與EFI的接口部分,用于兼容性支持模塊與EFI的聯(lián)系; 內(nèi)部初始化程序部分,用于兼容性支持模塊的內(nèi)部初始化; OpROMs處理功能塊,用于激活并且調(diào)用基于16位BIOS的OpROMs; 形實切換功能塊,用于兼容性支持模塊與EFI的交互; BIOS運行期間支持部分,用于實現(xiàn)與傳統(tǒng)16位BIOS運行期間一致的功能; 來自EFI的數(shù)據(jù)發(fā)送到與EFI的接口部分后轉(zhuǎn)發(fā)到兼容性支持模塊的其它 部分,并通過與EFI的接口部分調(diào)用內(nèi)部初始化程序部分進行初始化;來自EFI 的數(shù)據(jù)中需要OpRoms的數(shù)據(jù)傳送到OpRoms處理功能塊處理;與EFI的接口部 分和OpRoms處理功能塊調(diào)用Bios運行期間支持部分進行支持;當(dāng)Bios運行期 間支持部分需要用到32位EFI環(huán)境時調(diào)用形實切換功能塊,來進入到32位環(huán) 境獲取數(shù)據(jù)或服務(wù)。
而且,形實切換功能塊提供兩種機制,把控制權(quán)從32位EFI環(huán)境轉(zhuǎn)到16 位實環(huán)境然后返回32位EFI環(huán)境的切換機制;把控制權(quán)從16位實環(huán)境轉(zhuǎn)到32 位EFI環(huán)境然后返回到16位實環(huán)境的反切換機制。而且,通過兼容性支持模塊啟動操作系統(tǒng)時,提供從基于16位BIOS的 0pR0Ms啟動操作系統(tǒng)的選擇。
而且,所述兼容性支持模塊的85 95%代碼采用C語言編寫。
而且,兼容性支持模塊編譯過程中生成用于支持遠程源代碼調(diào)試的PDB文件。
而且,所述兼容性支持模塊中與EFI的接口部分遵循英特爾的EFI規(guī)范, 與基于16位BIOS的操作系統(tǒng)聯(lián)系的部分遵循傳統(tǒng)16位BIOS的規(guī)范。
本發(fā)明提供了一個兼容性支持模塊,能夠在EFI平臺兼容傳統(tǒng)操作系統(tǒng)和 傳統(tǒng)0pR0Ms。其功能主要是在將來設(shè)有EFI的計算機上既能夠啟動新型操作系 統(tǒng)(例如微軟即將要推出的LONGHORN),也能夠啟動現(xiàn)有的各種傳統(tǒng)操作系統(tǒng)。 本發(fā)明移植性好,能夠?qū)Σ僮飨到y(tǒng)提供更好的支持,使操作系統(tǒng)的啟動速度更 快,運行更加穩(wěn)定。并且能夠廣泛適用于設(shè)有EFI的個人計算機、嵌入式系統(tǒng), 甚至于所有設(shè)有EFI的家電或手執(zhí)設(shè)備。
圖1兼容性支持模塊組成示意圖; 圖2本發(fā)明實施例BIOS啟動設(shè)備選擇示意圖; 圖3切換與反切換機制示意圖; 圖4本發(fā)明實施例啟動傳統(tǒng)操作系統(tǒng)示意圖; 圖5本發(fā)明實施例啟動新型操作系統(tǒng)示意圖; 圖6本發(fā)明實施例的兼容性支持模塊各部分關(guān)系圖。
具體實施例方式
為了在EFI環(huán)境下兼容現(xiàn)有操作系統(tǒng),設(shè)置兼容性支持模塊并掛接到EFI 平臺,兼容性支持模塊構(gòu)建16位實環(huán)境并提供與傳統(tǒng)16位BIOS運行期間一致 的功能,以便支持基于16位BIOS的0pR0M、安裝或啟動基于16位BIOS的操作
7系統(tǒng)、和在基于16位BI0S的操作系統(tǒng)安裝或運行期間提供支持。在本發(fā)明中, 兼容性支持模塊簡稱為CSM。因為傳統(tǒng)操作系統(tǒng)基于16位BIOS,而EFI (可擴 展固件接口)系統(tǒng)是32位EFI環(huán)境,所以,在已設(shè)有EFI系統(tǒng)的計算機,在傳 統(tǒng)操作系統(tǒng)下無法啟動。本發(fā)明構(gòu)建出16位實環(huán)境,轉(zhuǎn)換由從EFI中得到的各 種32位數(shù)據(jù),使之成為16位數(shù)據(jù),激活和調(diào)用基于16位BIOS的0pR0Ms信息, 提供傳統(tǒng)操作系統(tǒng)所需各種服務(wù)。本發(fā)明設(shè)置兼容性支持模塊并掛接到EFI平 臺,計算機設(shè)備加電啟動后由EFI控制,兼容性支持模塊提供16位實環(huán)境以便 安裝、啟動基于16位BIOS的操作系統(tǒng)。EFI作為連接硬件系統(tǒng)和系統(tǒng)軟件之間 的底層的軟固件,擔(dān)負操作系統(tǒng)與硬件之間聯(lián)系的責(zé)任,因此除安裝和啟動這 兩種情況外,兼容性支持模塊還需在傳統(tǒng)操作系統(tǒng)運行期間提供支持??傮w來 說,兼容性支持模塊的任務(wù)就是從32位EFI環(huán)境轉(zhuǎn)換到16位實環(huán)境,并提供 與傳統(tǒng)16位BIOS運行期間一致的功能。對于BIOS的運行期間來說,安裝或者 啟動操作系統(tǒng)也是BIOS運行期間的內(nèi)容,不單純指操作系統(tǒng)的運行期間。所述 即能夠擁有EFI的優(yōu)勢,比如快速的啟動、更好的平臺適應(yīng)性、更好的穩(wěn)定性、 更容易的開發(fā)和降低開發(fā)的成本,同時也與傳統(tǒng)16位BIOS運行期間一致的功 能,既包括與傳統(tǒng)16位BI0S運行期間一樣的功能,也可包括更多的擴展功能, 比如能夠較為快速的啟動系統(tǒng)。
所謂兼容性支持模塊掛接到EFI平臺,即指兼容性支持模塊是EFI中的一 個部分, 一個模塊。具體實施時,EFI其它部分可以直接采用遵循EFI規(guī)范的軟 硬件廠商提供的開源代碼,兼容性支持模塊則根據(jù)本發(fā)明提供的組成部分和工 作流程由本領(lǐng)域技術(shù)人員編寫即可,本發(fā)明所要求的技術(shù)方案保護范圍并不包 括EFI其它部分的具體構(gòu)成。在具體實施過程中,兼容性支持模塊可以與EFI 的其它部分整體固化。但在本發(fā)明中,為了簡便說明兼容性支持模塊與EFI其 它部分的交互,所稱EFI沒有包含兼容性支持模塊。為了實現(xiàn)從32位EFI環(huán)境 轉(zhuǎn)換倒16位實環(huán)境,并提供傳統(tǒng)16位BIOS運行期間一致的功能,本發(fā)明的兼容性支持模塊工作流程有以下基本步驟(1)進行兼容性支持模塊內(nèi)部初始化的步驟;(2)進行兼容性模塊與EFI的交互步驟;(3)激活并調(diào)用基于16位BIOS 的0pR0Ms的步驟。上述基本步驟完成后,16位實環(huán)境已構(gòu)建完畢,若任務(wù)為啟 動傳統(tǒng)操作系統(tǒng),則進入啟動傳統(tǒng)操作系統(tǒng)步驟,啟動基于16位BI0S的操作 系統(tǒng)。在EFI CSM構(gòu)建的16位實模式環(huán)境下安裝基于16位BIOS的操作系統(tǒng), 與啟動基于16 BIOS的操作系統(tǒng)過程基本類似,只是操作系統(tǒng)所調(diào)用的BIOS服 務(wù)不一樣,因此本發(fā)明將主要以啟動傳統(tǒng)操作系統(tǒng)作為實施例進行說明,安裝 過程不予贅述。兼容傳統(tǒng)0pR0Ms則只需進行到步驟(3)。開機運行EFI到Shell (EFI的命令行執(zhí)行外殼,與DOS或者LINUX的命令 行執(zhí)行外殼有點類似)階段后,開始加載并初始化兼容性支持模塊,執(zhí)行上述 各步驟。值得注意的是,因為需要分次轉(zhuǎn)換各類傳統(tǒng)0pR0M信息,步驟(2)反 復(fù)運用從32位EFI環(huán)境轉(zhuǎn)到16位實環(huán)境然后返回EFI的切換機制。為了應(yīng)對 可能出現(xiàn)的異常情況,本發(fā)明提供了與之相反的反切換機制,即把控制權(quán)從16 位實環(huán)境轉(zhuǎn)到32位EFI環(huán)境然后返回到16位實環(huán)境。為了能夠在EFI環(huán)境下兼容現(xiàn)有傳統(tǒng)操作系統(tǒng),本發(fā)明提供的兼容性支持 模塊包括以下部分,(a)與EFI的接口部分,通過這些接口,把CSM和EFI有機的聯(lián)系在一起, 在控制權(quán)完全交到基于16位BI0S的操作系統(tǒng)之前,CSM的操作離不開該部分的 支持。為了實行兼容性支持模塊與EFI其它部分的交互,首先必須能建立兼容性 支持模塊與EFI其它部分的聯(lián)系,本發(fā)明通過在CSM中設(shè)立與EFI的接口部分 來實現(xiàn)這種聯(lián)系。如圖1所示,英特爾公司為了使BI0S廠商能夠更好的遵循EFI 規(guī)范并實現(xiàn)兼容性支持,已經(jīng)在EFI里面包含了用來幫助BIOS廠商實現(xiàn)兼容性 支持的EFI驅(qū)動。這些驅(qū)動包括把EFI從32位保護模式切換到16位實模式的 驅(qū)動,BIOS啟動設(shè)備選擇驅(qū)動,為傳統(tǒng)BIOS內(nèi)存區(qū)域管理提供支持的EFI驅(qū)動,控制器8259提供支持的EFI驅(qū)動,為傳統(tǒng)BIOS提供磁盤信 息的EFI驅(qū)動,為工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)的高級電源管理提供支持的EFI驅(qū)動。這些驅(qū) 動為BIOS廠商將要實現(xiàn)的CSM提供了接口 , BIOS廠商把自己的CSM編譯成64K 或者128K的二進制文件,英特爾公司提供的這些EFI驅(qū)動,負責(zé)把以上二進制 文件的內(nèi)容映像到1M以下的內(nèi)存區(qū)域。本發(fā)明具體實施時,EFI通過CSM中與 EFI的接口部分(即CSM向EFI提供的接口),連接上述EFI向CSM提供的接口, 將CSM與EFI聯(lián)系到一起。由于本發(fā)明提供的CSM處在EFI環(huán)境中,需要與EFI進行交互,所以兼容 性支持模塊中與EFI的接口部分必須遵循EFI的規(guī)范,這些規(guī)范可以在英特爾 公司的網(wǎng)站找到。同時,由于CSM需要給操作系統(tǒng)提供16位實環(huán)境,因此CSM 中與基于16位BI0S的操作系統(tǒng)的聯(lián)接部分必須參照傳統(tǒng)BIOS的規(guī)范。傳統(tǒng)BIOS7^c力/lz'csJ y e/kre/7ce. Second edition. IBM Corporation, IBM No. S68X-234卜00, 1988。該聯(lián)接部分提供與傳統(tǒng)BIOS運行期間一致的16位形式 的接口。由于本發(fā)明CSM的實現(xiàn)目的,該接口是由CSM中的所有部分實現(xiàn)的,特 殊的是,與EFI的接口部分為間接實現(xiàn),因此不算與基于16位BIOS的操作系 統(tǒng)聯(lián)系的部分,它遵循的是EFI的規(guī)范。雖然本發(fā)明CSM并沒有提供與傳統(tǒng)16 位BIOS完全相同的內(nèi)容,并沒有POST部分,但是遵循的規(guī)范仍然是一致的。(b) 內(nèi)部初始化程序部分,用于內(nèi)部的一些初始化,以便本身能夠正常的工作。(c) OpROMs處理功能塊,傳統(tǒng)的OpROMs雖然已由EFI映像到內(nèi)存,但是 仍然需要CSM程序來啟動并且調(diào)用OpROMs上面的程序。(d) 形實切換功能塊,具體實施時,由EFI的32位模式切換CSM的16位 實模式程序,可采用英特爾公司的形實切換驅(qū)動,但是,由BI0S廠商提供由16 位實模式切換到32位EFI環(huán)境的程序。10(e) BIOS運行期間支持部分,實現(xiàn)與傳統(tǒng)BIOS運行期間一樣的功能,向 操作系統(tǒng)提供中斷服務(wù),內(nèi)存管理信息,電源管理接口,桌面管理接口,系統(tǒng) 管理BI0S,是操作系統(tǒng)正常安裝,啟動,運行的關(guān)鍵。參見附圖6,本發(fā)明還提供了實施例的各部分關(guān)系,以供實施參考來自 EFI的數(shù)據(jù)發(fā)送到與EFI的接口部分后轉(zhuǎn)發(fā)到兼容性支持模塊的其它部分,并通 過與EFI的接口部分調(diào)用內(nèi)部初始化程序部分進行初始化;來自EFI的數(shù)據(jù)中 需要0pRoms的數(shù)據(jù)傳送到0pRoms處理功能塊處理;與EFI的接口部分和0pRoms 處理功能塊調(diào)用Bios運行期間支持部分進行支持;當(dāng)Bios運行期間支持部分 需要用到32位EFI環(huán)境時調(diào)用形實切換功能塊,來進入到32位環(huán)境獲取數(shù)據(jù) 或服務(wù)。因為16位實環(huán)境與32位EFI環(huán)境交錯混雜,本發(fā)明的實現(xiàn)需要一定技巧。 在具體實施過程中,采用模塊化設(shè)計方式,絕大部分使用C語言編程,只有少 部分匯編程序,擴展性更大,功能性更強。本發(fā)明實施例將實現(xiàn)兼容性支持的 代碼分為幾個代碼塊為兼容性提供支持的EFI環(huán)境下32位程序(此部分由英 特爾公司提供),提供16位實環(huán)境的16位程序(本發(fā)明稱為LEGACY16),在32 位和16位之間切換的程序,兼容性支持S醒(System Management Mode,系統(tǒng)管 理模式)程序。由于上述啟動傳統(tǒng)操作系統(tǒng)的四個步驟都需要由EFI平臺引導(dǎo)開 始,為了說明EFI與兼容性支持模塊之間的互動,EFI環(huán)境里面為兼容性提供支 持的程序被稱為32位CSM,而EFI的其它代碼被統(tǒng)稱為EFI或者32位EFI,本 發(fā)明實現(xiàn)的16位兼容性程序稱為16位CSM。由于從傳統(tǒng)16位BIOS轉(zhuǎn)換到32位EFI會是一個長期的過程,而基于16 位的硬件和硬件上面固化的程序(主要是傳統(tǒng)的0pR0Ms和傳統(tǒng)操作系統(tǒng))不能 識別EFI。出于提供一種兼容可能性的目的,英特爾公司己經(jīng)在EFI架構(gòu)內(nèi)提供 部分為兼容性提供支持的32位EFI的驅(qū)動代碼,也提出CSM的設(shè)計思路,但是, 這種思路很抽象,沒能解決兼容性的難題。而本發(fā)明則提出了完整的兼容方案,完善了兼容切換機制,實現(xiàn)了兼容傳統(tǒng)操作系統(tǒng)的目的。為了便于實施,本發(fā)
明說明英特爾公司為兼容性提供支持的32位EFI驅(qū)動內(nèi)容,及其與兼容性16 位BIOS程序、兼容性16位系統(tǒng)管理模式程序之間的關(guān)系,參見圖1:為32位 EFI提供兼容性支持驅(qū)動的主體是為傳統(tǒng)內(nèi)存區(qū)域管理提供支持的EFI驅(qū)動、為 傳統(tǒng)BIOS可編程控制器8259提供支持的EFI驅(qū)動、為傳統(tǒng)BIOS提供磁盤信息 的EFI驅(qū)動和為工業(yè)標(biāo)準(zhǔn)架構(gòu)的高級電源管理接口提供支持的EFI驅(qū)動,由于 為BIOS啟動設(shè)備選擇提供支持的EFI驅(qū)動(該驅(qū)動是為傳統(tǒng)BIOS啟動提供支持 的EFI驅(qū)動中的)和EFI形實切換驅(qū)動抽象出的傳統(tǒng)BI0S協(xié)議(該協(xié)議是為EFI 啟動提供支持的BIOS驅(qū)動中的),初始化后提供的為傳統(tǒng)BIOS提供支持的EFI 驅(qū)動。具體實施過程中,需要編寫兼容性16位的系統(tǒng)管理模式程序和兼容性16 位的BIOS程序。為傳統(tǒng)BIOS提供支持的EFI驅(qū)動與兼容性16位的系統(tǒng)管理模 式程序進行交互,并為兼容性16位的系統(tǒng)管理模式程序提供支持,為兼容性提 供支持的32位的EFI驅(qū)動與兼容性16位的BIOS程序進行交互,并為兼容性16 位的BIOS程序提供支持。根據(jù)傳統(tǒng)操作系統(tǒng)協(xié)議編寫的兼容性16位BIOS程序 最終提供了 16位實環(huán)境,為傳統(tǒng)操作的啟動和運行提供支持。兼容性16位的 系統(tǒng)管理模式程序和兼容性16位的BIOS程序都是面向傳統(tǒng)操作系統(tǒng)提供16位 BI0S接口,可以稱之為傳統(tǒng)16位形式的BI0S程序。為了方便實施,本發(fā)明還 在附圖1中標(biāo)記了兼容性支持模塊各部分的性質(zhì)來源標(biāo)記A表示是EFI框架 下的普通程序,B表示與具體硬件平臺有關(guān)的程序,C表示兼容性16位BI0S, D 表示由獨立BIOS廠商提供的程序。
本發(fā)明提供進一步分析程序代碼與兼容性支持模塊各部分的關(guān)系以便實
施
本發(fā)明實施例主要提供了兼容性16位的BIOS程序代碼和兼容性16位的系 統(tǒng)管理模式程序代碼。兼容性16位的BIOS程序支持除了為OpROMs和傳統(tǒng)的硬 件提供中斷服務(wù)函數(shù)以外,還提供所有的運行期間支持,是正常啟動,安裝和運行傳統(tǒng)操作系統(tǒng)所必須的。因此兼容性16位的BIOS程序代碼包括與EFI的 接口部分、內(nèi)部初始化程序部分,傳統(tǒng)OpROMs處理功能塊,形實切換功能塊, 傳統(tǒng)BIOS運行期間支持部分。具體實施時,形實切換功能塊中從32位EFI環(huán) 境切換到16位實模式可以直接利用屬于為兼容性提供支持的32位的EFI驅(qū)動, 從16位實模式環(huán)境返回32位EFI環(huán)境屬于兼容性16位的BIOS程序,這一過 程本發(fā)明稱之為"切換";從16位實模式到32位EFI環(huán)境屬于兼容性16位的 BIOS程序,返回屬于為兼容性提供支持的32位的EFI驅(qū)動,這一過程我們稱之為 "反切換"。兼容性16位的系統(tǒng)管理模式程序是可選擇的,用戶的需求或者傳 統(tǒng)的部分屬性也有可能迫使它成為一個需要的代碼塊,用于提供特殊情況下傳 統(tǒng)操作系統(tǒng)的系統(tǒng)管理所需的額外支持。兼容性16位的系統(tǒng)管理模式程序是與 芯片組和/或平臺相關(guān)的。下面是可能需要兼容性16位的系統(tǒng)管理模式程序的 一些例子為支持INT 15 D042的系統(tǒng)配置數(shù)據(jù);為鼠標(biāo)和鍵盤提供舊型USB 支持;用USB啟動設(shè)備信息更新BBS (Bios Boot Specif ication, BIOS啟動規(guī) 范)。
結(jié)合代碼,本發(fā)明提供了具體實施例的啟動傳統(tǒng)操作系統(tǒng)過程和啟動新型 操作系統(tǒng)過程
參見圖4,本發(fā)明實施例在EFI平臺啟動基于16位BIOS的操作系統(tǒng)有以下 步驟,
(11)由內(nèi)部初始化程序部分進行初始化步驟。當(dāng)進入到BDS (BIOS Boot Device Selection, BIOS啟動設(shè)備選擇)階段后,依據(jù)使用者意愿,可選擇從 CSM或shell啟動。對于選擇從EFI啟動到Shell后,使用者仍然可以通過Shell 命令裝載并初始化兼容性支持模塊。對于直接選擇從CSm啟動,則EFI系統(tǒng)直 接裝載并初始化兼容性支持模塊。裝載并初始化之后,EFI系統(tǒng)將找到32位CSM 的入口點,并執(zhí)行里面的程序。32位的CSM程序首先檢查是否加載了 16位的 CSM,如果沒有,則不能啟動傳統(tǒng)的操作系統(tǒng)。具體操作為初始化基于16位BIOS的加電自檢內(nèi)存管理器,把兼容性支持模塊映像到內(nèi)存,并從這個內(nèi)存區(qū) 域里面以特定的標(biāo)識搜索兼容性支持模塊與EFI的聯(lián)系表格,從表格里面得到 16位兼容性支持模塊的入口地址,切換到16位實模式,并轉(zhuǎn)到16位兼容性支 持模塊的入口執(zhí)行。本發(fā)明實施例中內(nèi)部初始化程序部分由英特爾的EFI驅(qū)動 完成。
從控制權(quán)角度看16位的CSM程序向32位的CSM程序提供16位BIOS程序 的入口點等信息,32位的CSM程序得到這些信息,在進行了一些其本身的內(nèi)部 初始化以后,切換到16位實模式,并把控制權(quán)交給16位的CSM程序。16位的 CSM程序執(zhí)行一些初始化步驟以后,把控制權(quán)交還給32位的CSM程序。
(12) 與EFI的交互步驟。這個步驟需要幾次用到由形實切換功能塊實現(xiàn) 的切換和反切換機制(如圖3所示)。通過這個步驟,CSM從EFI得到高級電源 管理接口的數(shù)據(jù),得到內(nèi)存管理信息的數(shù)據(jù),系統(tǒng)管理BIOS的數(shù)據(jù),磁盤信息 的數(shù)據(jù),多處理器數(shù)據(jù),PCI(周邊組件擴展接口)中斷路由表的數(shù)據(jù),BBS(Bios 啟動規(guī)范)的相關(guān)數(shù)據(jù)來完成CSM內(nèi)部的初始化,同時,CSM向EFI提供由 OEM (Original Equipment Manufacturer,原始設(shè)備制造商)提供的16位或者32 位的程序和/或數(shù)據(jù),來實現(xiàn)BI0S的個性化和/或某些額外的功能。
從控制權(quán)角度看32位的CSM程序加載顯卡驅(qū)動,并把相關(guān)信息傳遞給16 位的CSM,然后把控制權(quán)交給16位的CSM程序。
(13) 通過0pR0Ms處理功能塊啟動并調(diào)用基于16位BIOS的0pR0Ms信息 的步驟。某些0pR0M可能會接管某些中斷,比如顯卡上的0pR0M可能就會接管 INT 10H,某些帶啟動功能的0pR0M可能會接管INT 19H和INT 18H;其它PCI 只讀存儲器(如網(wǎng)卡)的初始化過程與顯卡的過程類似,也是由32位的CSM程 序把0pR0M里面的內(nèi)容映像到內(nèi)存,并把相關(guān)信息傳遞給16位的CSM,把硬件 設(shè)備按傳統(tǒng)16位實模式的方式初始化,切換到16位實模式。
從控制權(quán)角度看由16位的CSM程序進行進一步的初始化工作,啟動并調(diào)用0pR0M里面的程序,然后把控制權(quán)交還給32位的CSM程序。
(14)所有上述操作完成以后,進行傳統(tǒng)操作系統(tǒng)啟動步驟。16位的CSM 將進行一些操作系統(tǒng)啟動之前的準(zhǔn)備工作,最后32位的CSM程序把控制權(quán)交給 16位的CSM程序,由16位的CSM程序來完成最終的傳統(tǒng)方式的啟動工作,啟動 成功后控制權(quán)將交給操作系統(tǒng),不再返回EFI環(huán)境。在操作系統(tǒng)的運行期間, 16位的CSM繼續(xù)通過BIOS運行期間支持部分對操作系統(tǒng)提供運行期間支持。
參見圖5,啟動新型操作系統(tǒng)則兼容性支持模塊為EFI啟動到Shell后, 裝載并初始化兼容性支持模塊,找到32位CSM的入口點,并執(zhí)行里面的程序。 接著就開始新型操作系統(tǒng)的啟動。新型操作系統(tǒng)的啟動不涉及到16位的CSM程 序,整個啟動過程都是由英特爾提供的EFI驅(qū)動來完成的,與本發(fā)明的技術(shù)目 的無關(guān),放在此處與傳統(tǒng)操作系統(tǒng)的啟動做為對比。
為了實現(xiàn)啟動,首先需要構(gòu)建出兼容性支持模塊的工作模式,因為EFI已 經(jīng)完成了與傳統(tǒng)BIOS的POST (Power On Self Test,加電自檢)相類似的功能, 本發(fā)明主要實現(xiàn)的是傳統(tǒng)16位BIOS程序的運行期間支持部分,內(nèi)容如下與 EFI的接口代碼;內(nèi)部初始化代碼;從EFI得到高級電源管理接口數(shù)據(jù)并提供給 操作系統(tǒng)的代碼;從EFI得到內(nèi)存管理數(shù)據(jù)并提供給操作系統(tǒng)的代碼;從EFI 得到PCI中斷路由表的數(shù)據(jù),并用傳統(tǒng)的中斷請求資源來更新硬件信息的代碼; 從EFI得到啟動設(shè)備列表的代碼;形實切換代碼;啟動和調(diào)用傳統(tǒng)0pR0Ms的代 碼;進一步初始化硬件的代碼;中斷環(huán)境的構(gòu)建和中斷服務(wù)函數(shù)代碼;裝載一 個傳統(tǒng)操作系統(tǒng)的代碼。其中裝載一個傳統(tǒng)的操作系統(tǒng)的代碼即操作系統(tǒng)啟動 程序,該程序的執(zhí)行步驟為從EFI得到數(shù)據(jù),并且把這些數(shù)據(jù)轉(zhuǎn)化為為傳統(tǒng) 16位形式BI0S提供支持的模塊所需要的數(shù)據(jù)結(jié)構(gòu)形式;更新標(biāo)準(zhǔn)的BDA (BIOS Data Area, BIOS數(shù)據(jù)區(qū)域,內(nèi)存里面的開辟一個區(qū)域,斷電以后數(shù)據(jù)消失)、EBDA (Extended BIOS Data Area,擴展BIOS數(shù)據(jù)區(qū)域,內(nèi)存里面的開辟一個區(qū)域,斷電以后數(shù)據(jù)消失)、禾口 CMOS (Complementary Metal-Oxide-Semiconductor Transistor, 互補型金屬氧化物半導(dǎo)體, 一般在主板上,有專門的CMOS電池 供電,斷電以后數(shù)據(jù)不會消失)里面的數(shù)據(jù);用傳統(tǒng)的資源(IRQs)來更新硬 件配置信息。本發(fā)明的操作系統(tǒng)啟動功能塊提供由16位BIOS的0pR0Ms啟動操 作系統(tǒng)的選擇,這種情況通常是應(yīng)用在PC以外所安裝的EFI設(shè)備上。為了選擇 具體的啟動設(shè)備啟動操作系統(tǒng),EFI驅(qū)動會產(chǎn)生一個啟動設(shè)備的列表,以便更新 BDS (BIOS Boot Device Selection, BI0S啟動設(shè)備選擇)數(shù)據(jù),CSM從EFI得 到BDS的數(shù)據(jù),從而使用戶能夠自由選擇啟動設(shè)備。
本發(fā)明的傳統(tǒng)16位形式的BIOS程序用于提供16位實環(huán)境,可看作是提供 了一個與傳統(tǒng)操作系統(tǒng)相對應(yīng)的BIOS,并去掉加電自檢和BIOS設(shè)置部分。這個 "BIOS"包含以下內(nèi)容運行期間支持程序;INT 18h,用于處理啟動失敗時的 中斷服務(wù)函數(shù);INT 19h,用于傳統(tǒng)操作系統(tǒng)引導(dǎo)的中斷服務(wù)函數(shù); 一小段處理 為兼容性提供支持的EFI驅(qū)動和傳統(tǒng)16位形式的BIOS程序接口的程序。具體 實施時過程中,傳統(tǒng)16位形式的BIOS程序可由本領(lǐng)域技術(shù)人員自行參考技術(shù) 手冊進行設(shè)計,實現(xiàn)與現(xiàn)有BIOS提供商提供的BIOS相似的功能。為了使兼容 性支持模塊對每一類平臺都通用(如桌面,服務(wù)器,移動平臺),本發(fā)明的傳統(tǒng) 16位形式的BIOS程序與芯片組和具體硬件平臺無關(guān),它通過傳統(tǒng)的硬件接口控 制硬件,把芯片組的編程留給EFI和/或為兼容性提供支持的EFI驅(qū)動來做。這 樣可以使代碼的可重用性最大化,減少代碼的BUG。本發(fā)明具體實施時,Legacyl6 代碼被編譯為一個64K或者128K的無格式的二進制文件,然后這個二進制文件 配合為兼容性提供支持的EFI驅(qū)動, 一起編譯為一個FV (Firmware Volume)檔。 在運行的時候,16位代碼將被裝載到內(nèi)存。
為了將從EFI得到的數(shù)據(jù)轉(zhuǎn)化為兼容的16位數(shù)據(jù)結(jié)構(gòu),即為兼容性提供支 持的EFI驅(qū)動和傳統(tǒng)16位形式的BIOS程序之間的通訊,本發(fā)明采用形實切換
16功能塊,具體實施時可以采用數(shù)據(jù)表格和函數(shù)形式。兼容性16位表格,該表由
EFI建立,然后將傳統(tǒng)0pR0Ms信息傳遞給16位實環(huán)境構(gòu)建功能塊。傳統(tǒng)16位 形式的BIOS程序的函數(shù)提供為兼容性提供支持的EFI驅(qū)動需要的指定信息。本 發(fā)明具體實施例提供的傳統(tǒng)16位形式的BIOS程序的函數(shù)舉例如下 LEGACY16InitializeYourself (),用來允許LEGACY16做一些初始化的工作; LEGACY16Pr印areToBoot (),允許LEGACY16在啟動一個傳統(tǒng)的操作系統(tǒng)之前再 做一些清理或者其它的工作,為操作系統(tǒng)的最終成功啟動做最后的準(zhǔn)備工作; LEGACY16GetTableAddress(),請求LEGACY16內(nèi)存區(qū)域里面分配指定大小的一 個內(nèi)存塊,為兼容性提供支持的EFI驅(qū)動就會把數(shù)據(jù)拷貝到內(nèi)存塊里面去。操 作系統(tǒng)啟動之前,需要BI0S做一些初始化工作,在操作系統(tǒng)啟動以后,還需要 BIOS提供一些運行期間的支持,因為在操作系統(tǒng)的運行過程中,它還需要調(diào)用 BIOS的一些中斷服務(wù)或者從BIOS得到一些參數(shù)信息等。傳統(tǒng)16位形式的BIOS 程序?qū)崿F(xiàn)的傳統(tǒng)操作系統(tǒng)運行期間支持功能塊滿足上述需求。中斷服務(wù)是最重 要的一部分,包括INT 0x08 (系統(tǒng)時鐘中斷)、INT 0x09 (鍵盤中斷)、INT 0x10 (顯示服務(wù))、INT 0x11 (返回系統(tǒng)配置信息)、INT 0x12 (返回基本內(nèi)存的大 小)等,按照中斷服務(wù)手冊編寫即可。其它支持還有ACPI支持和APM支持等。 ACPI是一個高級電源管理的接口,它會告訴操作系統(tǒng)如何管理和節(jié)省電源。某 些傳統(tǒng)操作系統(tǒng),如WINDOWS XP, LINUX等會在啟動的時候在內(nèi)存中搜索ACPI 表,如果沒有找到則不能啟動。操作系統(tǒng)在運行的時候,隨時都可能需要調(diào)用 ACPI表里面的數(shù)據(jù)來管理設(shè)備的電源。這個特性對于一些移動設(shè)備,比如筆記 本電腦來說,是非常重要和有意義的。最常見的一種情況就是如果在規(guī)定的時 間內(nèi),用戶沒有移動鼠標(biāo)或鍵盤,WINDOWS就進入省電模式,當(dāng)用戶移動鼠標(biāo)或 敲擊鍵盤的時候,計算機又從省電模式中恢復(fù)過來。APM是一個比較老的標(biāo)準(zhǔn), 但是某些操作系統(tǒng)卻需要它,比如說Windows95, Windows98等就需要用它來對 設(shè)備進行電源管理。因為在Windows95, Windows98開始推廣時,ACPI的標(biāo)準(zhǔn)尚
17未普及。
參見圖3,本發(fā)明模式切換程序用來提供一個把控制權(quán)從32位EFI環(huán)境轉(zhuǎn) 到16位實環(huán)境然后返回EFI的切換機制;為了應(yīng)對可能出現(xiàn)的異常情況,本發(fā) 明提供了與之相反的反切換機制。具體的說,模式切換程序進行從傳統(tǒng)BIOS的 16位實模式環(huán)境或者傳統(tǒng)0pR0Ms的16位實模式環(huán)境到32位EFI環(huán)境的切換, 需要進行以下步驟處理任何PIC (Programmable Interrupt Controller,可編 程中斷控制器)禾口 APIC (Advanced Programmable Interrupt Controller,高級 可編程中斷控制器)的重編程序,并且裝載新的GDT (Global Description Tab le,全局描述符)和IDT (Interrupt Description Table,中斷描述符)表;執(zhí)行 請求的動作;保存32位EFI環(huán)境的寄存器狀態(tài);恢復(fù)16位的中斷環(huán)境并且返 回16位實模式環(huán)境。切換機制的步驟與之相反,此屬英特爾公司提供的內(nèi)容, 在此不予贅述。
為了能夠從磁盤以外的設(shè)備啟動傳統(tǒng)操作系統(tǒng),操作系統(tǒng)啟動功能塊提供 基于16位BIOS的0pR0Ms啟動操作系統(tǒng)的選擇。關(guān)于BDS (BIOS Boot Device Selection, BIOS啟動設(shè)備選擇)在前文已有闡述,現(xiàn)提供傳統(tǒng)BDS流程,參見 圖2:判斷是否需要傳統(tǒng)的服務(wù)(傳統(tǒng)的0pR0Ms的情況、啟動各個傳統(tǒng)操作系 統(tǒng)的情況、是否存在一個可啟動的操作系統(tǒng)情況),如果不需要就選擇普通EFI 啟動路徑來啟動EFI系統(tǒng)或者新型的操作系統(tǒng);如果需要的話,就選擇從傳統(tǒng) 路徑來啟動傳統(tǒng)的操作系統(tǒng),首先加載對傳統(tǒng)路徑提供支持的驅(qū)動,然后加載 傳統(tǒng)BI0S程序(指EFI之前的BIOS, —般是用匯編語言編寫的16位程序);判 斷是否需要傳統(tǒng)的視頻可選只讀存儲器,如果需要的話,就載入傳統(tǒng)視頻可選 只讀存儲器,否則直接進入下一步;判斷是否需要用其它的傳統(tǒng)可選只讀存儲 器,如果需要的話,則加載傳統(tǒng)可選只讀存儲器,否則直接進入下一步;判斷 是否啟動傳統(tǒng)操作系統(tǒng),如果不需要的話,就進入普通EFI啟動,如果需要,則進入下一步;生成系統(tǒng)管理BIOS數(shù)據(jù)結(jié)構(gòu),生成傳統(tǒng)設(shè)備的結(jié)構(gòu),生成BBS (bios啟動規(guī)范)和INT15 E820數(shù)據(jù)結(jié)構(gòu)(INT 15是一個復(fù)雜的中斷,主要 用來向操作系統(tǒng)提供多種系統(tǒng)服務(wù), 一些傳統(tǒng)操作系統(tǒng)調(diào)用INT15的E820功能 査詢內(nèi)存大小和分配情況),生成高級電源管理接口;裝載兼容性系統(tǒng)管理模式 程序,然后嘗試啟動傳統(tǒng)操作系統(tǒng);如果啟動成功,則將控制權(quán)交給操作系統(tǒng), 傳統(tǒng)16位形式的BIOS對其運行期間提供支持,保障操作系統(tǒng)的穩(wěn)定運行。如 果啟動失敗,則存儲啟動表信息,重新尋找可以使用的可啟動設(shè)備;如果仍然 無法正常使用,將有,就從下一個可啟動設(shè)備來啟動操作系統(tǒng),否則重啟系統(tǒng)。
為了提高實用性,本發(fā)明提供更進一步的技術(shù)方案目前的BIOS均采用匯 編語言編程,本發(fā)明實施例的兼容性支持模塊中的85 95%的代碼均采用C語 言進行編寫,移植性好,便于調(diào)試。本發(fā)明實施時,兼容性支持模塊編譯過程 中生成用于支持遠程源代碼調(diào)試的PDB文件,PDB文件是微軟公司支持調(diào)試的一 個文件格式,在pdb文件里面記錄了源代碼的行號,標(biāo)識等信息。
權(quán)利要求
1.一種EFI平臺的兼容方法,其特征是設(shè)置兼容性支持模塊并掛接到EFI平臺,兼容性支持模塊構(gòu)建16位實環(huán)境并提供與傳統(tǒng)16位BIOS運行期間一致的功能以便支持基于16位BIOS的OpROMs、安裝或啟動基于16位BIOS的操作系統(tǒng)、和/或在基于16位BIOS的操作系統(tǒng)安裝或運行期間提供支持。
2. 如權(quán)利要求1所述兼容方法,其特征是兼容性支持模塊的工作流程有 以下基本步驟,(1) 進行兼容性支持模塊內(nèi)部初始化的步驟;(2) 進行兼容性模塊與EFI的交互步驟;(3) 激活并調(diào)用基于16位BIOS的0pR0Ms的步驟。
3. 如權(quán)利要求1或2所述兼容方法,其特征是所述兼容性支持模塊包括 以下部分,與EFI的接口部分,用于兼容性支持模塊與EFI的聯(lián)系; 內(nèi)部初始化程序部分,用于兼容性支持模塊的內(nèi)部初始化; 0pR0Ms處理功能塊,用于激活并且調(diào)用基于16位BIOS的0pR0Ms; 形實切換功能塊,用于兼容性支持模塊與EFI的交互; BIOS運行期間支持部分,用于實現(xiàn)與傳統(tǒng)16位BIOS運行期間一致的功能; 來自EFI的數(shù)據(jù)發(fā)送到與EFI的接口部分后轉(zhuǎn)發(fā)到兼容性支持模塊的其它 部分,并通過與EFI的接口部分調(diào)用內(nèi)部初始化程序部分進行初始化;來自EFI 的數(shù)據(jù)中需要0pRoms的數(shù)據(jù)傳送到0pRoms處理功能塊處理;與EFI的接口部 分和0pRoms處理功能塊調(diào)用Bios運行期間支持部分進行支持;當(dāng)Bios運行期 間支持部分需要用到32位EFI環(huán)境時調(diào)用形實切換功能塊,來進入到32位環(huán) 境獲取數(shù)據(jù)或服務(wù)。
4. 如權(quán)利要求3所述的兼容方法,其特征是形實切換功能塊提供兩種機制,把控制權(quán)從32位EFI環(huán)境轉(zhuǎn)到16位實環(huán)境然后返回32位EFI環(huán)境的切換 機制;把控制權(quán)從16位實環(huán)境轉(zhuǎn)到32位EFI環(huán)境然后返回到16位實環(huán)境的反 切換機制。
5. 如權(quán)利要求1或2所述的兼容方法,其特征是通過兼容性支持模塊啟 動操作系統(tǒng)時,提供從基于16位BIOS的0pR0Ms啟動操作系統(tǒng)的選擇。
6. 如權(quán)利要求1或2所述的兼容方法,其特征是所述兼容性支持模塊的 85 95%代碼采用C語言編寫。
7. 如權(quán)利要求1或2所述的兼容方法,其特征是兼容性支持模塊編譯過 程中生成用于支持遠程源代碼調(diào)試的PDB文件。
8. 如權(quán)利要求1或2所述的兼容方法,其特征是所述兼容性支持模塊中 與EFI的接口部分遵循Intel的EFI規(guī)范,與基于16位BIOS的操作系統(tǒng)聯(lián)系 的部分遵循傳統(tǒng)16位BIOS的規(guī)范。
全文摘要
一種在EFI平臺上兼容操作系統(tǒng)的方法,設(shè)置兼容性支持模塊并掛接到EFI平臺,實現(xiàn)16位BIOS模塊以及獨立的EFI與16位BIOS模塊之間的交互層。實現(xiàn)兩者之間的互相通信,交互層可以從16位BIOS模塊中收集信息提供給EFI,同時也從EFI收集信息提供給16位BIOS模塊。計算機設(shè)備加電啟動后由EFI控制,兼容性支持模塊提供16位實環(huán)境以便安裝、啟動基于16位BIOS的操作系統(tǒng),并在該操作系統(tǒng)運行期間提供支持。運用本發(fā)明在將來設(shè)有EFI的計算機上即能夠啟動新型操作系統(tǒng)(例如微軟即將要推出的LONGHORN),也能夠啟動現(xiàn)有的各種傳統(tǒng)操作系統(tǒng)。本發(fā)明移植性好,啟動速度快,能夠?qū)Σ僮飨到y(tǒng)提供更好的支持,使操作系統(tǒng)啟動的速度更快,運行更加穩(wěn)定。
文檔編號G06F9/44GK101650647SQ200810048770
公開日2010年2月17日 申請日期2008年8月12日 優(yōu)先權(quán)日2008年8月12日
發(fā)明者牧 李 申請人:武漢卓華軟件有限責(zé)任公司