2019年1月29日 星期二

Library的Constructor

範例網址如下 : 

https://drive.google.com/open?id=1dpyOEba-o4FC_4rr4V1V1qdEV0LBsXg1

大多數的Library雖然在DSC會先被編譯一遍, 但都只有在PEIM或Dxe Driver或APP呼叫時才執行, 但是有CONSTRUCTOR宣告的Library就不一樣, 它們會在Dxe Core初始化的時候被執行, 請先看到UefiBootServicesTableLib.inf, 裡面的關鍵字CONSTRUCTOR宣告了建構子UefiBootServicesTableLibConstructor, 再來看到DxeMain.c, DxeMain( )裡面的ProcessLibraryConstructorList (gDxeCoreImageHandle, gDxeCoreST); 就是呼叫所有Library的建構子, 可以看到AutoGen.c裡有把所有建構子列出來, 這個AutoGen.c是編譯器做到的, 我想應該跟Python有關, 已經超出我自己規劃的研究範圍

我們都知道NT32有所謂的gBS可以用, gBS就是利用Library建構子做到的, 要使用gBS必須在INF裡加入UefiBootServicesTableLib, 所以CloudApp.inf裡有加入, 那我為了測試是否能實作出gBS我自己做了一個gString看能不能用, 結果可以用, 至於CopyMem寫好玩的看看就好, 執行完CloudApp.efi後的畫面如下圖:

沒有留言:

張貼留言