最近在认真研读《UEFI 原理与编程》,强烈推荐这本书,希望深入学习UEFI 的朋友都应该购买一本反复阅读。
《UEFI 原理与编程》第二章提到了build 命令的常用参数,我认真考察了一下。在 CMD窗口下运行 build –h 可以获得支持的命令参数列表:
--version | 显示build的版本然后退出 |
-h, --help | 显示帮助信息然后退出 |
-a TARGETARCH, --arch=TARGETARCH | 指定编译目标,可选的有IA32, X64, IPF, ARM, AARCH64 或者 EBC。这个参数会覆盖 target.txt中指定的TARGET_ARCH。我们经常使用的 –a IA32 编译出来的 Application,更换为 –a X64即可编译出X64平台下可以用的 Application。 |
-p PLATFORMFILE, --platform=PLATFORMFILE
|
指令要编译的 package。这个参数会覆盖 target.txt中指定的 ACTIVE_PLATFORM。 |
-m MODULEFILE, --module=MODULEFILE | 编译指定的模块。就是编译指定 INF文件。 |
-b BUILDTARGET, --buildtarget=BUILDTARGET | 指定编译为 RELASE版本还是 DEBUG版本。这个参数会覆盖 target.txt中指定的TARGET。 |
-t TOOLCHAIN, --tagname=TOOLCHAIN
|
指定使用的工具集。这个参数会覆盖 target.txt中的TOOL_CHAIN_TAG 定义.
|
-x SKUID, --sku-id=SKUID
|
使用的给出的SKU ID来进行编译,覆盖DSC文件中的SKUID_IDENTIFIER (没用过。检查UDK2015 Source Code这个参数定义为 DEFAULT) |
-n THREADNUMBER | 指定编译中使用的线程数量。理论上说线程越多,编译速度越快。这个参数会覆盖target.txt中的MAX_CONCURRENT_THREAD_NUMBER |
-f FDFFILE, --fdf=FDFFILE
|
指定 FDF的名称。这个参数会覆盖DSC文件中指定的FDF文件名。 |
-r ROMIMAGE, --rom-image=ROMIMAGE | 指定生成的 FD文件名称。这个名称必须是FDF文件中[FD] 节中存在的文件名。 |
-i FVIMAGE, --fv-image=FVIMAGE
file. |
指定生成的FV文件名称。这个名称必须是FDF文件中[FV] 节中存在的名称。 |
-C CAPNAME, --capsule-image=CAPNAME
|
指定生成的Capsule文件名称。这个名称必须是FDF文件中[Capsule] 节中存在的名称。Capsule 是一种专门用来升级的UEFI定义的格式。比如:有对应的BIOS Capsule 文件,在启动过程中你把对应的文件放在U盘上,BIOS会自动识别并且加载然后升级自身,这样的好处是刷新环境稳定,避免操作系统的影响,避免被破解的风险。坏处是实际操中挺麻烦,需要准备FAT32格式的U盘。 |
-u, --skip-autogen | 跳过 Autogen 的过程进行编译 |
-e, --re-parse | 只做分析和生成编译需要的准备工作,不做实际编译,相当于只做AutoGen。 |
-c, --case-insensitive | 不检查 INF文件中的大小写 |
-w, --warning-as-error | 将 Warning视作 Error |
-j LOGFILE, --log=LOGFILE
|
将编译过程中输出到屏幕上的信息同样输入到文件中。如果信息太多,无法看到期望的出错信息不妨试试这个参数直接查看Log文件。 |
-s, --silent | 沉默模式执行NMAKE。 |
-q, --quiet Disable all messages except FATAL ERRORS.
|
关闭除了致命错误之外的全部信息显示。感觉和上面的 –s没有差别。 |
-v, --verbose
|
打开 verbose模式(完整信息),包括 library实例,dependency表达式,warning信息等等。 |
-d DEBUG, --debug=DEBUG
|
看起来是控制编译期的Debug信息输出。 |
-D MACROS, --define=MACROS
|
定义宏 |
-y REPORTFILE, --report-file=REPORTFILE
Create/overwrite the report to the specified filename.
|
创建/覆盖指定的报告。这个功能非常有用,可以生成一个 report文件,其中包括了项目定义的 PCD变量等等的信息。这对于查看一些编译期的参数非常有用。 |
-Y REPORTTYPE, --report-type=REPORTTYPE
|
创建/覆盖指定内容的报告。内容范围在[PCD, LIBRARY, FLASH, DEPEX, BUILD_FLAGS, FIXED_ADDRESS, EXECUTION_ORDER]。 |
-F FLAG, --flag=FLAG Specify the specific option to parse EDK UNI file.
Must be one of: [-c, -s]. -c is for EDK framework UNI file, and -s is for EDK UEFI UNI file. This option can also be specified by setting *_*_*_BUILD_FLAGS in [BuildOptions] section of platform DSC. If they are both specified, this value will override the setting in [BuildOptions] section of platform DSC.
|
指定处理uni文件的方法,可选项是[-c,-s]。-c是用来处理EDK架构的UNI;-s用来处理EDK架构的 UNI。我不清楚具体有什么差别,如果你了解不妨告诉我 |
-N, --no-cache | 关闭缓存机制。在EDK编译过程中是要生成一个小型的数据库文件的。我之前就遇到过杀毒软件会误杀这个数据库导致无法正常编译的情况。 |
--conf=CONFDIRECTORY | 指定 Conf 的目录。 |
--check-usage
|
检查 INF中提到的Source文件是否存在。只是检查而已,没有其他动作。 |
--ignore-sources Focus to a binary build and ignore all source files | 不使用源程序,强制使用编译生成的二进制文件继续编译。 |
上述是通过简单实验和个人理解进行翻译的,如果有不妥当欢迎直接评论中指出或者给我写邮件。万分感谢!
2019年2月12日 补充。上面提到的 -Y 参数查看 PCD 设定的例子(UDK2018):
build -x X64 -Y PCD -y zz.txt
运行结束后在根目录下可以看到 zz.txt。需要注意的是:
1.建议先编译一次,确定能跑过再继续;
2.zz.txt 是编译结束的时候才生成的。
-y PCD 的Y要大寫
谢谢,已经修改。