首先,UEFI也是一種 BIOS,區(qū)別就在于 Legacy BIOS沒有UEFI這么靈活,為什么這么說呢?
?Legacy BIOS你可以看作是一塊機(jī)器的操作面板,里面有很多開關(guān),我們平常在里面做的一些設(shè)定,不過是在扳動(dòng)開關(guān)而已。也就是說Legacy BIOS的東西是固定的,你無法做出真正的改變,你的設(shè)定改變,只不過是主板把你的最終開關(guān)打向了哪一邊記錄下來了而已。因?yàn)?BIOS芯片的容量是很小的,1M或2M,8M,它無法再做更多的事了,只能允許你改一改記錄。而要想真正改變這個(gè)系統(tǒng),你需要把它拿到別的系統(tǒng)下去做變更,也就是硬刷。硬刷才是真正的改BIOS!就像你把那塊面板拆下來,重新接或換幾個(gè)開關(guān)之類操作。
剛剛說了,?Legacy BIOS由于容量小,它只能作一些記錄和硬件進(jìn)行一些簡單的通訊,比方說,在BIOS里可以認(rèn)得到硬盤,但是它也只能做到這一步了,它不知道硬盤里面有啥文件,就是不能給硬盤文件列表,UEFI可以做到這一點(diǎn),UEFI認(rèn)識(shí)硬盤,也知道硬盤里面有啥東西。有沒有像順豐跟美團(tuán)的感覺?順豐快遞員知道你有件,但是不知道你是什么件,而美團(tuán)則不僅知道你有單,還知道你點(diǎn)的是啥,厲害的小哥,還可以代你做很多事。
UEFI更像一個(gè)小型的系統(tǒng)了。原來傳統(tǒng)BIOS除了把主板上的硬件信息讀取交給操作系統(tǒng)后,就等著系統(tǒng)發(fā)號(hào)施令了,在硬件層和軟件層傳遞、交換信息,忙得一匹,卻毫無頭緒。傳統(tǒng)BIOS和操作系統(tǒng)是一對(duì)一的關(guān)系,一次只能引導(dǎo)一個(gè)操作系統(tǒng),而UEFI則可以輕松引導(dǎo)多系統(tǒng)。因?yàn)閁EFI有專門的EFI分區(qū),分區(qū)可以達(dá)到600MB,可以往里面寫入的東西就多了,所以可玩性比傳統(tǒng)BIOS強(qiáng)太多了,由于UEFI規(guī)范可以對(duì)硬盤上的文件列表,有了適當(dāng)?shù)囊龑?dǎo)器,比方說opencore,那么就可以 在操作系統(tǒng)啟動(dòng)之前可以任意抓取OS? ?Loader并陳列出來,供你決定進(jìn)入哪一個(gè)OS,妥妥的皇上選妃的感覺啊。?
UEFI一開始是微軟和英特爾聯(lián)合其他大公司搞出來的硬件接口規(guī)范,想一想啊,為啥微軟要搞這個(gè)東西呢?因?yàn)樗行枰?!為什么這么說呢?因?yàn)榇笕萘坑脖P的產(chǎn)生逼得他不得不做這個(gè)事啊。大容量硬盤及GPT分區(qū)出來后,微軟的操作系統(tǒng)要想在舊的硬件或者新的硬件上啟動(dòng),windows就必須作出一個(gè)判斷,這臺(tái)系統(tǒng)硬盤的分區(qū)是使用的MBR還是GPT分區(qū),這就需要加載些文件來作判斷了,原來的BIOS顯然不能完成這項(xiàng)工作。
如果往深處想,可能你會(huì)發(fā)現(xiàn),組成系統(tǒng)的單個(gè)要素,本質(zhì)上也是一堆的開關(guān),但為什么CPU+內(nèi)存+輸入輸出端+操作系統(tǒng)就構(gòu)成了一個(gè)系統(tǒng)呢?首先,CPU里面有邏輯門,控制邏輯門就可以進(jìn)行加減乘除運(yùn)算,更高級(jí)的運(yùn)算則是結(jié)合了四則運(yùn)算、關(guān)系運(yùn)算、邏輯運(yùn)算來達(dá)成,也就是說CPU在內(nèi)存的幫助之下,實(shí)現(xiàn)了邏輯層,在邏輯層之上的運(yùn)算已經(jīng)與底層的開關(guān)不相干了,也就是說底層的物理開關(guān),在不同的時(shí)序上的重復(fù),意義是完全不一樣的。
將來的人機(jī)接口,或者說機(jī)腦接口,其實(shí)也是一種固件接口,它的規(guī)范,我們應(yīng)該也要趁早實(shí)現(xiàn),搶先一步,占領(lǐng)高地。
以上是我自己一點(diǎn)粗淺的理解,下面是正式的說明,來看看吧:
引導(dǎo)操作系統(tǒng)
您如何運(yùn)行第一個(gè)程序?
保羅·克爾扎諾諾夫斯基(Paul Krzyzanowski)
2015年1月26日
介紹
有時(shí)將一個(gè)操作系統(tǒng)稱為“第一個(gè)程序”,它使您可以運(yùn)行其他程序。但是,它通常作為文件(或更常見的是文件集合)存儲(chǔ)在磁盤上。這個(gè)“第一個(gè)”程序如何運(yùn)行?
PDP–11 / 70前面板

