您的位置:首页 > 产品设计 > UI/UE

UEFI应用与编程--HelloWorld(01)

2017-12-25 15:52 2271 查看

如何写一个UEFI Shell环境下的一个小应用

一,准备安装所需的工具

1.下载EDK II,这里以UDK2015为例。https://github.com/tianocore/edk2/tree/UDK2015

2.安装Visual Stdio,这里以VS2012 Express为例。

3.安装TortoiseSVN, 这里以TortoiseSVN_1.9.4.27285_x64为例。

二,配置EDKII开发环境

1.进入BaseTools的Bin目录,新建一个“Win32”的文件夹,然后使用TortoiseSVN下载对应externals.txt里所描述的Windows平台的build.exe,要注意版本匹配,否则可能会出现PCD build error。
2.打开CMD,切换至UDK2015目录,输入命令“Edk2Setup.bat --nt32 x64”,然后会发现在Conf目录下会生成三个文件。(Edk2Setup.bat --nt32)
C:\EDKII\edk2-UDK2015>Edk2Setup.bat --nt32 x64

WARNING : NASM_PREFIX environment variable is not set
Attempting to build modules that require NASM will fail.

Rebuilding of the tools is not required. Binaries of the latest,
tested versions of the tools have been tested and included in the
EDK II repository.

If you really want to build the tools, use the --rebuild option.

"!!! WARNING !!! No CYGWIN_HOME set, gcc build may not be used !!!"

copying ... target.template to C:\EDKII\edk2-UDK2015\Conf\target.txt
copying ... tools_def.template to C:\EDKII\edk2-UDK2015\Conf\tools_def.txt
copying ... build_rule.template to C:\EDKII\edk2-UDK2015\Conf\build_rule.txt

#############################################################################
WORKSPACE            = C:\EDKII\edk2-UDK2015
EDK_TOOLS_PATH       = C:\EDKII\edk2-UDK2015\BaseTools
BASE_TOOLS_PATH      = C:\EDKII\edk2-UDK2015\BaseTools
EDK_TOOLS_BIN        = C:\EDKII\edk2-UDK2015\BaseTools\Bin\Win32

NOTE: Please configure your build to use the following TOOL_CHAIN_TAG
when building NT32Pkg/Nt32Pkg.dsc
TOOL_CHAIN_TAG       = VS2012x86
############################## PATH #########################################
C:\EDKII\edk2-UDK2015\BaseTools\Bin\Win32
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN\x86_amd64
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\BIN
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools
C:\Windows\Microsoft.NET\Framework\v4.0.30319
C:\Windows\Microsoft.NET\Framework\v3.5
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\VCPackages
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Team Tools\Performance Tools
C:\Program Files (x86)\Windows Kits\8.0\bin\x86
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools
C:\Windows\system32
C:\Windows
C:\Windows\System32\Wbem
C:\Windows\System32\WindowsPowerShell\v1.0\
C:\Program Files\Microsoft SQL Server\110\Tools\Binn\

C:\EDKII\edk2-UDK2015>


3.打开Conf\target.txt,修改“TOOL_CHAIN_TAG        = MYTOOLS”为“TOOL_CHAIN_TAG        = VS2012x86”。
4.输入命令“build -a X64”。(build)
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Vc\bin\x86_amd64\cl.exe" /Foc:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\OUTPUT\.\AutoGen.obj /nologo /c /WX /GS- /W4 /Gs32768 /D UNICODE /O1b2s /GL /Gy /FIAutoGen.h /EHs-c- /GR- /GF /Zi /Gm /Ic:\edkii\edk2-udk2015\MdeModulePkg\Universal\DisplayEngineDxe  /Ic:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG  /Ic:\edkii\edk2-udk2015\MdePkg  /Ic:\edkii\edk2-udk2015\MdePkg\Include  /Ic:\edkii\edk2-udk2015\MdePkg\Include\X64  /Ic:\edkii\edk2-udk2015\MdeModulePkg  /Ic:\edkii\edk2-udk2015\MdeModulePkg\Include c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\AutoGen.c
AutoGen.c
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Vc\bin\x86_amd64\lib.exe" /NOLOGO /LTCG /OUT:c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\OUTPUT\DisplayEngine.lib @c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\OUTPUT\object_files.lst
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Vc\bin\x86_amd64\link.exe" /OUT:c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.dll /NOLOGO /NODEFAULTLIB /IGNORE:4001 /OPT:REF /OPT:ICF=10 /MAP /ALIGN:32 /SECTION:.xdata,D /SECTION:.pdata,D /Machine:X64 /LTCG /DLL /ENTRY:_ModuleEntryPoint /SUBSYSTEM:EFI_BOOT_SERVICE_DRIVER /SAFESEH:NO /BASE:0 /DRIVER /DEBUG /EXPORT:InitializeDriver=_ModuleEntryPoint /BASE:0x10000 /ALIGN:4096 /FILEALIGN:4096 /SUBSYSTEM:CONSOLE  @c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\OUTPUT\static_library_files.lst
正在创建库 c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.lib 和对象 c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.exp
正在生成代码
已完成代码的生成
"GenFw" -e DXE_DRIVER -o c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.efi c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.dll
copy /y c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.efi c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\OUTPUT
已复制         1 个文件。
copy /y c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.efi c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\DisplayEngine.efi
已复制         1 个文件。
copy /y c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\*.map c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\OUTPUT
c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.map
已复制         1 个文件。
copy /y c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\*.pdb c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\OUTPUT
c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\X64\MdeModulePkg\Universal\DisplayEngineDxe\DisplayEngineDxe\DEBUG\DisplayEngine.pdb
已复制         1 个文件。
Fd File Name:NT32

Generate Region at Offs
a228
et 0x0
Region Size = 0x280000
Region Name = FV

Generating FVRECOVERY FV
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
########################################
##
Generate Region at Offset 0x280000
Region Size = 0xC000
Region Name = DATA

Generate Region at Offset 0x28C000
Region Size = 0x2000
Region Name = None

Generate Region at Offset 0x28E000
Region Size = 0x2000
Region Name = DATA

Generate Region at Offset 0x290000
Region Size = 0x10000
Region Name = None

Generate Region at Offset 0x0
Region Size = 0x280000
Region Name = FV

Generate Region at Offset 0x280000
Region Size = 0xC000
Region Name = DATA

Generate Region at Offset 0x28C000
Region Size = 0x2000
Region Name = None

Generate Region at Offset 0x28E000
Region Size = 0x2000
Region Name = DATA

Generate Region at Offset 0x290000
Region Size = 0x10000
Region Name = None

GUID cross reference file can be found at c:\edkii\edk2-udk2015\Build\NT32X64\DEBUG_VS2012x86\FV\Guid.xref

FV Space Information
FVRECOVERY [82%Full] 2621440 total, 2171816 used, 449624 free

- Done -
Build end time: 17:36:52, Dec.25 2017
Build total time: 00:04:16

C:\EDKII\edk2-UDK2015>

5.运行UEFI 模拟器,输入命令“build -a X64 run”,结果发现并不能运行,这是一件非常坑爹的事情。所幸的的是这个问题在UDK2017中得到了解决。(build run)



先告一段落吧,明天继续,哈哈~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uefi edk2 udk bios tiano