嗨我是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,想想看為什麼?