【调试笔记-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 edk2

git 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-edk2

git 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 BaseTools

nmake

执行成功,显示如下:

编译基本工具

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 模拟器程序。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一图看懂 | 蓝卓医化行业解决方案

随着“创新药”首次出现在政府工作报告中,医药工业各个细分赛道都迎来了关键突破期,其中化学药品制剂作为所有药品中数量、品种最多的类别,也是居民日常生活中使用最广泛的类别,推动医药化工行业数字化能力,对于发展新…

uniapp宠物咖门店连锁会员制宠物寄养系统 微信小程序-

随着人们生活水平的提高,越来越多的人喜欢给自己或是家里的老人小孩养一只可爱的宠物,满足宠物的需要也就成为了许多爱宠人士每天苦恼的事情,去哪可以选购到健康合格的宠物食品?去哪能给宠物看病?去哪能给脏了的宠物美…

MongoDB基础入门到深入(七)建模、调优

文章目录 系列文章索引十一、MongoDB开发规范十二、MongoDB调优1、三大导致MongoDB性能不佳的原因2、影响MongoDB性能的因素3、MongoDB性能监控工具(1)mongostat(2)mongotop(3)Profiler模块(4&a…

气膜体育场馆的迅速发展与应用前景—轻空间

近年来,随着国家大力提倡体育运动和全民健身,国内体育场馆的数量和规模呈现出迅速扩张的趋势。气膜场馆凭借其低成本、快速建造和环保绿色的优势,成为中国体育场馆发展的重要组成部分。据《中国体育气膜白皮书》统计,截至2022年&a…

2024上海国际化工自动化仪器仪表展览会

2024上海国际化工自动化仪器仪表展览会 2024 Shanghai International Chemical Automation Instrument Exhibition 时间:2024年12月11-13日 地点:上海新国际博览中心 详询主办方陆先生 I38(前三位) I82I(中间四位…

STM32_HAL_RTC时钟

1. RTC 时钟简介 STM32F407 的实时时钟(RTC)是一个独立的定时器。 STM32 的 RTC 模块拥有一组连续计数的计数器,在相对应的软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统的当前时间和日期。 RTC 模块和时钟配…

C++进阶之路:何为运算符重载、赋值运算符重载与前后置++重载(类与对象_中篇)

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

【三剑客和正则表达式】

文章目录 学习目标一、什么是三剑客1.三剑客grep2.三剑客sed3.三剑客awk4.正则过滤例子15.正则过滤例子2 总结 学习目标 1.学会使用 grep 2.学会使用 sed 3.学会使用 awk 4.学会使用正则表达式一、什么是三剑客 正则三剑客:grep sed awk 1.三剑客grep # 擅长过滤…

AI整体架构设计5:CN+AI的三国杀

本文最后的图展示了气势磅礴的AICN(云原生)的技术栈,潜藏着无限的杀机。还在云原生的时候,研发和运维一直围绕着Devops进行两国杀。CNAI的时代,数据科学家加入了战局,彻底变成三国杀。边界的不断互相渗透&a…

【设计模式】JAVA Design Patterns——Combinator(功能模式)

🔍目的 功能模式代表了一种以组合功能为中心的图书馆组织风格。 简单地说,有一些类型 T,一些用于构造类型 T 的“原始”值的函数,以及一些可以以各种方式组合类型 T 的值以构建更复杂的类型 T 值的“组合器” 🔍解释 真…

ubuntu20.04 10分钟搭建无延迟大疆无人机多线程流媒体服务器

1.使用效果 无人机画面 2.服务器视频端口 3.使用教程 3.1.下载ubuntu对应软件包:系统要求ubuntu16以上 3.2修改端口(config.xml文件) 3.3启动服务 目录下输入:终端启动:./smart_rtmpd 后台启动:nohup ./…

Pip,whl,源码编译安装Python库

pip安装 pip 是 Python 包管理工具,用于安装和管理 Python 包。pip 是 Python 开发中不可或缺的工具,能够帮助开发者轻松地管理项目所需的各种库和依赖。无论是安装新包、升级现有包还是卸载不需要的包,pip 都提供了简单而强大的命令来完成这…

92.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-利用哈希表实现快速读取文本内容

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

k8s dashboard安装

本案例,k8s版本为v1.22.17,所以安装v2.7.0版本的dashboard 1、下载dashboard的yaml文件 curl -O https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 2、修改recommended.yaml文件 修改定义的Service&…

java版本spring cloud-spring boot高效知识付费SaaS平台的架构与功能模块设计

知识付费平台是一种快速发展的在线教育模式,它以满足用户需求为核心,提供便捷高效的学习渠道。该平台汇聚了各类专业知识,覆盖职业技能、生活兴趣和人文社科等多个领域,满足不同用户的学习需求。同时,平台还提供视频播…

通过 PW6606 快充电压诱骗芯片,了解 USB-A 与 USB-C 快充协议

充电器一般分两种: 1, A 口充电器,就是我们常见的 USB 口,如下图,这种通用快充协议叫: QC3.0,QC2.0 快充,是属于快充刚开始的充电协议,支持 5V,9V,12V 和 20V 电压输出充电器&#x…

聚观早报 | 拼多多第一季度营收;苹果2024款彩虹表带上市

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 5月24日消息 拼多多第一季度营收 苹果2024款彩虹表带上市 小米汽车智驾将提速 iPhone 16 Pro Max将用最大屏幕 …

20240520解决在Ubuntu20.04下编译RK3588的Android12的SDK出现C2_GIT_BUILD_VERSION未定义的问题

20240520解决在Ubuntu20.04下编译RK3588的Android12的SDK出现C2_GIT_BUILD_VERSION未定义的问题 2024/5/20 20:19 缘起:通过./repo/repo/repo sync -l得到的SDK正常,但是解压缩之后的SDK却出错了! 通过grep很容易发现有三个地方有&#xff0c…

Jenkins 构建 Maven 项目:项目和服务器在一起的情况

bash.sh内容 #!/bin/bash#删除历史数据 rm -rf ruoyi-admin.jar# appname$1 appnamevideo.xxxxx.com #获取传入的参数 echo "arg:$appname"#获取正在运行的jar包pid # pidps -ef | grep $1 | grep java -jar | awk {printf $2} pidps -ef | grep $appname | grep ja…