UEFI基础实践1:环境搭建
目录1、Windows环境下搭建UEFI开发环境1、安装开发工具2、下载EDK2开发包和其他必要开发包3、开发环境配置3.1、更新submodule3.2、编译BaseTool3.3、设置开发工具路径3.4、检查edk2/Conf配置文件4、编译UEFI模拟器和UEFI程序4.1、编译UEFI模拟器4.2、编译UEFI程序4.3、使用模拟器运行UEFI程序5、使用虚拟机搭建调试环境QEMU5.1、安装qemu5.2、创建VHD虚拟硬盘5.3、编译OVMF镜5.4、Qemu启动OVMF镜像参考文档在学习罗冰大佬的《UEFI编程实践》记录总结一下自己搭建环境的过程1、Windows环境下搭建UEFI开发环境1、安装开发工具gccPython 我选择EDKII分支比较新选择的Python3.14IASL Download for ACPI Component Architecture (ACPICA)NASM NASMVisual Studio安装方法######访问官网下载编译好的工具 iasl.exe、nasm.exe解压后把 iasl.exe 放到一个目录并将该目录加入环境变量的 PATH中(注 PATH只需要添加程序所在的文件夹目录, 不要将具体的.exe可执行文件名写进去)。查看安装结果iasl -vnasm -v#######2、下载EDK2开发包和其他必要开发包github地址EDK2 https://github.com/tianocore/edk2/tree/stable/202508#EDK2-LIBChttps://github.com/tianocore/edk2-libc#git clone https://github.com/tianocore/edk2.git git clone https://github.com/tianocore/edk2-libc.git3、开发环境配置3.1、更新submodule# 初次操作 后续更新不用init参数 git submodule update --init # 多线程下载 git submodule update --init --recursive -j8下载失败需要搭梯子或者从gitee仓下载找到edk2下的文件.gitmodules 里面有待下载的模块可以修改链接为gitee仓库的将github仓库的内容转到gitee仓即可3.2、编译BaseTool使用VS x86 Native Tool Command Prompt工具需要安装VS打开方式 在Windows搜索框搜索x86 Native在工具的命令行输入编译命令cd edk2 edksetup.bat Rebuild3.3、设置开发工具路径新建一个脚本文件mybuild.bat放到了edk2同级目录设置开发路径 内容如下set WORKSPACE%CD% set EDK_TOOLS_PATH%CD%\edk2\BaseTools set CONF_PATH%CD%\edk2\Conf set PACKAGES_PATH%CD%\edk2;%CD%\edk2-libc3.4、检查edk2/Conf配置文件target.txt 编译时默认参数ACTIVE_PLATFORM EmulatorPkg/EmulatorPkg.dsc TARGET DEBUG # 编译的目标类型 TARGET_ARCH IA32 # 程序运行的目标架构 TOOL_CHAIN_CONF Conf/tools_def.txt # 编译链工具的配置文件位置 TOOL_CHAIN_TAG VS2022 # 编译工具链 BUILD_RULE_CONF Conf/build_rule.txt # 编译规则的文件也可在构建时添加构建配置参数4、编译UEFI模拟器和UEFI程序在VS x86 Native Tool Command Prompt命令行里面执行命令4.1、编译UEFI模拟器EmulatorPkg;# 设置环境变量cd E:\MyProgram\UEFImybuild.batedk2\edksetup.bat# 编译UEFI模拟器# // x32(示例)build -p edk2\EmulatorPkg\EmulatorPkg.dsc -t VS2019 -a IA32# // x64build -p edk2\EmulatorPkg\EmulatorPkg.dsc -t VS2019 -a X64# 产物cd Build\EmulatorIA32\DEBUG_VS2019\IA32WinHost.exe4.2、编译UEFI程序// 配置环境 mybuild.bat edk2\edksetup.bat // 构建 // X32 build -p edk2-libc\AppPkg\AppPkg.dsc -t VS2019 -a IA32 // X64 build -p edk2-libc\AppPkg\AppPkg.dsc -t VS2019 -a X64 ## 编译包下的程序 // -p 指定编译的包 // -m 指定编译的模块 // -a 程序运行的目标架构 // -t 编译的工具链 // x32 build -p edk2\MdeModulePkg\MdeModulePkg.dsc -m edk2\MdeModulePkg\Application\HelloWorld\HelloWorld.inf -a IA32 -t VS2019 // x64 build -p edk2\MdeModulePkg\MdeModulePkg.dsc -m edk2\MdeModulePkg\Application\HelloWorld\HelloWorld.inf -a X64 -t VS2019 // 输出路径E:\MyProgram\UEFI\Build\MdeModule\DEBUG_VS2019\IA32\MdeModulePkg\Application\HelloWorld\HelloWorld\OUTPUT\4.3、使用模拟器运行UEFI程序使用模拟器运行UEFI程序cd Build\EmulatorIA32\DEBUG_VS2019\IA32WinHost.exe # 进入UEFI shell执行模拟器# FS0对应的主机目录是 Build\EmulatorIA32\DEBUG_VS2019\IA32fs0: # 进入fs0HelloWorld.efi # 执行HelloWorld.efi至此已经进入了UEFI的shell, 运行UEFI程序Dxe了5、使用虚拟机搭建调试环境QEMU先通过EDKII编译出OVMF的固件然后用QEMU加载进行调试在测试的目录下放入vhd(虚拟硬盘文件 Ovmf.fd(ovmf固件镜像 efi文件 将程序efi二进制放入VHD然后用qemu进行加载5.1、安装qemu直径下载安装即可 下载QEMU for Windows – Installers (64 bit)QEMUQuick Emulator是由法国程序员 Fabrice Bellard 开发的一款开源处理器模拟和虚拟化软件。它通过动态二进制翻译技术能够模拟多种处理器架构让用户在一台物理主机上运行不同架构的操作系统或程序被广泛应用于云计算、嵌入式开发和底层调试等领域。5.2、创建VHD虚拟硬盘Qemu支持多种虚拟硬盘这里创建的是VHD格式的用于后续放待调试的UEFI程序使用windows磁盘管理工具创建VHD文件方法如下开始菜单右键》 计算机管理存储 》 磁盘管理 》 操作创建VHD》 创建一个.vhd文件200M的磁盘文件选择vhd的磁盘初始化磁盘选择GPT格式分卷后格式化为FAT32格式产生的vhd文件右键》装载可以安装一个文件 新加卷然后可放入efi文件放入文件后右键 新加卷可以再次弹出5.3、编译OVMF镜# 在x86 Native命令行里面执编译 cd E:\MyProgram\UEFI mybuild.bat edk2\edksetup.bat # 编译32位OVMF镜像 build -a IA32 -p edk2\OvmfPkg\OvmfPkgIa32X64.dsc -b NOOPT -D SOURCE_DEBUG_ENABLE # 编译64位OVMF镜像 build -a X64 -p edk2\OvmfPkg\OvmfPkgX64.dsc -b NOOPT -D SOURCE_DEBUG_ENABLE // 不走硬件串口 build -a X64 -p edk2\OvmfPkg\OvmfPkgX64.dsc -b NOOPT -D DEBUG_ON_SERIAL_PORT -D SOURCE_DEBUG_ENABLE ## -a 指定目标的架构 IA32、X64、AARCH64 -b 指定目标类型DEBUG、Release、NOOPT无优化 -p 指定平台或者要编译的包 通过dsc文件位置来制定 -D 宏 ## 产物位置 Build\OvmfX64\NOOPT_VS2022\FV\OVMF.fd5.4、Qemu启动OVMF镜像# qemu 启动 // 在测试目录中执行 qemu-system-x86_64.exe -L . -bios OVMF.fd -M pc -m 256 -cpu qemu64 -boot orderdc -serial mon:stdio -hdd lhdbg.vhd# -L .指定 QEMU 查找 BIOS、VGA BIOS 等固件文件的目录。. 代表当前工作目录。# -bios OVMF.fd指定使用 OVMF.fd 作为虚拟机的 UEFI 固件从而替代默认的 SeaBIOS。# -M pc: 使用兼容性最好的 pc (i440FX) 虚拟主板。这会绕过所有与 q35 和 SMM 相关的复杂问题。# -cpu qemu64: 显式指定一个基础的 64 位 CPU 模型确保环境一致性。# -boot orderdc显式指定了优先从光盘 (d) 启动其次从硬盘 (c) 启动。# -hdd lhdbg.vhd将当前目录下的 lhdbg.vhd 文件作为虚拟机的第三块 IDE 硬盘-hda 到 -hdd 分别对应 IDE 接口的 0~3 号盘。# -serial mon:stdio将虚拟机的串口输出重定向到宿主机的标准输入输出控制台。# -vga std指定使用标准的 VGA 显卡设备兼容性最好。效果如下Qemu的setup界面执行UEFI程序UEFI启动日志在powershell中输出参考文档参考1《UEFI编程实践》 罗冰 著参考2UEFI 基础教程 一 - 基于QEMU搭建UEFI开发环境(win/linux)_qemu 怎么跑uefi-CSDN博客Linux环境下搭建过程待续

