EDK2环境搭建(二)

前言

        上一篇文章对EDK2进行了编译运行,我发现,是对EmulatorPkg进行操作,因在target.txt文件中,有指定默认编译文件。此编译文件是一种UEFI的模拟器。会生成QEMU能识别的UEFI模拟器。所以昨天在使用Build命令后,会出现此结果。在EDK2文件夹中,还有一个很重要的固件:OVMF。同样可以使用QEMU打开。OVMF即开放虚拟机固件,它一般用于测试,是虚拟机上的UEFI固件。 

编译OVMF

  1. 首先还是要运行批处理文件edksetup.bat。
  2. 然后如下命令编译64位的OVMF固件。

         在使用build命令编译时,可以使用 -a 选择目标平台,可以是IA32,X64,ARM,IPF或EBC,此操作会代替target.txt文件中的TARGET_ARCH。使用 -p 是通过指定.dsc文件指定要编译的Package。

         编译成功如下:

     3. 编译后的固件为,在如下路径中的OVMF.fd文件

运行OVMF

        1.首先将OVMF.fd文件复制到QEMU的固件库中,如下:

        2.然后在此目录下,打开CMD命令行。使用如下命令打开虚拟机。

         可以看到这里与上篇文章的模拟器的不同之处。


遇到的问题 

NMAKE : fatal error U1077:\BaseTools\Bin\Win32\GenFfs.EXE: ش롰0x2
Stop.

产生原因:在使用新版的edk-master时,因为edk2-BaseTools-win32比较老,新版代码中使用了参数"-oi",旧版不支持这个参数,所以会报错。

解决办法:重新编译edk2-BaseTools或者更新\BaseTools\Source\C\Brotli里的内容。

应用程序工程模块 

        在完成EDK2环境的搭建后,我接下来,实现了应用程序工程模块的搭建与运行。其实就是一个简单的打印“Hello World”。首先要了解需要哪些文件,一般地需要一个入口函数所在的C文件和一个.inf后缀的工程文件。 

         1.C文件,我这里使用的是一个简单模块的源程序。

#include<Uefi.h>
EFI_STATUS UefiMain(IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable)
{
    SystemTable->ConOut->OutputString(SystemTable->ConOut,L"HelloWorld\n");
    return EFI_SUCCESS;
}

        2.工程文件。在UEFI中想要编译Main.c,需要编写.inf文件。这是模块的工程文件,用于指导EDK2编译工具自动编译模块。如下代码。

[defines]
    INF_VERSION = 0x00010005
    BASE_NAME   = UefiMain
    FILE_GUID   = 698793E-ED34-ffdb-AE97-1FA5E4D2117
    MODULE_TYPE = UEFI_APPLICATION
    VERSION_STRING = 1.0
    ENTRY_POINT = UefiMain

[Sources]
    main.c

[Packages]
    MdePkg/MdePkg.dec

[LibraryClasses]
    UefiApplicationEntryPoint
    UefiLib

        3.将此工程文件,引入到此Package中的.dsc中。这里我是在EmulatorPkg.dsc中,方便在虚拟机中展示。

[Components]
  EmulatorPkg/Win/Host/UefiMain.inf

         4.最后的运行结果如下:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值