【调试笔记-20240516-Windows-使用VS2019编译edk2(上)】

调试笔记-系列文章目录

调试笔记-20240516-Windows-使用VS2019编译edk2(上)


文章目录

  • 调试笔记-系列文章目录
    • 调试笔记-20240516-Windows-使用VS2019编译edk2(上)
  • 前言
  • 一、安装开发工具
    • 1. 安装 VS2019
    • 2. 安装 Python 3.10
    • 3. 安装 iASL
    • 4. 安装 NASM
  • 二、准备 EDK2 源代码
    • 1.从 github 下载
    • 2. 从 gitee 下载
  • 三、编译测试模拟器
    • 1. 配置项目
    • 2. 编译基本工具
    • 3. 编译测试模拟器
    • 4. 运行测试模拟器
  • 总结


前言

本文介绍了在 Windows 平台上搭建 edk2 开发环境的步骤,为研究 QEMU 的UEFI 支持提供实验基础。
本文读者需要具备 Windows 平台的开发经验,并对 QEMU 系统仿真有一定的使用经验。

实验使用的电脑如下:

CPU:

Intel Core i5 8265U

操作系统:

Microsoft Windows 10  Professional (x64), Version 22H2, Build 19045.4412

一、安装开发工具

1. 安装 VS2019

下载地址:https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/history#installing-an-earlier-release

选择 BuildTools

下载后运行,选择 “使用C++的桌面开发”

我的安装路径是:D:\VS\2019\BuildTools

VS2019安装选项

安装完成后,在系统变量中添加

CLANG_BIN=D:\VS\2019\BuildTools\VC\Tools\Llvm\x64\bin\

注意目录 bin 最后的 “”

新建环境变量 CLANG_BIN


2. 安装 Python 3.10

主页:https://www.python.org/

选择最新的稳定版本下载安装即可。

Python安装界面

我的安装目录是:D:\Python\Python310\

安装完成后,在添加系统变量

PYTHON_HOME=D:\Python\Python310

添加系统变量 PYTHON_HOME


3. 安装 iASL

下载地址: https://www.intel.cn/content/www/cn/zh/developer/topic-technology/open/acpica/download.html

选择 “Windows Binary Tools”
下载后解压安装到 D:\iASL\ 目录中
并在环境变量中添加

IASL_PREFIX=D:\iASL\

注意目录 iASL 后的 “\”

添加系统变量 IASL_PREFIX


4. 安装 NASM

主页: https://www.nasm.us/

下载地址: https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/

下载后安装到 D:\NASM\ 目录中
并在环境变量中添加

NASM_PREFIX=D:\NASM\

注意目录 NASM 后的 “\”

