iT邦幫忙

2023 iThome 鐵人賽

DAY 9
1
SideProject30

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

【Day 9】完全理解UEFI格式!Module、INF、Package、DSC、DEC

  • 分享至 

  • xImage
  •  

嗨我是k66,經過前一篇的UEFI_APPLICATION實作後,相信大家對UEFI程式碼有點概念(知道會用到c、inf、dsc等)。本篇我們將利用上一篇的開發經驗,更深層介紹UEFI,並於下一篇Day10實作UEFI_APPLICATIONmain


UEFI spec中可運行的最小單位為Module(.efi),由CINF組成,INF用來描述Module(.efi)的行為。UEFI spec中第二個重要單位為Package,由DSCDEC零個至多個Module組成。DSC描述ModulePlatformDEC則描述Package。[自我挑戰3]

名稱 描述
Module UEFI spec最小可運行單位(.efi)
INF 描述Module(.efi)的行為,可看作一個INF產生一個EFI
Package DSCDEC零個至多個Module組成
DSC 描述ModulePlatform
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類:UefiMainmainShellAppMain,前一篇使用的UefiMain不支援C語言的stdio.h,將在下一篇使用main寫支援<stdio.h>的UEFI_APPICATION,我們明天見!


[註1] EDK2是現代實現UEFI的跨平台開發環境,前兩篇文下載工具列表就有EDK2。
[註2] 未來會用到的之後補上表格。
[註3] 產生之服務符合UEFI PI規範。


自我挑戰3

Day8中實作需要我們寫c、inf、dsc,卻無須寫dec,想想看為什麼?


上一篇
【Day 8】最簡單的UEFI程式—UEFI_APPICATION的UefiMain!
下一篇
【Day 10】UEFI版<sdtio.h>—UEFI_APPICATION的main!
系列文
世界第一簡單的UEFI,實作打造自己的開機畫面31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言