【调试笔记-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 的出现解决了众多企业…

Python库之lxml的简介、安装、使用方法详细攻略

Python库之lxml的简介、安装、使用方法详细攻略 简介 lxml是一个用于处理XML和HTML文档的Python库,它提供了简单易用的API来解析和生成这些文档。lxml以其性能和易用性而受到广泛欢迎,特别适合于需要处理大量数据或需要高性能解析的场景。 安装 安装…

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

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

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

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

RK3588 Android13 预安装自己的apk应用及把这个应用设置为默认桌面

1、cp -rf device/rockchip/rk3588/rk3588m_s/preinstall device/rockchip/rk3588/rk3588_t/ 2、给device/rockchip/rk3588/rk3588_t/preinstall/的存放app的文件夹改名为app-imms2,在app-imms2放入app-imms2.apk,编译安卓源码即可, 3、编译完会在out/…

android sp指针的cast

sp<Base> b; sp<Derived> d; b static_cast<Base*>(d.get()); 对于c原生的智能指针&#xff0c;有static_pointer_cast之类的操作方法。可以看cppreference。

Spring Web MVC介绍及详细教程

目录 1.什么是Spring Web MVC&#xff1f; 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 获取普通对…

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

通用代码生成器是一种自动化编程软件&#xff0c;是一种先进的编译系统。它具有表级抽象。把系统抽象为域对象&#xff0c;枚举&#xff0c;弹性登录模块&#xff0c;复杂版面和图形报表。使用通用代码生成器完成项目前期&#xff0c;比直接使用对应的高级语言快的多&#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;如果不够仔细&#xff0c;考虑不够周全的话&#xff0c;很容易犯错的&#xff0c;金额这个东西一但错了是很严重的&#xff0c;因此总结一些常见的错误&#xff1a; 1.最重要的&#xff0c;涉及到计算的参数一定要…

关于做事方式的小讨论

大家好&#xff0c;我是阿赵。   之前五一劳动节期间&#xff0c;看到了这么一个新闻&#xff1a;某动物园内部收费项目五一期间涨价&#xff0c;喂长颈鹿的树叶&#xff0c;一枝需要30元。然后新闻下面的评论就炸锅了&#xff0c;纷纷的指责动物园太黑心&#xff0c;一枝树叶…

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

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

从入门到精通:掌握Scrapy框架的关键技巧

在当今信息爆炸的时代&#xff0c;获取并利用网络数据成为了许多行业的核心竞争力之一。而作为一名数据分析师、网络研究者或者是信息工作者&#xff0c;要想获取网络上的大量数据&#xff0c;离不开网络爬虫工具的帮助。而Scrapy框架作为Python语言中最为强大的网络爬虫框架之…

ubuntu当前登录用户IP验证

设置一个白名单列表检查到登录用户IP信息不在白名单&#xff0c;发送信息到指定邮箱 #!/bin/bash# 定义常用IP地址列表文件 KNOWN_IP_FILE"/path/to/known_ips.txt" # 替换为实际路径# 定义邮件接收者 EMAIL_TO"test163.com"# 定义日志文件 LOG_FILE&quo…

2024-5-23

今日安排&#xff1a; 继续审计 nf_tables 源码 && iptables 相关学习♥♥♥♥♥复现 CTF 相关题目♥♥♥♥mount 的使用&#xff0c;学习 namespace (昨昨昨昨昨昨昨昨昨昨昨昨昨天残留的任务)&#xff08;&#xff1a;看我能搁到什么时候♥♥♥静不下心学习新知识就…

qmt量化交易策略小白学习笔记第11期【qmt编程之获取股票订单流数据--原生Python】

qmt编程之获取股票订单流数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;需免费开通量化回测与咨询实盘权限&#xff0c;可以和博主联系&#xff01; 获取股票订单流…

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

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