嗨我是k66,經過前一篇的UEFI_APPLICATION
實作後,相信大家對UEFI程式碼有點概念(知道會用到c、inf、dsc等)。本篇我們將利用上一篇的開發經驗,更深層介紹UEFI,並於下一篇Day10實作UEFI_APPLICATION
的main
。
UEFI spec中可運行的最小單位為Module(.efi)
,由C
、INF
組成,INF
用來描述Module(.efi)
的行為。UEFI spec中第二個重要單位為Package
,由DSC
、DEC
、零個至多個Module
組成。DSC
描述Module
與Platform
,DEC
則描述Package
。[自我挑戰3]
名稱 | 描述 |
---|---|
Module | UEFI spec最小可運行單位(.efi) |
INF | 描述Module(.efi) 的行為,可看作一個INF產生一個EFI |
Package | 由DSC 、DEC 、零個至多個Module 組成 |
DSC | 描述Module 與Platform |
DEC | 描述Package |
EDK2[註1]有許多Module
,舉開機過程的幾個為例[註2],前一篇提到UEFI_APPICATION
便是其一,另還有:
Module type | 描述 |
---|---|
BASE | 可執行在任何環境下 |
SEC | 在SEC階段執行,將資料傳進PEI階段[註3] |
PEIM | 在PEI階段執行 |
DXE_DRIVER | 在boot service環境下執行,直至呼叫ExitBootService而中斷 |
DXE_RUNTIME_DRIVER | 在Run Time階段仍可執行的DXE Module |
UEFI_APPICATION | 可在UEFI Shell被執行 |
UEFI_DRIVER | 只在boot service環境下有效 |
理論告一段落,還記得前一篇提到UEFI_APPICATION分3類:UefiMain
、main
、ShellAppMain
,前一篇使用的UefiMain
不支援C語言的stdio.h,將在下一篇使用main
寫支援<stdio.h>
的UEFI_APPICATION,我們明天見!
[註1] EDK2是現代實現UEFI的跨平台開發環境,前兩篇文下載工具列表就有EDK2。
[註2] 未來會用到的之後補上表格。
[註3] 產生之服務符合UEFI PI規範。
Day8中實作需要我們寫c、inf、dsc,卻無須寫dec,想想看為什麼?