日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UDK BaseTools

發布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UDK BaseTools 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,UDK編譯時所用到的工具為以下:

build.exe

trim.exe

GenFw.exe

VfrCompile.exe

GenFds.exe

GenSec.exe

GenFfs.exe

GenFv.exe

VS工具(cl.exe, lib.exe, ml.exe,link.exe)


二,編譯過程

說明文檔里,把編譯過程分成兩部分:1,所代碼編譯成EFI模塊。 2,將各EFI模塊組成一個FD。用代碼的語言表示,就是build.exe Modules和build.exe Fds??墒俏矣X得把編譯過程分成三部分更符合coder的思維:1,使用VS將源碼編譯成二進制文件。2,使用BaseTools里的工具將二進制轉成EFI格式。3,將EFI格式文件轉成FFS,并組成FV,最后組成一個完整的FD。

下面是以我個人的視角,來分析的編譯過程,可能會有出錯的地方,大家用一種批判的眼光來看待吧:

1,輸入edksetup.bat--nt32時,該批處理會將VS的路徑和EFI下的BaseTools添加到環境變量路徑,以后再使用一些命令時,不用再加絕對路徑。

2,? 編譯第一步

輸入build.exe命令即可編譯.

Build.exe是一個主命令工具,提供了一個收集不同編譯選項的命令。一般來講,它檢查我們所設的環境變量,收集target.txt里面的配置信息,解析dsc,dec,inf,target.txt,tools-def.txt。利用VS的nmake.exe產生C和H源文件并且為各個模塊產生Makefiles;利用cl.exe,ml.exe,lib.exe,link.exe將各個模塊編譯成二進制文件。

下面是一些比較集合式的參數:

ALL????????? 編譯所有東西.

GenC???????? 產生C文件,AutoGen.C,AutoGen.h.

GenMake???? ?產生Makefile文檔,

Fds????????? 產生FD文件.

Libraries??? 編譯庫文件

Modules????? 編譯指定的模塊

Clean??????? 只刪除nmake產生的文件

CleanAll???? 刪除所有產生的文件

?

圖1,第一步編譯



2,? 編譯第二步

編譯過后,使用GenFw.exe,將link和lib后的文件轉成efi文件。同時使用vfrcompile.exe將vfr源文件編譯成ifr。

?

圖2,GenFw和vfrCompile編譯




2,? 編譯第三步

GenFds可以產生Ffs,Fv,FD和Section data。它收集txt,dsc,fdf,dec和inf文件。FDF文件必須遵守正確的FDF規格。

編譯的第一階段產生PE32/PE32+/Coff二進制文件。GenFds執行第二階段的編譯,通過FDF文件的規則定義編譯使用第一階段產生的二進制文件。EFI文件被編成FFS文件,FFS文件組成FV,各個FV區域組成一個或多個FD。

必須指定輸出目錄,GenFds將產生一個FV目錄,包括FFS目錄,FV文件,FV INF文件和FD文件。FFS目錄包括所有的模塊目錄,里面包含FFS和SECTION文件。

GenFds所有的輸出都必須在FV目錄里。所使用的文件為$(outputDir)\$(Arch) \ $(ActivePlatfromName) \$(ModuleName) \$(ModuleName) \DEBUG的所有文件。

1.??如果Arch指定, GenFds將使用編譯時指定的,而不是target.txt里寫死的。

2.? 如果workspace沒有指定,GenFds工具將使用操作系統指定的。

3.? 如果ActivePlatform指定,GenFds將使用編譯時指定的,而不是target.txt里寫死的。

?

圖3.編譯第三步


這一步是整個編譯的最后一步。它使用Flash map圖fdf文件和-t的工具,產生-a架構的FD文件。我們從該圖中可以看到很多-D的參數。有EFI_SOURCE,EDK_SOURCE,TOOL_CHAIN_TAG,TOOLCHAIN,TARGET,WORKSPACE,EDK_TOOLS_PATH,ARCH,ECP_SOURCE,都是一些編譯所使用的宏定義。GenFds根據它們可以編譯出我們想要的FD。

編譯過程中會調用其它一些編譯工具,如GenSec.exe,GenFfs,GenFv。

由此可以看出,原來Sec部分代碼,還需要單獨的一個工具進行處理,看來,在真實平臺的BIOS代碼,SEC的二進制內容會被調程,甚至機器碼都有修改過。我試過在修改BIOS執行的前幾條指令,然后查看二進制,在JMP之前的指令可以修改。但JMP指令的地址值無論怎么修改都會被編譯器改變為其他值。

GenFfs和GenFv也是編譯過程必須用過的工具。一個FD包括N個FV,一個FV包括N個FFS,一個FFS包括一個Module或N個Section。每個FFS都有唯一的GUID標識的HEADER,這樣,我們只要知道某個FV的地址,便可以找出所有的FFS了。

UDK2014的編譯流程大概就是這些了。


總結

以上是生活随笔為你收集整理的UDK BaseTools的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。