首先看下EDK2中和VS文件的对比,来更好地认识EDK中各个文件是干嘛的:

EDK2 VS
.dsc .sln
.inf .proj
package 一个项目

1.安装UDK2


    安装前需要准备好的下载的东西。全部放在C盘根目录下,比较好操作。(编译OVMF还需要openssl1.1.0)
    另外需要python环境,VS环境。我用的是python3.7和VS2013。VS2013注意要在默认安装目录下。(不要嫌多,网上其他人装这个UEFI用了两三天时间的人才一大堆,提前说好装好有心理准备)

    在conf目录下target.txt设置生成的模拟器的两个参数,第一个目标处理器改为X64或者IA32(看你处理器),第二个是TOOL_CHAIN工具链改为现在使用的编译器,可以该目录下另一个txt查看你的edk2包支持的VS版本。如果没有你现在安装的VS版本是不行的。

    活动平台改为MdeModulePkg/MdeModulePkg.dsc(这个是最基础的包,其他的还需要安装组件)。
另外编译线程数更改为3。

运行edksetup.bat,发现三个环境变量未设置。
set NASM_PREFIX=C:\NASM
set CLANG_BIN=C:\NASM
set CYGWIN_HOME=C:\edk2-master\BaseTools\Bin\CYGWIN_NT-5.1-i686
set PYTHON_HOME=C:\Python37
python环境变量也设上,否则会出很多警告。

搞好之后就能在该目录使用build命令构建。编译到一半会提示nmake 错误:Vfrcompile…。

    这时候cd C:\edk2-master\BaseTools\Source\C 执行nmake all,看到上面界面。必须从这儿cd过去,不能从目录那儿打开执行cmd。

这时候再切换cd C:\edk2-master回去edk2-master目录下执行build命令,就一路畅通直接成功了。

搞定。

2.编译运行Helloworld.efi


    在MdeModulePkg的Application目录下有不少示例程序,这里找到了HelloWorld来作示范。

    build -p MdeModulePkg/MdeModulePkg.dsc -a IA32 -m     MdeModulePkg\Application\HelloWorld\HelloWorld.inf

生成的EFI文件在\Build\NT32IA32\DEBUG_VS2013x86_IA32下。
build run运行模拟器运行EFI文件。

命令行编译参数说明:
build -p $WORKSPACE/EmulatorPkg/EmulatorPkg.dsc -a X64 -b DEBUG -t GCC5 -D BUILD_64 -D UNIX_SEC_BUILD -n 3
option说明:
-p PLATFORMFILE: 目标平台描述文件
-a TARGETARCH: 目标平台X64/IA32
-b BUILDTARGET: 可选项(DEBUG, RELEASE, NOOPT),将只编译dsc文件中特定的模块
-m MODULEFILE: 编译目标module
-t TOOLCHAIN : 使用目标编译器编译
-n THREADNUMBER : 多线程编译
-D MACROS: Macro格式: “Name [= Value]”,传入宏定义


    当然也可以用来生成在Windows8 X64版本的X64的EFI程序。

那么如何编译外来的github项目呢?
    一般github上的UEFI项目都带有.inf文件。

我们需要在模拟器dsc文件的component块中添加指定inf文件的路径。否则就会报上图错误。

由于这里指定路径是相对于C:\edk2-master目录下,所以我们编译的项目必须放在该目录下。

3.模拟器扩展

MdeModulePkg模块开发环境包(MdePkg)是一个特殊的包,因为它是构建模块所需的最低基础设施。一个模块可能需要构造额外的包,但是所有的模块都基于MdePkg。通过保持MdePkg非常稳定,它有效地成为一个模块或设备驱动程序工具包,用于构建可以使用各种包集的模块。MdePkg允许构造一系列模块类型。MdePkg可以单独使用,也可以与其他包结合使用来生成模块。MdePkg可以生成定义为base的独立模块,这些模块只使用在MdePkg中定义的base类型的资源。基本模块允许您编写可移植的C代码,可以轻松地移植到任何环境中。MdePkg可用于在C代码中编写SEC。
    MdePkg还可以基于EDK II规范中描述的EDK Il构建环境构建UEFI驱动程序或应用程序。

OvmfPkg/OvmfPkgX64.dsc
OVMF (Open Virtual Machine Firmware ) 旨在支持虚拟机启动的一套edk2 Package
。。。它支持QEMU模拟器。这也正是很多人编译它的原因。
构建该模拟器需要额外添加openssl库的,而且最新的不一定能成功。最好是openssl-1.1.0-stable-SNAP-20180129.tar.gz这个版本。安装方法是:解压下载的文件,然后将全部内容解压到UDK2017\CryptoPkg\Library\OpensslLib 目录下的 Openssl 目录中。
具体方法参考链接http://www.lab-z.com/stu144/
该版本openssl下载地址:https://github.com/openssl/openssl/archive/OpenSSL_1_1_0g.zip

上图是EDK2安装包中对openssl版本的要求…坑吧?!

首先,感谢任何一个阅读,关注或点赞我博客的朋友!! 当然博客中的任何问题都欢迎大家随时指出! 欢迎有兴趣的人私信留下你的联系方式,我们可以一起沟通,一起学习哦!我的学习交流QQ群366469549。 再次感谢大家的支持!!! 我会再接再厉的!!!

