這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
uefi_learning [2024/04/08 08:06] don [EDK2 Directory Description] |
uefi_learning [2025/02/06 11:42] (目前版本) don |
||
---|---|---|---|
行 1: | 行 1: | ||
====== UEFI 學習 ====== | ====== UEFI 學習 ====== | ||
+ | |||
+ | [[https:// | ||
+ | |||
{{: | {{: | ||
行 15: | 行 18: | ||
|[Defines]| 定義本模塊的屬性變量及其他變量,這些變量可在工程文件其他塊中引用| | |[Defines]| 定義本模塊的屬性變量及其他變量,這些變量可在工程文件其他塊中引用| | ||
|[Sources]| 列出本模塊的所有源文件及資源文件| | |[Sources]| 列出本模塊的所有源文件及資源文件| | ||
- | |[Packages]| 列出本模塊引用到的所有包的包聲明文件。可能引用到的資源包括投文件、GUID、Protocol等,這些資源都聲明再包的包聲明文件.dec中| | + | |[Packages]| 列出本模塊引用到的所有包的包聲明文件。可能引用到的資源包括投文件、GUID、Protocol等,這些資源都聲明在包的包聲明文件.dec中| |
|[LibraryClasses]| 列出本模塊要練接的庫模塊| | |[LibraryClasses]| 列出本模塊要練接的庫模塊| | ||
行 27: | 行 30: | ||
|[FeaturePcd]| 用於列出本模塊用到的Pcd 常量| | |[FeaturePcd]| 用於列出本模塊用到的Pcd 常量| | ||
|[PatchPcd]| 列出的Pcd 變量僅本模塊可用| | |[PatchPcd]| 列出的Pcd 變量僅本模塊可用| | ||
+ | |||
+ | [[http:// | ||
1、[Defines]塊: | 1、[Defines]塊: | ||
行 69: | 行 74: | ||
5、[BuildOptions]塊:\\ | 5、[BuildOptions]塊:\\ | ||
- | 1、語法: | + | 5-1、語法: |
- | [BuildOptions]\\ | + | |
- | [編譯器家族] : [$ (Target)][Tool_CHAIN_TAG][$ (Arch)]_[CC | DLINK]_FLAGS [= |==]選項\\ | + | |
- | 2、編譯器家族可以是MSFT(Visual Studio編譯器家族)、INTEL(Intel編譯器家族)、GCC(Gcc編譯器家族)和 RVCT(ARM編譯器家族)中的一個\\ | + | 5-2、編譯器家族 |
- | Target是DEBUG、RELEASE和*中的一個,*是萬用字元\\ | + | 可以是MSFT(Visual Studio編譯器家族)、INTEL(Intel編譯器家族)、GCC(Gcc編譯器家族) |
- | TOOL_CHAIN_TAG是編譯器的名字,編譯器定義在Conf/ | + | 和 RVCT(ARM編譯器家族)中的一個 |
- | Arch是體系結構,可以是IA32、X64、IPF、EBC或ARM,*是萬用字元\\ | + | |
- | CC表示編譯選項,DLINK表示連結選項\\ | + | |
- | =表示選項附加到預設選項後面,==表示僅使用所定義的選項,不用預設選項。它們後面是編譯選項或連接選項\\ | + | |
+ | | ||
+ | DLINK表示連結選項 | ||
+ | | ||
+ | ==表示僅使用所定義的選項,不用預設選項。它們後面是編譯選項或連接選項 | ||
- | < | ||
- | [BuildOptions] | ||
- | # Enable STDARG for variable arguments | ||
- | *_*_*_CC_FLAGS = -DHAVE_STDARG_H | ||
- | # Override MSFT build option to remove /Oi and /GL | + | ==== inf檔編譯運行 |
- | MSFT: | + | |
- | INTEL: | + | |
- | + | ||
- | # Oniguruma: potentially uninitialized local variable used | + | |
- | MSFT: | + | |
- | + | ||
- | # Oniguruma: intrinsic function not declared | + | |
- | MSFT: | + | |
- | + | ||
- | # Oniguruma: old style declaration in st.c | + | |
- | MSFT: | + | |
- | + | ||
- | # Oniguruma: 'type cast' : truncation from ' | + | |
- | MSFT: | + | |
- | + | ||
- | # Oniguruma: nameless union declared in regparse.h | + | |
- | MSFT: | + | |
- | + | ||
- | # Oniguruma: 'type cast' : " | + | |
- | MSFT: | + | |
- | + | ||
- | # Oniguruma: previous local declaration | + | |
- | MSFT: | + | |
- | + | ||
- | # Oniguruma: signed and unsigned mismatch/ | + | |
- | MSFT: | + | |
- | + | ||
- | # Oniguruma: tag_end in parse_callout_of_name | + | |
- | GCC: | + | |
- | + | ||
- | # Oniguruma: implicit conversion from ' | + | |
- | GCC: | + | |
- | + | ||
- | # Not add -Wno-error=maybe-uninitialized option for XCODE | + | |
- | # XCODE doesn' | + | |
- | XCODE: | + | |
- | + | ||
- | </ | + | |
- | inf檔編譯運行\\ | ||
原始檔案,inf工程檔完成,想要編譯運行這個模組,需要將inf工程檔添加到dsc的[Components]部分,然後就可以使用build工具編譯\\ | 原始檔案,inf工程檔完成,想要編譯運行這個模組,需要將inf工程檔添加到dsc的[Components]部分,然後就可以使用build工具編譯\\ | ||
模組應用程式是如何被編譯成.efi文件的:\\ | 模組應用程式是如何被編譯成.efi文件的:\\ | ||
行 323: | 行 289: | ||
efi——LoadImage——StartImage——_ModuleEntryPoint——ProcessModuleEntryPointList ——inf中指定的入口函数\\ | efi——LoadImage——StartImage——_ModuleEntryPoint——ProcessModuleEntryPointList ——inf中指定的入口函数\\ | ||
原文連結:https:// | 原文連結:https:// | ||
+ | |||
+ | |||
+ | ===== DSC 文件 ===== | ||
+ | .inf 用于编译一个模块, 而.dsc 文件用于编译一个Package, 它包含了[Defines]、 | ||
+ | [LibraryClasses]、[Components] 几个必需部分以及[PCD]、[BuildOptions] 等几个可选部分。 | ||
+ | |||
+ | |||
+ | ===== DEC 文件 ===== | ||
+ | .dec 文件定义了公开的数据和接口,供其他模块使用。它包含了必需区块[Defines] 以及可选区块[Includes]、[LibraryClasses]、[Guids]、[Protocols]、[Ppis] 和[PCD] 几个部分。 | ||
+ | .dec文件需要被调用模块.inf文件所包含。 | ||
+ | |||
UEFI 編譯 BaseTools \\ | UEFI 編譯 BaseTools \\ | ||
行 382: | 行 359: | ||
^ 命令參數縮寫 ^ 命令參數全稱 ^ 描述 ^ | ^ 命令參數縮寫 ^ 命令參數全稱 ^ 描述 ^ | ||
|-h |--help |show this help message and exit顯示説明資訊。| | |-h |--help |show this help message and exit顯示説明資訊。| | ||
- | | + | |-a TARGETARCH |
- | | + | |-p PLATFORMFILE |
- | -p PLATFORMFILE,--platform=PLATFORMFILE | + | |-m MODULEFILE| --module=MODULEFILE|Build the module specified by the INF file name argument。| |
- | | + | |-b BUILDTARGET| --buildtarget=BUILDTARGET |
- | -m MODULEFILE, --module=MODULEFILE | + | |-t TOOLCHAIN| --tagname=TOOLCHAIN|選擇tools_def.txt中定義的編譯工具,例如VS2012:-t vs2012| |
- | | + | |-n THREADNUMBER| |編譯器使用的執行緒數量,指定後取代target.txt檔中MAX_CONCURRENT_THREAD_NUMBER指定的執行緒數量。 Less than 2 will disable multi-thread builds.小於2就禁止多執行緒編譯。| |
- | -b BUILDTARGET, --buildtarget=BUILDTARGET | + | |-u| --skip-autogen |
- | | + | |-c| --case-insensitive |
- | -t TOOLCHAIN, --tagname=TOOLCHAIN | + | |-w| --warning-as-error |
- | | + | |-j LOGFILE| --log=LOGFILE| Put log in specified file as well as on console.將編譯資訊輸出到檔。| |
- | -n THREADNUMBER | + | |-s| --silent| Make use of silent mode of (n)make.使用沉默模式執行make或nmake。| |
- | | + | |-q| --quiet| Disable all messages except FATAL ERRORS.編譯過程中只顯示嚴重錯誤資訊。| |
- | -u, --skip-autogen | + | |-d DEBUG| --debug=DEBUG| Enable debug messages at specified level.在指定的級別啟用調試消息。| |
- | -c, --case-insensitive | + | |-D MACROS| --define=MACROS| Macro: "Name [= Value]" |
- | -w, --warning-as-error | + | | | ---version| show program' |
- | -j LOGFILE, --log=LOGFILE | + | |
- | | + | |
- | -s, --silent | + | |
- | -q, --quiet | + | |
- | -d DEBUG, --debug=DEBUG | + | |
- | -D MACROS, --define=MACROS | + | |
- | ---version | + | |
行 415: | 行 385: | ||
==== PcdGetPtr() ==== | ==== PcdGetPtr() ==== | ||
PcdGetPtr(PcdHelloWorldPrintString) 讀取在PcdHelloWorldPrintString 的字串。 | PcdGetPtr(PcdHelloWorldPrintString) 讀取在PcdHelloWorldPrintString 的字串。 | ||
+ | |||
+ | ==== AMI VEB ==== | ||
+ | AMI VEB 基本上就是一堆 .CIF 檔案的集合 | ||
+ | |||
+ |