我的範例完成了, 共有 PEIM 和 DXE 兩支 Driver, 請大家去如下網址下載:
https://drive.google.com/file/d/1CvzbNZUDNIfY_QwqEUjoUcCQ4X1Z_7Zs/view?usp=sharing
下載完把 CloudDxeDriver 和 CloudPeim 放在Nt32Pkg, 再把 Nt32Pkg.dsc 和 Nt32Pkg.fdf 照著註解修改( cloud-test ), 編譯後用之前介紹的方法存在 log.txt, 就可以看到印出來的訊息了
接下來開始講解, 既然BIOS開機流程PEI比DXE還要前面, 所以我們先講PEIM, 請看CloudPeim.c, 在第15行include了DebugLib.h, DebugLib是一支Library, 如果沒有把它加進peim就編譯不過了, 而加它進來的目的是為了印出Debug Message, 31行的FileHandle很少用到, 32行的PeiServices是指向許多PEI核心服務(核心函式)的指標, 舉凡要安裝PPI, 尋找PPI或是延遲一段時間都可以從PeiServices找到相對應的服務, FileHandle和**PeiServices是只要創建PEIM就必須具有的參數, 而PEIM也必定要有一個回傳值, 本範例直接回傳EFI_SUCCESS, 再來看到CloudPeim.inf, 這檔案是PEIM的描述檔, DSC和FDF需要描述檔來編譯driver, INF_VERSION照抄, BASE_NAME代表你要為這支PEIM取的名字(沒確認過和其他INF重複可不可以, 大家有興趣可以自己試), FILE_GUID建議用PSPad產生, MODULE_TYPE當然選PEIM, ENTRY_POINT是PEIM的進入點, 對應CloudPeim.c, [Sources]是要編譯的檔案, [Packages]是要include的DEC, 這非常重要, 許多GUID或Library路徑或一些雜七雜八的東西都在裡面, 沒有include適當的DEC常常編譯不過, [LibraryClasses]當然就是包含的Library(下個範例我們會自己寫Library), [Ppis]此例沒用到所以為空, [Depex]是之前講架構時介紹過的dependency, TRUE代表最高優先權
DSC代表要編譯的INF, FDF還沒開始研究但猜測應該是模擬的Flash架構, 先介紹DXE Driver, 請先看到CloudDxeDriver.c, 和PEIM類似的地方就不說了, ImageHandle指向這支Driver本身, 和PEIM的FileHandle一樣不常用到, SystemTable可以指向BoottimeServices和RumtimeServices, 同樣的這兩個Table也是包含許多DXE階段的核心服務, 再來看到CloudDxeDriver.inf, 其實和PEIM也相當類似, 只是在MODULE_TYPE的地方要選DXE_DRIVER
沒有留言:
張貼留言