UEFI应用与编程--HelloWorld(01)
2017-12-25 15:52
2271 查看
如何写一个UEFI Shell环境下的一个小应用
一,准备安装所需的工具
1.下载EDK II,这里以UDK2015为例。https://github.com/tianocore/edk2/tree/UDK20152.安装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应用与编程--HelloWorld(03)
- UEFI应用与编程--HelloWorld(02)
- UEFI应用与编程--EFI_DISK_INFO_PROTOCOL
- UEFI应用与编程--显示文件信息
- 02_Android应用界面编程_01_视图(View)组件
- UEFI应用与编程--SmBios
- UEFI应用与编程--解析命令行参数
- UEFI应用与编程--ShowBootDevice
- UEFI应用与编程--GetNextVariableName
- UEFI应用与编程--EFI_USB2_HC_PROTOCOL
- UEFI应用与编程--BootOrder
- UEFI应用与编程--IndexIo
- Java编程简单应用———1、HelloWorld(HelloWorld的来源);2、输出个人信息3、输出特殊图案
- UEFI应用与编程--EFI_SMBUS_HC_PROTOCOL
- UEFI应用与编程--8042 Kbc
- 02_Android应用界面编程_01_视图(View)组件
- UEFI应用与编程--读写Pci配置空间
- UEFI应用与编程--ReadCmos
- UEFI应用与编程--WriteCmos
- UEFI应用与编程--ReadSpd