UEFI基础实践1:环境搭建

发布时间:2026/6/28 6:37:43
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环境下搭建过程待续