iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
SideProject30

世界第一簡單的UEFI,實作打造自己的開機畫面系列 第 5

【Day 5】UEFI開機流程太難了!試試我們精簡後的三階boot loader!

  • 分享至 

  • xImage
  •  

嗨我是k66,今天豬油博士要將複雜的UEFI七階段,簡單歸類成三階段並對應到我們要實作的boot loader。

正文開始!


https://ithelp.ithome.com.tw/upload/images/20230911/20161828uLKMvytWK6.png

豬油博士:在實作UEFI boot loader前,我想稍微介紹UEFI的開機流程。
上圖是EDK2[註1]的官方UEFI開機流程圖。七階段依序是SEC、PEI、DXE、BDS、TSL、RT、AL,我簡單介紹就好。
    1.SEC(Security): 從開機鍵按下去的那一刻即進入SEC階段,此階段程式碼是組合語言(Assembly),
    將CPU的快取當成記憶體(cache as RAM)[註2],找到PEI的進入點並將控制權交給PEI。
    2.PEI(Pre EFI): 準備HOB[註3],初始化RAM,最後將控制權給DXE。
    3.DXE(Driver Execution): 為上層的街口提供服務,如給顯卡 driver提供Print()函數。
    4.BDS 跟DXE階段很像,提供開機選單為BIOS setup做準備。[註4]
    5.TSL: OS loader開始被執行[註5],ExitBootService()函數被執行後,進入RT階段。
    6.RT(Run Time): OS loader繼續執行,直到離開將控制權交給OS(作業系統)。
    7.AL(After Life): UEFI文件沒清楚規範,其實就是進入作業系統了。
小豬Oink:好複雜…好多字…好痛苦…
豬油博士:是一次學七階架構對你來說太難了嗎?
小豬Oink:對…

豬油博士:那我將本次實作目標—boot loader,粗略分成三階,你先聽看看,理論通常是等實作後就能通透。
小豬Oink:謝謝博士!

豬油博士:[註6]
第一階: 從硬碟中啟動。對應到SEC/PEI/DXE->BDS階段。
第二階: 至OS loader啟動。對應到TSL階段。
第三階: 至進入OS。對應到RT->AL階段。

小豬Oink:分成三階後我好像比較懂了!
豬油博士:太好了,明天我們就可以進入UEFI程式碼囉!
小豬Oink:放碼過來吧!

接下來兩天會手把手帶讀者安裝環境,DAY8會實作第一支NoPigKill.efi,明天見!


[註1] 來源自官方Tianocore-Training,https://github.com/tianocore-training/Presentation_FW/blob/main/FW/Presentations/_A_01_UEFI_Boot_Flow_Pres.pdf,pdf中的第七頁。
[註2] 會這樣設計是因為CPU在此階段以初始化,但記憶體要到DXE階段才會被全部初始化。
[註3] HOB(Hand off Block),是RAM的block,讓PEI可以傳block至DXE而設計。
[註4] 此外如Day3提的MBR對應到Legacy BIOS,GPT才會對應到UEFI BIOS。
[註5] OS loader同時也是第一個被執行的UEFI application。
[註6] 為先實作最簡單的Boot loader,故省略安裝在USB中,啟動安裝程式,重開機的過程。


上一篇
【Day 4】好不容易寫完的程式不能在實體機器運行,解法是UEFI!
下一篇
【Day 6】UEFI安裝環境—附圖保證安裝到好!(上)
系列文
世界第一簡單的UEFI,實作打造自己的開機畫面31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言