![添加系统变量 NASM_PREFIX


二、准备 EDK2 源代码

1.从 github 下载

项目主页:https://github.com/tianocore/edk2

使用命令

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

或直接下载 zip 打包文件

下载解压后,需要对项目的子模块初始化,在 edk2 根目录下执行命令

cd edk2git submodule update --init

2. 从 gitee 下载

项目主页:https://gitee.com/david921518/mingw-edk2](https://gitee.com/david921518/mingw-edk2)

使用命令

git clone https://gitee.com/david921518/mingw-edk2.git mingw-edk2

或直接下载 zip 打包文件

下载解压后,需要对项目的子模块初始化,在 edk2 根目录下执行命令

cd mingw-edk2git submodule update --init

此仓库为我在 Windows MSYS2 环境中的工作仓库,同步更新开发中遇到的各种问题,建议使用此仓库来练习。


三、编译测试模拟器

1. 配置项目

启动 VS2019 的开发者命令行窗口,进入 edk2 项目的根目录。

注意,此处我们使用 VS2019 的开发者命令行窗口而不是直接用 Windows 自带的命令行窗口,这样可以省去配置环境变量的步骤。当然,如果有兴趣了解 VS2019 为我们设置了怎样的环境变量,你也可以用 Windows 自带的命令行工具一步一步添加缺少的环境变量。

VS2019 的开发者命令行窗口

运行命令,配置 EDK2 的编译设置。此命令在每一次新开 VS2019 开发者命令行窗口都需要执行一次,在窗口未退出前执行一次后不需要再执行。

edk2setup.bat

设置 EDK2 开发环境

执行此命令后会在 Conf\ 目录中生成项目配置文件。

其中 target.txt 是我们重点关注的。

打开 target.txt 文件,确认以下设置

TARGET                = DEBUG
...
TARGET_ARCH           = X64
...
TOOL_CHAIN_TAG        = VS2019

2. 编译基本工具

在 edk2 的根目录下,执行命令

cd BaseToolsnmake

执行成功,显示如下:

编译基本工具

3. 编译测试模拟器

在 edk2 的根目录下,执行命令

build

执行成功,显示如下:

EmulatorX64

4. 运行测试模拟器

在运行模拟器前,需要将键盘切换到英文键盘,如下图:

在这里插入图片描述

在 edk2 的根目录下,执行命令

cd Build\EmulatorX64\DEBUG_VS2019\X64\

进入测试模拟器的生成目录

执行以下命令启动模拟器

WinHost.exe

模拟器开机画面

在 UEFI 的 shell> 环境中运行命令

fs0:

这样 UEFI shell 就切换到主机的 Build\EmulatorX64\DEBUG_VS2019\X64\ 目录下了。

在 UEFI shell 中运行命令

dir

可以列出当前目录的文件信息,如下图:

UEFI shell

最后运行命令

reset

退出模拟器。


总结

以上搭建了 EDK2 在 Windows 上使用 VS2019 进行开发的环境,并生成了第一个 EFI 模拟器程序。

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

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

相关文章

pdf加水印怎么加?3种添加水印方法分享

pdf加水印怎么加?PDF加水印不仅是为了保护文档内容,确保信息的安全性和完整性,更是一种有效的版权保护措施。通过添加水印,您可以在文档中嵌入公司名称、日期、编号等信息,以明确文档的归属权和使用限制。此外&#xf…

小而美:两步完成从源码到应用的极简交付

作者:花三(王俊) Serverless 应用引擎 SAE 是阿里云推出的一款零代码改造、极简易用、自适应弹性的容器化应用托管平台,面市以来为几万家企业客户提供服务,运行稳定,广受好评。 SAE 的出现解决了众多企业…

运行时异常和编译时异常的区别

Java中的异常被分为两大类:编译时异常和运行时异常。 都是RuntimeException类及其子类异常,如NullPointerException、IndexOutOfBoundsException。这些异常是不检查异常,运行时异常的特点是Java编译器不会检查它,程序中可以选择捕…

纯代码如何实现WordPress搜索包含评论内容?

WordPress自带的搜索默认情况下是不包含评论内容的,不过有些WordPress网站评论内容比较多,而且也比较有用,所以想要让用户在搜索时也能够同时搜索到评论内容,那么应该怎么做呢? 网络上很多教程都是推荐安装SearchWP插…

Spring Web MVC介绍及详细教程

目录 1.什么是Spring Web MVC? 1.1 MVC定义 1.2 Spring MVC与MVC关系 2.为什么要学习Spring MVC 3.项目创建 4.Spring MVC连接 4.1 RequestMapping 4.2 PostMapping和GetMapping 5.Spring MVC参数获取 5.1 获取单个参数 5.2 获取多个参数 5.3 获取普通对…

通用代码生成器应用场景一,项目前期

通用代码生成器是一种自动化编程软件,是一种先进的编译系统。它具有表级抽象。把系统抽象为域对象,枚举,弹性登录模块,复杂版面和图形报表。使用通用代码生成器完成项目前期,比直接使用对应的高级语言快的多&#xff0…

element Notification 消息过多需要折叠

Notification 消息过多太长 希望能折叠 如图下效果 element-plus 可以将dom 插入到具体的元素 结合css :nth-child 来控制样式达到效果 element dom 只能插入到body中 所以无法使用:nth-child 1.Notification需要消息提示时设置class let eleNum 0 // 弹窗的序号 function…

vue+canvas实现逐字手写效果

在pc端进行逐字手写的功能。用户可以在一个 inputCanvas 上书写单个字&#xff0c;然后在特定时间后将这个字添加到 outputCanvas 上&#xff0c;形成一个逐字的手写效果。用户还可以保存整幅图像或者撤销上一个添加的字。 <template><div class"container"…

小红书-社区搜索部 (NLP、CV算法实习生) 一面面经

&#x1f604; 整个流程按如下问题展开&#xff0c;用时60min左右面试官人挺好&#xff0c;前半部分问问题&#xff0c;后半部分coding一道题。 各位有什么问题可以直接评论区留言&#xff0c;24小时内必回信息&#xff0c;放心~ 文章目录 1、自我介绍2、介绍下项目&#xff…

淄博公司商标驳回复审条件及流程

商标是人工审查的&#xff0c;所以不同的人会有不同的想法和意见&#xff0c;导致同一案件的审查结果不同。特别是商标审查周期缩短到5个月&#xff0c;全国平均每个工作日有1万多个商标提交申请&#xff0c;而全国只有一个商标审查单位——国家商标局提交申请。这种情况下&…

Java版工程行业管理系统-提升工程项目的综合管理能力

工程项目管理涉及众多环节和角色&#xff0c;如何实现高效协同和信息共享是关键。本文将介绍一个采用先进技术框架的Java版工程项目管理系统&#xff0c;该系统支持前后端分离&#xff0c;功能全面&#xff0c;可满足不同角色的需求。从项目进度图表到施工地图&#xff0c;再到…

C++_vector操作使用

文章目录 &#x1f680;1.1 vector介绍&#x1f680;1.2 vector的初始化&#x1f680;1.3 vector的常用内置函数&#x1f680;1.4 vector的遍历 &#x1f680;1.1 vector介绍 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元…

MySQL主从复制(docker搭建)

文章目录 1.MySQL主从复制配置1.主服务器配置1.拉取mysql5.7的镜像2.启动一个主mysql&#xff0c;进行端口映射和目录挂载3.进入/mysql5.7/mysql-master/conf中创建my.cnf并写入主mysql配置1.进入目录2.执行命令写入配置 4.重启mysql容器&#xff0c;使配置生效5.进入主mysql&a…

2024年电工杯高校数学建模竞赛(B题) 建模解析| 大学生平衡膳食食谱的优化设计 |小鹿学长带队指引全代码文章与思路

我是鹿鹿学长&#xff0c;就读于上海交通大学&#xff0c;截至目前已经帮200人完成了建模与思路的构建的处理了&#xff5e; 本篇文章是鹿鹿学长经过深度思考&#xff0c;独辟蹊径&#xff0c;实现综合建模。独创复杂系统视角&#xff0c;帮助你解决电工杯的难关呀。 本题&…

面试八股之MySQL篇5——主从同步原理篇

&#x1f308;hello&#xff0c;你好鸭&#xff0c;我是Ethan&#xff0c;一名不断学习的码农&#xff0c;很高兴你能来阅读。 ✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。 &#x1f3c3;人生之义&#xff0c;在于追求&#xff0c;不在成败&#xff0c;勤通…

IP地址的风险画像及其应用

在现代互联网环境中&#xff0c;IP地址不仅是设备在网络中的唯一标识符&#xff0c;还是分析网络安全和风险管理的重要工具。IP地址的风险画像通过分析IP地址的行为和相关数据&#xff0c;揭示潜在的安全威胁&#xff0c;为企业和组织提供有效的风险管理方案。本文将探讨IP地址…

齐业成工程行业数字化预算费控方案:编制、执行、数据分析全过程闭环管理

工程建设企业具备项目周期长、业务复杂的特点&#xff0c;预算费控涉及内部管理、项目、客户、收支等&#xff0c;账目多、且难控。 在工程企业日常预算费控过程中存在着诸多挑战&#xff1a; • 数据核对难&#xff1a;涉及数据多&#xff0c;需多部门协同填写&#xff0c;需…

人工智能的阴暗面:犯罪分子如何利用 AI 进行欺诈

在当今数字化时代&#xff0c;人工智能&#xff08;AI&#xff09;正迅速成为推动各行各业生产力和创新的关键力量&#xff0c;而一些不法分子也开始探索如何将这些先进的工具用于他们自己的非法目的。从网络钓鱼到深度伪造&#xff0c;再到人肉搜索、越狱服务和身份验证系统的…

【动态维护树的直径】【HBCPC2023】I. Colorful Tree

题目 https://codeforces.com/gym/105139/problem/I 思路 其实相当于是分别求黑色点和白色点所构成的树的直径。 当两个连通块连在了一起&#xff0c;假设它们的直径是 ( u 1 , v 1 ) &#xff0c; ( u 2 , v 2 ) (u_1,v_1)&#xff0c;(u_2,v_2) (u1​,v1​)&#xff0c;(u…

一个开源的工具类轮子是怎么造出来的

心路历程 为什么要做 在22年9月的某一天&#xff0c;在公司开需求评审时&#xff0c;接到了一个给PDF、图片添加水印的需求。做为一个刚工作的CURD程序员&#xff0c;在遇到这些问题时&#xff0c;第一反应是去github上找找有没有类似的开源框架。但是&#xff0c;出乎我意料…