2015-08-26 61 views
8

我在學習UEFI這個詞的時候正在研究引導程序。我可以理解一些關於UEFI的內容。但是,在什麼模式(Real,Protected,Long)下使用UEFI啓動系統?如果正常的引導加載程序無法與UEFI配合使用,那麼在處理UEFI時,引導加載程序的替代方法是什麼?我是否需要其他編程來創建一個,而不是程序集?UEFI如何工作?

回答

2

這裏有一個good answer這個問題:

等現代64位機器上有新的EFI固件。這些不會從光盤的扇區#0加載引導程序。它們由EFI Boot Manager加載並運行EFI引導加載程序引導。這些程序在保護模式下運行。這是EFI引導過程。

EFI固件通常在退出處理器復位的幾條指令內切換到保護模式。在EFI固件初始化的所謂「SEC階段」中,儘早切換到保護模式。從技術上講,32位和更大的x86處理器甚至不以真實模式開始,而是通俗地稱爲非現實模式。 (CS寄存器的初始段描述符沒有描述傳統的實模式映射,並且導致這種「虛幻」)。

因此,可以說這些EFI系統根本不會進入真實模式,當本地引導到EFI引導加載程序(即,當它們不使用兼容性支持模塊時),因爲它們從非真實模式直接切換到保護模式並從此保持在保護模式。

+0

UEFI沒有保護模式! UEFI以64位長模式工作!有些平臺可能使用32位平面模式。這個術語起初是錯誤的,這就是爲什麼它會讓很多人感到困惑。早些時候,所有不是x86模式的都稱爲保護模式。但這不完全正確。 – Alex

9

UEFI固件在64位平臺上運行64位長模式,在32位平臺上運行在平板模式下;與BIOS不同,UEFI具有獨立於CPU的獨立架構以及自己的設備驅動程序。 UEFI可以掛載分區並讀取某些文件系統。

當配備UEFI x86的計算機,接口搜索標記有標記爲EFI系統分區(ESP)的特定全局唯一標識符(GUID)分區的系統存儲器。順便說一句Windows不會掛載這個分區,並且你不能在操作系統中看到它。但是有一個技巧,你只需將VBR中的分區類型(使用HexWorkshop)更改爲普通的FAT32代碼,並將其裝載到操作系統中。

此分區包含爲EFI體系結構編譯的應用程序。一般來說,您不必處理彙編器來編寫UEFI應用程序/加載器,它只是一個常規的C代碼。默認情況下它位於「EFI/BOOT/BOOTX64.EFI」。當手動或自動選擇引導加載程序時,UEFI將其讀入內存並控制引導過程。

1

當你問「在什麼模式下(真正的,受保護的,長的)系統是否啓動了UEFI?」,你是什麼意思?處理器開始以類似於過去80386模式的模式執行。但你真的在乎嗎?當你的操作系統加載代碼被賦予控制權時,你不關心處理器的模式嗎?而且你關心哪些服務提供給你的OS加載器代碼。

環境在UEFI規範中定義。 Latest Versions of the UEFI Specifications

至於你使用哪種語言,程序集很適合開始。稍微使用C或其他高級語言可能更容易。

其他背景:

有很多具體條款,我們並不總是小心使用正確的。

當處理器退出復位時執行的代碼是系統固件,它會對系統中各種硬件進行大量初始化。

在UEFI論壇存在之前的x86 PC系統上,系統固件被稱爲BIOS。當時的BIOS執行其所有初始化代碼,然後從軟盤或硬盤驅動器加載一些代碼並跳入代碼。 BIOS還在硬件和操作系統之間提供了一些接口,以幫助將操作系統與硬件差異隔離。儘管沒有標準化。唯一的標準是使用BIOS接口的操作系統和應用程序級別的軟件。

如果操作系統和應用程序正確運行,則BIOS被認爲是正確的。但是你只能通過缺乏失敗證明正確性。因此,新的操作系統或應用程序可以在一個正確的系統上工作,但會在不同的正確系統上失敗

今天我們試圖提供一些這些接口的實際標準化。它們由UEFI論壇定義。今天我可以證明我的系統是正確的,符合UEFI規範。

當人們說諸如UEFI之類的東西時,通常指的是系統上安裝的實際系統固件,它在OS開始執行之前執行。但是我們中的很多人仍然像我們潑字母湯一樣折騰這些術語。

引導裝載程序實際上是在存儲系統固件加載和系統固件給出了硬件引導裝載程序的控制OS擁有的代碼。可以說系統固件的末尾是UEFI Boot Loader。或者你可以說BDS使用系統策略來查找操作系統。而你仍然可以找到不同意這個詞的人。