操作系統(tǒng)是通過引導(dǎo)過程(簡稱為booting)加載的。一個(gè)引導(dǎo)裝載程序是其任務(wù)是加載一個(gè)較大的程序,如操作系統(tǒng)的程序。
當(dāng)您打開計(jì)算機(jī)時(shí),其內(nèi)存通常未初始化。因此,沒有什么可運(yùn)行的。早期的計(jì)算機(jī)將具有使操作員能夠按下按鈕以從打孔卡,打孔紙帶或磁帶驅(qū)動(dòng)器中加載字節(jié)序列的硬件。計(jì)算機(jī)前面板上的開關(guān)將定義數(shù)據(jù)源和目標(biāo)內(nèi)存地址。在某些情況下,引導(dǎo)加載程序軟件將被硬連接為非易失性存儲(chǔ)器(在早期的計(jì)算機(jī)中,這將是一排網(wǎng)格,在需要0位的適當(dāng)位置進(jìn)行了切割)。
在早期的小型計(jì)算機(jī)和微型計(jì)算機(jī)系統(tǒng)中,計(jì)算機(jī)操作員會(huì)使用計(jì)算機(jī)前面板上的開關(guān)來切換代碼以加載更大的程序,對(duì)每個(gè)內(nèi)存位置進(jìn)行編程,然后啟動(dòng)程序。該程序可能會(huì)做一些基本的事情,例如從電傳打字機(jī)附帶的紙帶上將連續(xù)的字節(jié)讀入內(nèi)存。
在以后的系統(tǒng)中,只讀存儲(chǔ)器將包含一個(gè)小的引導(dǎo)加載程序,該引導(dǎo)加載程序?qū)⒕哂谢镜闹悄芄δ?,可以讀取磁盤的第一個(gè)扇區(qū)(512字節(jié))。
由于此初始程序必須盡可能小,因此功能最少。經(jīng)常發(fā)生的情況是,引導(dǎo)加載程序會(huì)加載另一個(gè)引導(dǎo)加載程序,稱為第二階段加載程序,該加載程序更為復(fù)雜。該第二階段加載器可能會(huì)進(jìn)行錯(cuò)誤檢查,其中可能還包括其他功能,例如,使用戶可以選擇要引導(dǎo)的操作系統(tǒng),加載診斷軟件的能力或在操作系統(tǒng)中啟用診斷模式。這種具有引導(dǎo)加載程序加載較大引導(dǎo)加載程序的多階段引導(dǎo)加載程序,稱為鏈加載。
引導(dǎo)加載程序通常會(huì)執(zhí)行系統(tǒng)硬件的某些核心初始化,然后加載操作系統(tǒng)。加載操作系統(tǒng)后,引導(dǎo)加載程序會(huì)將控制權(quán)轉(zhuǎn)移給它,不再需要。如果需要,操作系統(tǒng)將自行初始化,配置系統(tǒng)硬件(例如,設(shè)置內(nèi)存管理,設(shè)置計(jì)時(shí)器,設(shè)置中斷)并加載設(shè)備驅(qū)動(dòng)程序。
基于英特爾(IA–32)的啟動(dòng)
為了具體說明引導(dǎo)過程的示例,讓我們看一下32位兼容Intel的PC(稍后將介紹64位系統(tǒng))。該體系結(jié)構(gòu)稱為IA–32(32位英特爾體系結(jié)構(gòu)),定義了自1986年推出的英特爾80386以來大多數(shù)英特爾微處理器的指令集。它仍受英特爾最新處理器的支持。
基于IA–32的PC有望在非易失性存儲(chǔ)器(過去為ROM,如今為NOR閃存)中具有BIOS(基本輸入/輸出系統(tǒng),包括引導(dǎo)加載程序固件)。BIOS是在早期CP / M系統(tǒng)上發(fā)現(xiàn)的BIOS的后代,它包含用于訪問某些基本系統(tǒng)設(shè)備的低級(jí)功能,例如執(zhí)行磁盤I / O,從鍵盤讀取和訪問視頻顯示。它還包含用于加載第1階段引導(dǎo)加載程序的代碼。
當(dāng)啟動(dòng)時(shí)重置CPU時(shí),計(jì)算機(jī)將在內(nèi)存位置開始執(zhí)行0xffff0(IA–32體系結(jié)構(gòu)使用segment:offset尋址形式;代碼段設(shè)置為?0xf000,指令指針設(shè)置為fff0)。
處理器以實(shí)模式啟動(dòng),這使它只能訪問20位內(nèi)存地址空間,并提供對(duì)I / O,中斷和內(nèi)存的直接訪問權(quán)限(當(dāng)處理器使用32位尋址和虛擬內(nèi)存時(shí),它將起作用切換到保護(hù)模式)。該位置0xffff0實(shí)際上位于BIOS ROM的末尾,并包含對(duì)包含啟動(dòng)代碼的BIOS區(qū)域的跳轉(zhuǎn)指令。
啟動(dòng)后,BIOS將按照以下順序進(jìn)行操作:
1、開機(jī)自檢(POST)
2、檢測視頻卡(芯片)的BIOS并執(zhí)行其代碼以初始化視頻硬件
3、檢測其他任何設(shè)備的BIOS并調(diào)用其初始化功能
4、顯示BIOS啟動(dòng)屏幕
5、執(zhí)行簡短的內(nèi)存測試(確定系統(tǒng)中有多少內(nèi)存)設(shè)
6、置內(nèi)存和驅(qū)動(dòng)器參數(shù)
7、配置即插即用設(shè)備(傳統(tǒng)上是PCI總線設(shè)備)
8、分配資源(DMA通道和IRQ)
9、識(shí)別啟動(dòng)設(shè)備
當(dāng)BIOS識(shí)別引導(dǎo)設(shè)備(通常是標(biāo)記為可引導(dǎo)磁盤的幾個(gè)磁盤之一)時(shí),它將從該設(shè)備讀取塊0到內(nèi)存位置0x7c00并跳轉(zhuǎn)到該位置。
階段1:主啟動(dòng)記錄
第一個(gè)磁盤塊(塊0)稱為主引導(dǎo)記錄(MBR),其中包含第一階段引導(dǎo)加載程序。由于標(biāo)準(zhǔn)塊大小為512字節(jié),因此整個(gè)引導(dǎo)加載程序必須適合該空間。MBR的內(nèi)容是:
第一階段引導(dǎo)加載程序(≤440字節(jié))
磁盤簽名(4個(gè)字節(jié))
磁盤分區(qū)表,用于標(biāo)識(shí)磁盤的不同區(qū)域(每個(gè)分區(qū)16個(gè)字節(jié)×4個(gè)分區(qū))
階段2:卷啟動(dòng)記錄
BIOS將控制權(quán)轉(zhuǎn)移到已加載到內(nèi)存中的MBR的開頭后,MBR代碼將掃描其分區(qū)表并加載該分區(qū)的卷啟動(dòng)記錄(VBR)。VBR是從指定分區(qū)的第一個(gè)磁盤塊開始的一系列連續(xù)塊。VBR的第一個(gè)塊標(biāo)識(shí)分區(qū)的類型和大小,并包含一個(gè)初始程序加載器(IPL),該代碼是將加載組成第二階段引導(dǎo)加載程序的其他塊的代碼。在Windows NT派生的系統(tǒng)(例如Windows Server 2012,Windows 8)上,IPL加載一個(gè)名為NTLDR的程序,然后該程序加載操作系統(tǒng)。
低級(jí)引導(dǎo)加載程序很難加載完整的OS(尤其是可能由多個(gè)文件組成的OS)的原因之一是,這樣做需要解析文件系統(tǒng)結(jié)構(gòu)的能力。這意味著要了解目錄和文件名的布局方式,以及如何查找與特定文件相對(duì)應(yīng)的數(shù)據(jù)塊。沒有太多代碼,僅讀取連續(xù)的塊會(huì)容易得多。更高級(jí)別的加載程序(例如Microsoft的NTLDR)可以讀取NTFS,F(xiàn)AT和ISO 9660(CD)文件格式。
超越Windows
在Intel PC上引導(dǎo)其他操作系統(tǒng)有多種變體。在Linux系統(tǒng)上,一種流行的引導(dǎo)加載程序是?GRUB或GRand Unified Bootloader。GRUB還是一個(gè)多級(jí)引導(dǎo)加載程序。BIOS當(dāng)然會(huì)做它通常會(huì)做的事情:識(shí)別可引導(dǎo)設(shè)備,加載主引導(dǎo)記錄,并將控制權(quán)轉(zhuǎn)移到此新加載的代碼。在GRUB下,MBR通常包含稱為GRUB Stage 1的第一階段引導(dǎo)加載程序。此第1階段引導(dǎo)加載程序?qū)⒓虞dGRUB第2階段。第2階段加載程序?yàn)橛脩籼峁┝艘龑?dǎo)的操作系統(tǒng)的選擇,并允許用戶為這些系統(tǒng)指定任何其他引導(dǎo)參數(shù)(例如,強(qiáng)制使用最大內(nèi)存,啟用調(diào)試)。然后,它讀入所選的操作系統(tǒng)內(nèi)核并將控制權(quán)轉(zhuǎn)移給它。
使用GRUB引導(dǎo)Windows的一個(gè)特定問題是Windows不?兼容Multiboot。Multiboot是關(guān)于使用單個(gè)引導(dǎo)加載程序加載多個(gè)操作系統(tǒng)的Free Software Foundation規(guī)范。在這種情況下,GRUB所做的只是傳統(tǒng)的Windows啟動(dòng)過程。它引導(dǎo)通常位于MBR中的引導(dǎo)加載程序(或運(yùn)行Windows引導(dǎo)菜單程序)。從那時(shí)起,GRUB不再可用,Windows不知道發(fā)生了什么,本機(jī)Windows啟動(dòng)過程將接管工作。
再見,BIOS。您好UEFI
隨著64位架構(gòu)取代32位架構(gòu)的出現(xiàn),BIOS開始顯得過時(shí)了。英特爾著手創(chuàng)建BIOS后續(xù)產(chǎn)品的規(guī)范,該規(guī)范沒有限制,即必須以20位尋址在16位模式下運(yùn)行啟動(dòng)代碼。該規(guī)范稱為統(tǒng)一可擴(kuò)展固件接口或UEFI。盡管它是由英特爾開發(fā)的,但自2005年以來由Unified EFI論壇進(jìn)行管理。許多更新的64位系統(tǒng)(包括Mac)都使用它,它們也具有用于運(yùn)行Windows的舊版BIOS支持。
EFI支持的一些功能包括:
BIOS組件
從BIOS保留了一些組件,包括電源管理(高級(jí)配置和電源接口,ACPI)和系統(tǒng)管理組件(例如,讀取和設(shè)置日期)。
支持更大的磁盤
BIOS每個(gè)磁盤僅支持四個(gè)分區(qū),每個(gè)分區(qū)最多可容納2.2 TB。UEFI支持的最大分區(qū)大小為9.4 ZB(9.4×10?21字節(jié))。
無需以16位(實(shí)際)模式啟動(dòng)
引導(dǎo)前執(zhí)行環(huán)境使您可以直接訪問所有系統(tǒng)內(nèi)存。
設(shè)備驅(qū)動(dòng)程序
UEFI包括設(shè)備驅(qū)動(dòng)程序,包括解釋與體系結(jié)構(gòu)無關(guān)的EFI字節(jié)碼(EBC)的能力。但是,操作系統(tǒng)使用它們自己的驅(qū)動(dòng)程序,因此,與BIOS一樣,這些驅(qū)動(dòng)程序通常僅用于引導(dǎo)過程。
引導(dǎo)管理器
這是很重要的。舊的BIOS僅具有加載單個(gè)塊的功能,因此需要多階段引導(dǎo)過程。UEFI具有自己的命令解釋器和完整的啟動(dòng)管理器。您不再需要專用的引導(dǎo)加載程序。只要將可引導(dǎo)文件放入U(xiǎn)EFI引導(dǎo)分區(qū),該分區(qū)的格式設(shè)置為FAT文件系統(tǒng)(舊Windows系統(tǒng)中的標(biāo)準(zhǔn)文件系統(tǒng)格式;幾乎每個(gè)操作系統(tǒng)都知道如何處理)。
可擴(kuò)展性
固件是可擴(kuò)展的。UEFI的擴(kuò)展可以加載到非易失性存儲(chǔ)器中。
使用UEFI引導(dǎo)
使用UEFI,不再需要主引導(dǎo)記錄來存儲(chǔ)第1階段引導(dǎo)加載程序。UEFI具有聰明的能力來解析文件系統(tǒng)并自行加載文件,即使該文件不占用連續(xù)的磁盤塊也是如此。相反,UEFI讀取GUID(全局唯一標(biāo)識(shí)符)分區(qū)表(GPT),該表位于塊0之后的塊中(由于遺留原因,MBR仍位于該塊中)。GPT描述了磁盤上分區(qū)表的布局。由此,EFI引導(dǎo)加載程序?qū)⒆R(shí)別EFI系統(tǒng)分區(qū)。該系統(tǒng)分區(qū)包含用于設(shè)備上其他分區(qū)上安裝的所有操作系統(tǒng)的引導(dǎo)加載程序。對(duì)于支持EFI的Windows系統(tǒng),UEFI加載?Windows引導(dǎo)管理器(bootmgfw.efi)。對(duì)于較舊的64位NT系統(tǒng),EFI將加載IA64ldr。對(duì)于Linux,有很多選擇。兩種最常見的是使用GRUB(大Unified Bootloader的)的EFI感知版本并加載一個(gè)文件,如grub.efi或有EFI負(fù)荷負(fù)載ELILO.EFI的EFI裝載機(jī)。
通常,即使使用UEFI,占主導(dǎo)地位的方法是加載專用于特定操作系統(tǒng)的引導(dǎo)加載程序,而不是直接加載該操作系統(tǒng)。但是,不再需要需要加載多個(gè)引導(dǎo)加載程序的多階段引導(dǎo)過程。
非英特爾系統(tǒng)
到目前為止,我們的整個(gè)討論都集中在啟動(dòng)基于Intel PC的體系結(jié)構(gòu)(包括IA–32 / IA–64兼容體系結(jié)構(gòu),例如AMD的體系結(jié)構(gòu))上。這是當(dāng)今PC(通過服務(wù)器的筆記本)中的主要體系結(jié)構(gòu),但是那里有很多非英特爾設(shè)備,特別是在嵌入式設(shè)備(例如手機(jī))中。那他們呢?
引導(dǎo)過程有許多實(shí)現(xiàn)。許多嵌入式設(shè)備不會(huì)加載操作系統(tǒng),但是已經(jīng)將其存儲(chǔ)在非易失性存儲(chǔ)器(例如閃存或ROM)中。例如,那些加載OS的操作系統(tǒng)(例如基于ARM的Android手機(jī))將在設(shè)備開機(jī)時(shí)在只讀存儲(chǔ)器(通常在NOR閃存)中執(zhí)行代碼。此引導(dǎo)代碼嵌入在某些設(shè)備的CPU ASIC中,因此您無需在板上安裝單獨(dú)的閃存芯片。
當(dāng)系統(tǒng)復(fù)位(包括加電)時(shí),處理器處于超級(jí)用戶(SVC)模式,并且中斷被禁用。在基于ARM的系統(tǒng)上,處理器從address開始執(zhí)行?0x00000000。包含啟動(dòng)代碼的閃存映射到地址0x00000000重置時(shí)。該代碼執(zhí)行各種初始化,包括在DRAM中設(shè)置異常向量表以及將應(yīng)用程序代碼從ROM復(fù)制到DRAM(代碼在DRAM中運(yùn)行得更快)。該代碼將DRAM重新映射到地址0,從而隱藏了閃存(處理器具有REMAP位以更改閃存的映射)。然后初始化存儲(chǔ)系統(tǒng)。這涉及設(shè)置內(nèi)存保護(hù)和設(shè)置系統(tǒng)堆棧。然后初始化I / O設(shè)備,并將處理器更改為用戶模式。引導(dǎo)固件會(huì)檢測可引導(dǎo)媒體并加載并運(yùn)行第二階段引導(dǎo)加載程序(如有必要)。第二階段引導(dǎo)加載程序?qū)τ诖笮拖到y(tǒng)通常是GRUB,對(duì)于嵌入式系統(tǒng)通常是uBoot。該第二階段加載器加載操作系統(tǒng)并將控制權(quán)轉(zhuǎn)移給該操作系統(tǒng)。
Mac OS X
至少在OS 8和OS X上,基于PowerPC的Apple Macintosh系統(tǒng)的較舊版本均基于開放固件。開放式固件起源于Sun,并在非Intel Sun計(jì)算機(jī)中使用。蘋果公司切換到英特爾系統(tǒng)后,便采用了UEFI作為其啟動(dòng)級(jí)固件。
較舊的Mac
開放式固件存儲(chǔ)在ROM中,并且像PC BIOS一樣在開機(jī)時(shí)執(zhí)行。由于開放固件被設(shè)計(jì)為與平臺(tái)無關(guān),因此它以Forth(一種基于堆棧的簡單語言)實(shí)現(xiàn),并被編譯為字節(jié)碼而不是本機(jī)指令。固件包含字節(jié)碼解釋器。
與BIOS不同,開放式固件(Open Firmware)為用戶提供了一個(gè)命令行處理器,從中可以編輯系統(tǒng)配置參數(shù),例如減少物理內(nèi)存量,調(diào)試系統(tǒng)甚至啟動(dòng)telnet服務(wù)器,以便您可以與通過以太網(wǎng)連接從遠(yuǎn)程計(jì)算機(jī)執(zhí)行固件和啟動(dòng)過程。
在引導(dǎo)操作系統(tǒng)之前,開放式固件通過探測主板和擴(kuò)展設(shè)備上的組件來生成設(shè)備樹。
與PC BIOS一樣,Open Firmware包含設(shè)備驅(qū)動(dòng)程序,固件中的引導(dǎo)過程可用于訪問磁盤,鍵盤,顯示器和網(wǎng)絡(luò)。但是,這些驅(qū)動(dòng)程序全部在Forth字節(jié)碼系統(tǒng)FCode中實(shí)現(xiàn)。與BIOS一樣,這些驅(qū)動(dòng)程序僅在引導(dǎo)過程中使用。操作系統(tǒng)本身具有自己的本機(jī)運(yùn)行時(shí)驅(qū)動(dòng)程序。
與BIOS不同,Open Firmware可以解析HFS / HFS +文件系統(tǒng)(Mac上的本機(jī)文件系統(tǒng)),因此您可以使用Open Firmware命令解釋器從硬盤加載啟動(dòng)文件并運(yùn)行它。默認(rèn)情況下,Open Firmware從系統(tǒng)分區(qū)加載文件。在OS 9系統(tǒng)上,這是“系統(tǒng)”文件夾中名為“ Mac OS ROM”的文件。在OS X系統(tǒng)上,它會(huì)加載?/System/Library/CoreServices/BootX。BootX是引導(dǎo)加載程序,然后將其加載到內(nèi)核中。
現(xiàn)代的Mac
Mac將UEFI用作其系統(tǒng)固件。
Mac啟動(dòng)時(shí),執(zhí)行的第一個(gè)代碼是BootROM。這將為相關(guān)的硬件設(shè)備設(shè)置EFI驅(qū)動(dòng)程序,初始化一些硬件接口,驗(yàn)證是否有足夠的內(nèi)存可用,并執(zhí)行簡短的開機(jī)自檢。與PC BIOS(對(duì)文件系統(tǒng)一無所知,只能讀取原始磁盤塊)不同,Mac上的UEFI已擴(kuò)展為可以解析磁盤上的FAT(傳統(tǒng)DOS / Windows)和HFS +(本地Mac)文件系統(tǒng)。它讀取GPT(GUID分區(qū)表)以標(biāo)識(shí)磁盤分區(qū)。默認(rèn)啟動(dòng)卷存儲(chǔ)在NVRAM中。
HFS +卷標(biāo)頭(位于HFS +文件系統(tǒng)開頭的數(shù)據(jù))沒有指定引導(dǎo)加載程序的路徑,而是指向受祝福的文件或受祝福的目錄(請(qǐng)參閱?bless命令。如果目錄是受祝福的,則表明EFI固件可以在該目錄中查找引導(dǎo)加載程序。如果文件受保護(hù),則告訴EFI固件將該文件作為引導(dǎo)加載程序進(jìn)行加載(存在其他變化,例如從未安裝的卷進(jìn)行引導(dǎo))。
默認(rèn)情況下,引導(dǎo)加載程序位于?/System/Library/CoreServices/boot.efi磁盤的根(通常是)分區(qū)上。
或者,固件支持從網(wǎng)絡(luò)服務(wù)器(netboot服務(wù)器)下載第二階段的引導(dǎo)程序或內(nèi)核。
當(dāng)boot.efi文件被加載,計(jì)算機(jī)顯示器屏幕上的一個(gè)金屬的蘋果標(biāo)志。引導(dǎo)加載程序以及基本的驅(qū)動(dòng)程序擴(kuò)展會(huì)加載到內(nèi)核中,然后再運(yùn)行?launchd來執(zhí)行各種啟動(dòng)腳本和程序。裝入內(nèi)核后,旋轉(zhuǎn)的齒輪會(huì)出現(xiàn)在Apple徽標(biāo)下方。當(dāng)內(nèi)核運(yùn)行第一個(gè)進(jìn)程launchd時(shí),屏幕變?yōu)樗{(lán)色。
有關(guān)OS X如何啟動(dòng)的說明,請(qǐng)參見“?什么是Mac OS X”。
為了支持引導(dǎo)基于BIOS的操作系統(tǒng),例如使用GRUB或其他支持BIOS的引導(dǎo)加載程序的較舊Windows系統(tǒng)和Linux系統(tǒng),EFI從系統(tǒng)固件中安裝了“兼容性支持模塊”(CSM)組件。然后,這將啟動(dòng)基于BIOS的引導(dǎo)過程。僅當(dāng)用戶選擇Windows作為要啟動(dòng)的默認(rèn)操作系統(tǒng)時(shí),才會(huì)加載此兼容性支持模塊。現(xiàn)在,引導(dǎo)過程是基于標(biāo)準(zhǔn)BIOS的引導(dǎo)。加載并執(zhí)行主啟動(dòng)記錄(MBR),然后查找并加載Windows(或Linux)分區(qū)的卷啟動(dòng)記錄。
看完以上,覺得自己那點(diǎn)粗淺理解在某些點(diǎn)上還是嵌合地很到位的,相較于這種教堂式的解說,應(yīng)該是更好理解的吧。