相关新闻

Cocos Creator可玩广告打包终极指南:3步生成单HTML文件

Cocos Creator可玩广告打包终极指南:3步生成单HTML文件

Cocos Creator可玩广告打包终极指南:3步生成单HTML文件 【免费下载链接】cocos-to-playable-ad 将 cocos creator 构建出来的 web-mobile 项目打包为 playable-ad 项目,即单 html 文件。 项目地址: https://gitcode.com/gh_mirrors/co/cocos-to-playab…

2026/6/28 6:38:27阅读更多 →
嵌入式高手都在偷偷用的“第6条”:两个符号 # 和 ## ,让编译器帮你拼出寄存器名和变量名

嵌入式高手都在偷偷用的“第6条”:两个符号 # 和 ## ,让编译器帮你拼出寄存器名和变量名

该文章同步至OneChan 你有没有经历过:需要访问一串编号连续的寄存器,比如 TIM2->CCR1、TIM2->CCR2……明知道名字规律明显,却只能一个一个手写,改一处就得全部重敲一遍? 这是资深工程师压箱底的编程技巧系列第六…

2026/6/28 6:38:27阅读更多 →
基于物联网设计的土壤多参数智能监测系统_427

基于物联网设计的土壤多参数智能监测系统_427

文章目录 一、前言 1.1 项目介绍 【1】项目开发背景 【2】设计实现的功能 【3】项目硬件模块组成 【4】设计意义 【5】国内外研究现状 国内研究现状 国外研究现状 技术发展趋势比较 【6】摘要 1.2 设计思路 1.3 系统功能总结 1.4 开发工具的选择 1.5 参考文献 1.6 系统框架图 1…

