嗨我是k66,前一篇介紹想做的九項功能,今天介紹實作第一項—顯示OinkBT(OinkBootloader)的Logo的背後思路。
開發UEFI過程會是需先找到對應的C function/variable,還要在INF、DSC內填上對應的library,相信大家在Day8已經體會過,
光是HelloWorld.dsc在[LibraryClasses]就有13項。
因此,為加速開發,我們想要顯示Logo可參考MdeMoudle\Logo\,資料夾內有Logo.c、Logo.inf、Logo.bmp[註1]。
觀察Logo.c會用到的Library,除了基本的<Uefi.h>,另還有<Protocol/>下的HiiDatabase.h、HiiImageEx.h、HiiPackageList.h、GraphicsOutput.h、PlatformLogo.h,<Library>的UEFIBootServicesTableLib.h和DebugLib.h。

其中HII(Human Interface Infrastructure)[註2]是個好用的Library,在spec中1717頁提到可以產生幾乎和時下主流電腦大廠一致的圖形化介面(GUI),[註3]。
介紹完開發思路,包含MdeMoudle\Logo\資料夾下的.c與.inf,INF的MODULE_TYPE設為USER_DEFINED,C用到HII。
明天實作會放程式碼,我們明天見!
[註1] UEFI提供的protocol僅接受bmp,建議先將png/jpg轉成bmp,目前已有許多線上網站可供png2bmp。
[註2] UEFI spec 第33至第35章https://uefi.org/sites/default/files/resources/UEFI_Spec_2_9_2021_03_18.pdf ,擁有以下功能:local/remote text/graphics display與OS-present GUI。
[註3] 時下筆電大廠使用UEFI的HII設計UEFI BIOS boot menu,若我們學會了HII便能做出媲美大廠的boot menu。