UDK安装和编译UEFI程序相关推荐

  1. PVM的安装和编译PVM程序

    最近刚开始学习并发编程,学习到了PVM这一块.关于在linux系统中PVM的安装,真是要我的命,繁琐死了,最关键是我对linux也是刚开始学,还在继续学习<鸟哥的linux私房菜>一书.好 ...

  2. windows安装mingw编译c程序

    这篇文章主要介绍在windows下安装mingw,编译c代码的详细步骤 mingw是在windows下面的gcc,有了mingw,以前在linux下面编写的c代码也能在window下面编译运行啦. 1 ...

  3. rpm、yum、编译安装轻松管理centos7程序包

    程序包管理器之RPM 一.rpm是什么 RPM 是RPM Package Manager(RPM软件包管理器)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放式的.RPM ...

  4. 【开发环境】Windows 系统中使用 Makefile 构建脚本编译 C 程序 ( 下载并安装 TDM-GCC 编译器 | 配置环境变量 | 编译 Makefile 程序 )

    文章目录 一.下载 TDM-GCC 编译器 二.安装 TDM-GCC 编译器 三.配置环境变量 四.根据 Makefile 脚本编译 C 程序 一.下载 TDM-GCC 编译器 下载并安装 TDM-G ...

  5. 编译Java程序一共要安装什么_如何编译java程序

    如何编译java程序 java编程要如何编译java程序?编译java程序要注意什么?代码是什么?下面跟yjbys一起来学习一下. 要安装好jdk,设置好相应的环境变量,然后在命令行里面javac. ...

  6. rpm、yum、编译安装轻松解决centos7程序包安装

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 程序包管理器之RPM 一.rpm是什么 RPM 是RPM Package Manager(RPM软件包管理器)的 ...

  7. linux opengl配置编译,Linux下OpenGL的安装与cmake编译OpenGL程序

    Linux下OpenGL的安装与cmake编译OpenGL程序 OpenGL安装 安装命令如下: $ sudo apt install build-essential $ sudo apt insta ...

  8. Visual C++ 6.0安装后首次编译运行程序报错如何解决

    Visual C++ 6.0安装后首次编译运行程序报错,出现下图情况: 出现这样的情况是因为头文件的路径与实际路径不符. 解决方案: 点击"Tools"--"Option ...

  9. 鲲鹏服务器设置ip文件,IPFS在鲲鹏云服务器中的安装与编译过程记录

    IPFS星际文件系统是一个旨在创建持久且分布式存储和共享文件的网络传输协议.它是一种内容可寻址的对等超媒体分发协议.在IPFS网络中的节点将构成一个分布式文件系统.它综合了几十年来学术界和开源领域成功 ...

  10. LSA 安装及管理应用程序

    LSA  安装及管理应用程序 一.linux应用程序基础 1.linux命令与应用程序的关系 文件位置 系统命令:一般在/bin和/sbin目录中,或为shell内部指令 应用程序:通常在/usr/b ...

最新文章

  1. Layui 数据表格, 取消全选
  2. html 清除float,css中如何清除float
  3. 【Python刷题】_10
  4. 根据centos系统启动过程定位故障位置
  5. 04.search_template
  6. css清除浮动的几种方法_CSS 分享几种传统布局方法[上]
  7. 全网都在看的Fiddler、mitmproxy抓包秘籍,花钱都买不到
  8. C#使用SQLite数据库的代码示例
  9. 面向对象的程序开发技术C++教学课件系列之二
  10. java自动转换需要的开头_字符串和数值型进行运算时,字符串如果不是数字开头,会自动转换成什么?...
  11. paip.论大数据的方法,技术erlang,haddop.attilax总结.
  12. mos管h桥电机驱动电路与设计原理图-KIA
  13. 最佳和最快的游戏 DNS 服务器
  14. 设置虚拟机dns服务器域名,域名服务器DNS的设置实验
  15. CorelDRAW2022最新电脑版离线安装教程
  16. ChemDraw教程之怎么连接ChemDraw结构
  17. 移动机器人五种坐标系
  18. python的tell和seek_4.2Python文件基本操作2:tell、seek
  19. python爬虫妹子图_Python 爬虫入门(二)——爬取妹子图
  20. 技术水平的确很高,正规公司为什么还是不录用这些人(注技术不好的更没戏)

热门文章

  1. 一篇文章带你详解 HTTP 协议(网络协议篇一)
  2. VC9.VC10.VC11...各对应什么版本的VS,以及含义
  3. 电视还有前途吗?也许它的前途就是嫁给互联网
  4. 高等应用数学问题的matlab求解pdf,《高等应用数学问题的matlab求解》(薛定宇 陈阳泉)[PDF]...
  5. php嗅探源码,网络嗅探器(含源代码)
  6. html表单提交带后台,form表单提交数据给后台
  7. java游戏运行_用jar包运行带GUI的java游戏
  8. CSDN博客添加友情链接
  9. 台电tbook10s官方固件_台电TbooK 10 S (E5N5)-双系统平板电脑固件
  10. 【SQL Server】SQL2005的安装与配置、简单使用