2026/6/28 6:38:27阅读更多 →
护照公证需要什么资料?护照公证如何办理?

护照公证需要什么资料?护照公证如何办理?

很多人准备留学申请、海外移民、境外商务往来时,常会被要求提供护照公证,却不清楚它到底是什么、该准备哪些材料,尤其是身处异地不方便回户籍地、或是人在境外的朋友,跑线下公证处来回折腾,很容易错过材料提交的截止日…

2026/6/28 8:23:35阅读更多 →
智融仓配,绿动未来 | 中扬立库亮相长沙第二十一届仓储配送大会

智融仓配,绿动未来 | 中扬立库亮相长沙第二十一届仓储配送大会

6月24日-26日,由中国仓储与配送协会主办的第二十一届中国仓储配送大会暨第十三届仓配绿色化推进会在湖南长沙圆满落幕。本届大会是国家级仓配盛会首次落地长沙,也是“十五五”开局、中国仓协换届后的首场全国行业峰会,以“智融仓配 绿动未来”…

2026/6/28 8:23:35阅读更多 →
网络工程师含金量评估体系(CCIE/HCIE/华为认证ROI深度对比)

网络工程师含金量评估体系(CCIE/HCIE/华为认证ROI深度对比)

更多请点击: https://kaifayun.com 第一章:网络工程师含金量评估体系(CCIE/HCIE/华为认证ROI深度对比) 网络工程师职业发展路径中,顶级厂商认证是能力背书与市场溢价的核心杠杆。CCIE、HCIE及华为认证(如H…

2026/6/28 8:23:35阅读更多 →
Anime4K完整教程:免费实时动漫高清放大终极指南

Anime4K完整教程:免费实时动漫高清放大终极指南

Anime4K完整教程:免费实时动漫高清放大终极指南 【免费下载链接】Anime4K A High-Quality Real Time Upscaler for Anime Video 项目地址: https://gitcode.com/gh_mirrors/an/Anime4K 你是否曾经观看老旧的动漫作品时,因为画质模糊、细节丢失而感…

2026/6/28 8:23:35阅读更多 →
Anime4K:让老旧动漫重获新生的实时高清放大神器

Anime4K:让老旧动漫重获新生的实时高清放大神器

Anime4K:让老旧动漫重获新生的实时高清放大神器 【免费下载链接】Anime4K A High-Quality Real Time Upscaler for Anime Video 项目地址: https://gitcode.com/gh_mirrors/an/Anime4K 你是否曾为低分辨率的老旧动漫感到遗憾?是否渴望在普通设备上…

2026/6/28 8:23:35阅读更多 →
解锁三星电视的隐藏潜能:重塑客厅娱乐体验

解锁三星电视的隐藏潜能:重塑客厅娱乐体验

解锁三星电视的隐藏潜能:重塑客厅娱乐体验 【免费下载链接】moonlight-chrome-tizen A WASM port of Moonlight for Samsung Smart TVs running Tizen OS (5.5 and up) 项目地址: https://gitcode.com/gh_mirrors/mo/moonlight-chrome-tizen 想象一下这样的场…

2026/6/28 8:18:34阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/28 0:08:01阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/28 0:08:01阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/28 0:08:01阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/28 0:08:01阅读更多 →