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…

还不会STL???【C++】标准模板库(STL):万字长文,不看后悔,适合小白,快速上手,函数全盘点!

文章目录 STL 是什么01 vector 动态数组1.1介绍1.2方法函数1.3 访问1.3.1 下标访问1.3.2 迭代器访问1.3.3 智能指针 02 stack 栈2.1 介绍2.2 方法函数2.3 栈遍历2.3.1 栈遍历2.3.2 数组模拟栈进行遍历 03 queue 队列3.1 介绍3.2 方法函数3.3 队列模拟 04 deque 双端队列4.1 介绍…

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

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

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

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

HTTPS面试题

HTTPS面试题 什么是HTTPS&#xff1f;它与HTTP有何不同&#xff1f; 答案&#xff1a;HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是一种通过加密和认证保护数据传输安全的HTTP协议。它使用SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#x…

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

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

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

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

配置yum镜像源

文章目录 前言一、配置yum源1.清除本地配置2.挂载镜像3.新增本地源配置4.加载本地yum源&测试 总结 前言 在内网环境的时候&#xff0c;yum无法正常连接互联网安装软件&#xff0c;这时候我们可以挂载系统镜像文件来下载。 一、配置yum源 1.清除本地配置 cp -rf /etc/yum…

2023年12月个人工作生活总结

本文为 2023 年 12 月工作生活总结。 研发编码 Sqlite3数据库已有表添加字段 需求&#xff1a;某工程因需要在数据库已有表添加一新字段&#xff0c;不影响原有结构。关键代码&#xff1a; 添加表名&#xff1a; ALTER TABLE <表名> ADD COLUMN <新字段> INTEGE…

DS|串应用

问题一&#xff1a;DS串应用 -- KMP算法 题目描述&#xff1a; 学习KMP算法&#xff0c;给出主串和模式串&#xff0c;求模式串在主串的位置 输入要求&#xff1a; 第一个输入t&#xff0c;表示有t个实例 第二行输入第1个实例的主串&#xff0c;第三行输入第1个实例的模式…

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

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

Linux个人常用总结

1 文件操作 1.1 查看文件 ls ls -a&#xff1a;Linux上的文件以“.”开头的文件被系统视为隐藏文件&#xff0c;仅用ls命令是看不到他们的&#xff0c;而用ls -a除了显示 一般文件名外&#xff0c;连隐藏文件也会显示出来。ls -l&#xff1a;这个命令可以使用长格式显示文件内…

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

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

机器学习的底层技术

机器学习的底层技术主要包括以下几个方面&#xff1a; 数学推导能力&#xff1a;机器学习依赖于数学理论和方法&#xff0c;例如线性代数、概率论、统计学等。数学推导能力可以帮助人们理解和推导机器学习算法的原理&#xff0c;进而应用于实际问题中。 数据结构和算法&#x…

vue的工作原理

获取内存中的(虚拟)dom树和新生成的(虚拟)dom树,通过diff算法进行对比,得到需要更新的DOM元素 这两颗(虚拟)DOM树都是框架模拟出来的,就是个对象,旧的会被保存在内存中 Vue.js 是一种用于构建用户界面的渐进式 JavaScript 框架。下面是 Vue.js 的工作原理概述&#xff1a; 声明…

“图解C语言:一维数组的声明、创建与初始化艺术“

各位少年&#xff1a; 标题&#xff1a;《C语言一维数组的探索之旅&#xff1a;从声明到初始化&#xff0c;及如何避免常见误区》 引言 在编程世界中&#xff0c;数组无疑是最基础且重要的数据结构之一&#xff0c;尤其在C语言中&#xff0c;它以其简洁明了的特性为各类数据处…

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编程-实现对自定义类对象排序 具有不同标识的类的实例比较结果通常为不相等&#xff0c;除非类定义了 __eq__() 方法。 一个类的实例不能与相同类的其他实例或其他类型的对象进行排序&#xff0c;除非定义该类定义了足够多的方法&#xff0c;包括 __lt__(), __le__(), __…