UEFI模拟环境搭建——windows+EDKII

目录

0 说明

1 安装软件

1.1 VS2019的安装

1.2 Python的安装

1.3 IASL的安装

1.4  NASM的安装

1.5 git的下载

2 EDKII的下载

3 配置环境


0 说明

       个人感觉UEFI的环境搭建非常复杂,在经过很长一段折磨后,终于还是搭建成功,写下来记录一下,同时如果可以的话,也希望给其他小伙伴带来一些帮助。要搭建UEFI的环境,需要下载一些必要的依赖文件:VS2019、Python、NASM、IASL、Git,下面就看下具体步骤吧。

参考资料:(非常感谢以下大佬的博客)

本文只是作为笔记使用,不作为商业用途,侵删。

UEFI——Windows10+VS2019 EDKII环境搭建_iasl下载-CSDN博客

UEFI学习---EDK II开发环境的搭建_edk2-CSDN博客

【UEFI】Windows和Linux下的环境搭建_uefi环境搭建-CSDN博客

UEFI原理与编程(二)UEFI开发环境搭建

环境:

Windows 10

1 安装软件

1.1 VS2019的安装

这里我使用的是VS2019,其实也可以选用其他的,相差不大应该都行,但是注意不要超过VS2019,因为EDKII支持的最高版本就到VS2019。

下载链接:Visual Studio 2019 再分发 | Microsoft Learn

下载之后,安装即可。

按照下图选择即可。

之后按照步骤正常安装即可。

对了,VS 2019的安装路径最好是默认的。(其实不是默认的我也没试过,参考其他人写的)

1.2 Python的安装

现在一般都是使用python3了,具体版本应该都差不多。

Download Python | Python.org

我下载的是python 11。安装python时,注意直接选择添加至环境变量,这样不用自己配置环境变量。

1.3 IASL的安装

IASL只需要下载解压,不用安装。

https://www.intel.com/content/www/us/en/developer/topic-technology/open/acpica/download.html

我放在了C盘下,C:\ASL\

1.4  NASM的安装

NASM的版本要在2.15以及以上。

Index of /pub/nasm/releasebuilds/2.15.05/win64

下载后管理员安装即可,没有什么特别注意的,有的话就注意下安装路径就行。我这里也是在C:\NASM\

1.5 git的下载

下载对应系统的git(这里是以windows 10为例)

Git - Downloading Package

2 EDKII的下载

下载git后,右键就可看到多出有关git的选项:

为了下载EDKII,我在C下创建了文件夹edk2pro。(C:\edk2pro)

进入C:\edk2pro右键打开Open Git Bash here。

下载源码:

git clone https://github.com/tianocore/edk2

这里可能会出错,大多数都是网络原因,可以多尝试几遍(如果还不行就只能换源或者(呃...))

之后进入edk2文件夹:(C:\edk2pro\edk)

$ cd edk2
$ git submodule update --init

这里给git也可能失败。同样大多数都是网络原因,可以多尝试几遍(如果还不行就只能换源或者(呃...))。

3 配置环境

这步是最麻烦、最容易出错的。

首先把python、NASM、IASL添加到用户变量里面。

找到设置——搜索高级系统设置——点击环境变量——点击用户变量path——点击编辑——添加路径即可。(有的时候要求最好要带上“ \ ”,其实不太明白这里是不是重要的,只能在编译时都试试╮(╯▽╰)╭)

如果不行可以在这里再添加下:

运行edksetup.bat(如果不行先运行edksetup.bat rebuild)

我这里是先运行edksetup.bat会报错,说没有Win32,我只好运行edksetup.bat rebuild就没事了,反正就是在运行edksetup.bat和运行edksetup.bat rebuild间不断调,最好能运行成功。具体我不太明白。╮(╯▽╰)╭

之后找到edk2\Conf,下有target.txt和tools_def.txt。

target.txt:

一般tools_def.txt不用修改。

注意以下路径:

之后就可以运行edksetup.bat rebuild

运行完后build,done即为成功。

如果这里出错,可以先配置下环境:

# 这样设置只作用于本次cmd
set PYTHON_HOME=C:\python311   # 全是我下载的路径,修改为自己路径
set NASM_PREFIX=C:\NASM\
set IASL_PREFIX=C:\ASL\
set VS2019_PREFIX= VS2019路径(写到...MSVC\14.16.27023就行)

如果以上不行,那就重启电脑,之后打开cmd,先配置环境,再edksetup.bat rebuild,再build即可。

4 运行实例代码HelloWorld

再build后就可以在...edk2\Build\EmulatorX64\DEBUG_VS2019\x64下找到WinHost.exe,点击运行。

注意这里打开后,可能没法进行操作,主要是因为输入法的问题,我们需要下载英语输入法,之后切换后再次运行。

设置——时间和语言——语言

应用后切换:

再次点击WinHost.exe,输入fs0,输入HelloWorld.efi:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588099.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ctfshow——文件上传

文章目录 文件上传思路web 151web 152web 153知识点解题 web 154web 155web 156web 157web 158web 159web160web 161 文件上传思路 web 151 打开页面显示:前台校验不可靠。说明这题是前端验证。 右键查看源代码,找到与上传点有关的前端代码&#xff1a…

软件测试/测试开发丨Linux进阶命令(curl、jq)

1、 curl 接口请求 curl是一个发起请求数据给服务器的工具curl支持的协议FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSPcurl是一个非交互的工具 2、 curl 发起 get 请求 -G:使用get请求-d&#xf…

电子邮件地址填写指南:格式与常见问题解答

一个专业的电子邮件地址是一个你只用于工作目的的通信帐户。当你给收件人发送电子邮件时,这是他们最先看到的细节之一。无论你的职位或行业如何,拥有一个专业的电子邮件地址都可以提高你和所在公司的可信度。 在本文中我们解释了专业的电子邮件地址是什么…

2023-12-22 LeetCode每日一题(得到山形数组的最少删除次数)

2023-12-22每日一题 一、题目编号 1671. 得到山形数组的最少删除次数二、题目链接 点击跳转到题目位置 三、题目描述 我们定义 arr 是 山形数组 当且仅当它满足&#xff1a; arr.length > 3存在某个下标 i &#xff08;从 0 开始&#xff09; 满足 0 < i < arr.…

Zookeeper-Zookeeper应用场景实战(二)

1. Zookeeper 分布式锁实战 1.1 什么是分布式锁 在单体的应用开发场景中涉及并发同步的时候&#xff0c;大家往往采用Synchronized&#xff08;同步&#xff09;或者其他同一个 JVM内Lock机制来解决多线程间的同步问题。在分布式集群工作的开发场景中&#xff0c;就需要 一种…

2024年【安全员-A证】考试内容及安全员-A证最新解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 安全员-A证考试内容参考答案及安全员-A证考试试题解析是安全生产模拟考试一点通题库老师及安全员-A证操作证已考过的学员汇总&#xff0c;相对有效帮助安全员-A证最新解析学员顺利通过考试。 1、【多选题】下列关于门…

RHCE9学习指南 第13章 硬盘管理

新的硬盘首先需要对硬盘进行分区和格式化&#xff0c;首先了解一下硬盘的结构&#xff0c;如图13-1所示。 图13-1 磁盘上的磁道和扇区 硬盘的磁盘上有一个个的圈&#xff0c;每两个圈组成一个磁道。从中间往外发射线&#xff0c;把每个磁道分成一个个的扇区&#xff0c;每个扇…

Python高级用法:生成器(generator)

生成器&#xff08;generator&#xff09; 生成器是一种返回生成序列的方法&#xff0c;与直接使用列表等方式返回序列的方式不同的是&#xff0c;他的生成可以是无限的。 生成器可以与next搭配使用&#xff0c;可以被看作是一种特殊的迭代器。 yield语句 yield一般与循环相…

UDP套接字搭建简易服务器与客户端

使用UDP套接字搭建 文章目录 使用UDP套接字搭建前言一、基本结构二、使用步骤1.服务器端2.客户端 三、效果展示总结 前言 这次较上个版本《Python 网络编程之搭建简易服务器和客户端》https://only-me.blog.csdn.net/article/details/135251171增加了&#xff1a; UDP协议来进…

机器学习部分相关概念

数据集(Data Set)即数据的集合&#xff0c;每一条单独的数据被称为样本(Sample)。 对于每个样本&#xff0c;它通常具有一些属性(Attribute)或者特征(Feature)&#xff0c; 特征所具体取得值被称为特征值(Feature Value)。 西瓜数据集 色泽根蒂纹理青绿稍蜷模糊乌黑蜷缩清晰 …

学Python的正确顺序千万别弄反了,到时候后悔就来不及了

学Python的正确顺序&#xff1a;从基础到高级&#xff0c;步步为营 在当今数字化时代&#xff0c;Python已成为最受欢迎的编程语言之一。它不仅广泛应用于数据分析、人工智能和Web开发等领域&#xff0c;还为初学者提供了一个友好且功能强大的平台。然而&#xff0c;学习Python…

matalb实践(十二):减肥

1.题目 2.解答 2.1模型假设 1.体重增加正比于吸收的热量&#xff0c;平均每8000kcal增加体重1kg 2.身体正常代谢引起的体重减少正比于体重&#xff0c;每周每千克体重消耗热量一般在200kcal至320kcal之间&#xff0c;且因人而异&#xff0c;这相当于体重70kg的人每天消耗2000k…

【Spark精讲】一文讲透Spark RDD

MapReduce的缺陷 MR虽然在编程接口的种类和丰富程度上已经比较完善了&#xff0c;但这些系统普遍都缺乏操作分布式内存的接口抽象&#xff0c;导致很多应用在性能上非常低效 。 这些应用的共同特点是需要在多个并行操 作之间重用工作数据集 &#xff0c;典型的场景就是机器学习…

Apollo自动驾驶:改变交通运输的游戏规则

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 ChatGPT体验地址 文章目录 前言1. Apollo缓存层2. 本地状态管理库3. 离线同步和冲突解决4. 离线数据同步和离线优先策略结论 &#x1f4f2;&#x1f50c; 构建离线应用&#xff1a;Apollo…

ssm基于web 的个人时间管理系统+vue论文

基于web 的个人时间管理系统的设计与实现 摘要 当下&#xff0c;正处于信息化的时代&#xff0c;许多行业顺应时代的变化&#xff0c;结合使用计算机技术向数字化、信息化建设迈进。传统的个人时间信息管理模式&#xff0c;采用人工登记的方式保存相关数据&#xff0c;这种以人…

【数据结构】排序之交换排序(冒泡 | 快排)

交换目录 1. 前言2. 交换排序3. 冒泡排序3.1 分析3.2 代码实现 4. 快速排序4.1 hoare版本4.1.1 分析4.1.2 hoare版本代码 4.2 挖坑法4.2.1 分析4.2.2 挖坑法代码实现 4.3 前后指针版本4.3.1 分析4.3.2 前后指针版本代码实现 1. 前言 在之前的博客中介绍了插入排序&#xff0c;…

Linux基础知识学习2

tree命令的使用 可以看到dir2目录下的这些文件&#xff0c;要想显示dir2的具体结构&#xff0c;可用tree命令 mv命令 它可以实现两个功能 1.将文件移动到另一个目录中 2.对某一个文件进行重命名 1.将文件移动到另一个目录中 这里将dir1中的2.txt移动到他的子目录dir3中 执行…

“C语言与人生:手把手教你玩转C语言数组,从此编程无难题“

各位少年&#xff0c;我是博主那一脸阳光&#xff0c;由我来给大家介绍C语言的数组的详解。 在C语言中&#xff0c;数组是一种极其重要的数据结构&#xff0c;它允许我们存储和管理相同类型的一系列相关数据。通过理解并熟练掌握数组的使用&#xff0c;开发者能够高效地处理大量…

超真实随身WiFi测评,你确定不看一下?随身WiFi靠谱吗? 看完这篇文章你就懂了?随身WiFi真实评测

用了一年多的格行随身wifi&#xff0c;屏幕都磨花了。直接看图&#xff0c;都是自己实测&#xff01; 设备是去年买的&#xff0c;到现在也快1年了&#xff0c;一直有朋友蹲后续&#xff0c;现在把后续给大家&#xff01;到底是大牌子&#xff0c;确定是不跑路的随身wifi&…

Vue独立组件开发-递归组件

文章目录 一、前言二、实现三、总结四、最后 一、前言 递归组件就是指组件在模板中调用自己。 二、实现 开启递归组件的必要条件&#xff0c;就是在组件中设置一个 name 选项。 <template><div><my-component></my-component></div> </te…