Ubuntu下安装UDK
Build/Launch EDKII emulator in Windows and Linux:编译/运行Windows和Linux环境下EDKII模拟器[4]
Build/LaunchEDKIIemulatorinWindowsandLinux:编译/运行Windows和Linux环境下EDKII模拟器[4]2015-07北京海淀区张俊浩 本篇博文《Build/LaunchEDKIIemulatorinWindowsandLinux(编译/运行Windows和Linux环境下EDKII模拟器)[4]》是基于在前几篇博文搭建Windows/Linux下EDKII开发环境、配置/编译EDKII源码项目的基础之上。本篇博文参考《EDKII_UserManual_0_7》和戴正华《UEFI原理与编程》,简介了EDKII模拟平台,介绍Windows环境下Nt32模拟器、Linux环境下Emulator模拟器的编译和运行过程。博文框架安排如下: 4.Build/LaunchEDKIIemulatorinWindowsandLinux(编译/运行EDKII模拟器) ->4.1EmulationPlatformsIntroduction(EDKII模拟器平台介绍) ->4.2InWindows:Nt32Pkg(Windows环境下编译/运行Nt32模拟器) ->4.2.1Toolchain:BaseTools ->4.2.2SetupNt32buildshellenvironment ->4.2.3ModifyConfFiles ->4.2.4BuildNt32Pkg ->4.2.5RunNt32 ->4.3InLinux:EmulatorPkg(Linux环境下编译/运行Emulator模拟器) ->4.3.1Toolchain:BaseTools ->4.3.2SetupEmulatorbuildshellenvironment ->4.3.3ModifyConfFiles ->4.3.4BuildEmulatorPkg ->4.2.5RunEmulator 4.1EmulationPlatformsIntroduction(EDKII模拟器平台介绍)一个仿真平台并不是一个实际的硬件平台,但它旨在证明EDKII核心模块的稳定性和独立于硬件可以开发模块。仿真平台和实际平台之间的差异是其加载器和仿真的硬件设备。 EDKII提供三种模拟器平台:Nt32,UnixandDuetplatforms。 (AnEmulationplatformisnotanactualplatform,butisdesignedtoprovethestabilityofEDKII'scoremodulesanddevelopahardware-independentmodule.Thedifferencesbetweenemulatedplatformsandactualplatformsareitsloaderandemulatedhardwaredevices.EDKIIprovidesthreeemulationplatforms:Nt32,Emulator(UnixPkg过时)andDuetplatforms.) *NT32platformNt32是32位Windows操作系统下提供UEFI运行环境的模拟器。SecMain模块[edk2BuildNT32IA32DEBUG_VS2013x86IA32SecMain.exe]是Nt32平台加载器,是Windows可执行程序。Nt32建立了模拟硬件环境,如分配Windows内存为Nt32平台来模拟系统的内存,映射FD(FlashDescriptionFiles)文件到Windows的内存区域来模拟Flash设备。之后,SecMain程序调用PeiCore[Pre-EFIInitialization]作为实际的平台入口移交给PEI[Pre-EFIInitialization,UEFI的第二个启动阶段]阶段。 (Nt32platformislaunchedinthe32-bitMicrosoftWindowoperatingsystemandprovidesUEFIruntimeenvironment. TheSecMainmodule,theNt32platformloader,isaWindowsapplication.ItestablishesemulatedhardwareenvironmentsuchasallocatingWindowsmemorytosimulatesystemmemoryforNt32platformandmappingFDfiletoaWindowsmemoryregiontosimulateflashdevice.Afterthat,SecMaininvokesPeiCore'sentryasanactualplatformhandingofftothePEIphase.) *Emulatorplatform《EDKII_UserManual_0_7》第4章《EDKIIEmulationEnvironment》关于Linux环境下的模拟器介绍的是Unix模拟器。
但进入UnixPkg包下发现只有空目录结构没有源文件,在顶层目录下有Deprecated.txt过时声明的文件: UnixPkgisdeprecated.(UnixPkg过时了) ThesamefunctionalityissupportedusingtheEmulatorPkg.(同样的功能可由EmulatorPkg实现) PleaseseeEmulatorPkg/READMEformoreinformationaboutEmulatorPkg. (参考EmulatorPkg/README获取更多信息) EmulatorPkg/README对EmulatorPkg的介绍:EmulatorPkg在与UEFI运行不完全兼容环境下提供了UEFI模拟运行环境,例如运行在一个操作系统进程建立的UEFI模拟环境。 EmulatorPkgprovidesanenvironmentwhereaUEFIenvironmentcanbeemulatedunderanenvironmentwhereafullUEFIcompatibleenvironmentisnotpossible.(Forexample,runningunderanOSwhereanOSprocesshoststheUEFIemulationenvironment.) *DuetplatformDuet在硬件平台虚拟出实际的UEFIBIOS工作环境,并且提供基于LegacyBIOS的Runtime环境的支持库。 4.2InWindows:Nt32Pkg(Windows环境下编译/运行Nt32模拟器)4.2.1Toolchain:BaseTools在Windows开发环境下EDKII可执行工具链位于edk2BaseToolsBinWin32目录下。 4.2.2SetupNt32buildshellenvironmentD:> cd edk2 D:edk2> edksetup.bat --nt32[ 注: edksetup.bat 脚本参数“ --nt32 ” , 是为了设置 Nt32 编译环境变量 ] 4.2.3ModifyConfFiles4.2.3.1SetBuildTargetInformation:配置target.txt文件将当前模块配置为Nt32Pkg。 D:edk2> notepad Conftarget.txtACTIVE_PLATFORMshouldlooklikethisinConftarget.txt: ACTIVE_PLATFORM = Nt32Pkg/Nt32Pkg.dsc Conftarget.txt其他配置采用之前的默认配置: TOOL_CHAIN_TAG = VS2013x86 TARGET = DEBUG TOOL_CHAIN_CONF = Conf/tools_def.txt MAX_CONCURRENT_THREAD_NUMBER = 1 BUILD_RULE_CONF = Conf/build_rule.txt 4.2.3.2Check/Modifytools_defInformation:检查tools_def.txt确保编译器路径正确之前的博客中环境EDKII项目编译器路径已经做了检查。 4.2.4BuildNt32PkgD:edk2> build
编译时间大概10min左右。 4.2.5 RunNt32D:edk2> build run 或者在build命令行指定平台:[不过-a/-p平台架构和目标平台我们在target.txt中配置,作为build默认选项参数] D:edk2> build -a IA32 -p Nt32Pkg/Nt32Pkg.dsc run或者是执行 edk2BuildNT32IA32DEBUG_VS2013x86IA32SecMain.exe可执行文件; 通常模拟器最终会进入UEFIShell,EDKII默认将目录: edk2BuildNT32IA32DEBUG_VS2013x86IA32映射为文件系统FS0,在shell中执行命令(FS0:/fs0:,大小写均可) Shell> fs0: Shell将会打开FS0分区并将当前目录切换到FS0分区的根目录,可执行UEFI应用程序HelloWorld.efi,向屏幕终端打印输出字符串“UEFIHelloWorld!”。 FS0:> HelloWorld.efi
4.3InLinux:EmulatorPkg(Linux环境下编译/运行Emulator模拟器)4.3.1Toolchain:BaseTools在Linux开发环境下EDKII可执行工具链位于edk2/BaseTools/BinWrappers/PosixLike目录下。 4.3.2SetupEmulatorbuildshellenvironmentlinux@ubuntu:~$ cd ~/src/edk2 linux@ubuntu:~/src/edk2$ export EDK_TOOLS_PATH=$HOME/src/edk2/BaseTools linux@ubuntu:~/src/edk2$ . edksetup.sh BaseTools
4.3.3ModifyConfFiles4.3.3.1SetBuildTargetInformation:配置target.txt文件将当前模块配置为EmulatorPkg。 ACTIVE_PLATFORMshouldlooklikethisinConftarget.txt: ACTIVE_PLATFORM = EmulatorPkg/EmulatorPkg.dsc Conftarget.txt其他配置采用之前的默认配置: TOOL_CHAIN_TAG = GCC46 TARGET = DEBUG TOOL_CHAIN_CONF = Conf/tools_def.txt MAX_CONCURRENT_THREAD_NUMBER = 1 BUILD_RULE_CONF = Conf/build_rule.txt 4.3.3.2Check/Modifytools_defInformation:检查tools_def.txt确保编译器路径正确之前的博客中环境EDKII项目编译器路径已经做了检查。 4.3.4BuildEmulatorPkg编译EmulatorPkg有两种方式,一个是通过最基本build命令,build命令解析target.txt中的配置参数进行编译;而是运行EmulatorPkg包下的build.sh脚本来调用build命令完成EmulatorPkg编译。 编译进行大约5min左右(I5-3337U处理器1.8G主频,单线程)。 linux@ubuntu:~/src/edk2$ build
EmulatorPkg/README对EmulatorPkg的编译/运行方式介绍: OnsystemswiththebashshellyoucanuseEmulatorPkg/build.shtosimplifybuildingandrunningEmulatorPkg. (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |