自己编译EDK2 ARM版固件并用qemu安装Windows On ARM系统
在 Windows 上交叉编译 AARCH64 UEFI 固件ArmVirtQemu本文档记录了在 Windows 10/11 上使用 EDK2 源码和 GCC 交叉编译工具链构建支持 Secure Boot 与 TPM 2.0 的 AARCH64 UEFI 固件.fd的完整流程并使用 QEMU 验证固件启动。1. 环境要求组件版本说明EDK2 源码edk2 2508Full工作目录E:\code\edk22508FullARM GCC 交叉工具链arm-gnu-toolchain-15.3.rel1-mingw-w64-x86_64-aarch64-none-elf安装于C:\Tools\Host GCC (MinGW-W64)13.2.0 (Strawberry Perl 自带)用于编译 BaseTools C 工具GNU Make4.4.1 (Strawberry Perl 自带gmake.exe)BaseTools 编译用Python3.10.9EDK2 build 系统依赖NASM2.x (Strawberry Perl 自带)汇编编译用iasl (ACPI 编译器)20250807从 ACPICA GitHub Releases 下载QEMUsystem-aarch64用于固件启动验证1.1 工具链路径一览C:\Tools\arm-gnu-toolchain-15.3.rel1-mingw-w64-x86_64-aarch64-none-elf\bin\ ├── aarch64-none-elf-gcc.exe # 交叉编译器 ├── aarch64-none-elf-gcc-ar.exe # 静态库归档 ├── aarch64-none-elf-objcopy.exe # 目标文件转换 └── aarch64-none-elf-ld.exe # 链接器 C:\Strawberry\c\bin\ ├── gcc.exe # Host GCC (编译 BaseTools) ├── gmake.exe # GNU Make └── nasm.exe # NASM 汇编器 C:\Program Files\Python310\python.exe # Python 3.10 C:\Program Files\qemu\ └── qemu-system-aarch64.exe # QEMU (验证用)1.2 获取 iasl从 ACPICA GitHub Releases 下载 Windows 预编译版本# 下载 iaslInvoke-WebRequest-Urihttps://github.com/user-attachments/files/21674608/iasl-win-20250807.zip-OutFileiasl.zip# 解压Expand-Archive-Pathiasl.zip-DestinationPathiasl_temp# 复制到 BaseTools\Bin\Win32Copy-Itemiasl_temp\iasl.exeE:\code\edk22508Full\BaseTools\Bin\Win32\iasl.exe2. 编译 EDK2 BaseToolsBaseTools 是 EDK2 的构建工具集C 工具 Python 脚本需要先编译。2.1 初始化配置文件运行edksetup.bat生成Conf\target.txt、Conf\tools_def.txt和Conf\build_rule.txtcd /d E:\code\edk22508Full call edksetup.bat如果edksetup.bat因环境问题报错可手动从BaseTools\Conf\目录复制.template文件到Conf\目录并去掉.template后缀。2.2 编译 BaseTools C 工具使用 Strawberry Perl 的 GNU Make 和 GCC 编译cd /d E:\code\edk22508Full\BaseTools\Source\C set HOST_ARCHX64 set CCgcc set CXXg set PYTHON_COMMANDpy -3 set PATHC:\Strawberry\c\bin;%PATH% C:\Strawberry\c\bin\gmake.exe -j4编译成功后在BaseTools\Source\C\bin\下生成 12 个.exe文件BrotliCompress.exe DevicePath.exe EfiRom.exe GenCrc32.exe GenFfs.exe GenFv.exe GenFw.exe GenSec.exe LzmaCompress.exe TianoCompress.exe VfrCompile.exe VolInfo.exe2.3 复制工具到 Bin\Win32mkdir E:\code\edk22508Full\BaseTools\Bin\Win32 2nul copy E:\code\edk22508Full\BaseTools\Source\C\bin\*.exe ^ E:\code\edk22508Full\BaseTools\Bin\Win32\2.4 创建 GNU make 副本EDK2 的 GCC 工具链通过GCC_HOST_BIN环境变量查找make。Strawberry Perl 提供的是gmake.exe需要复制一份为make.execopy C:\Strawberry\c\bin\gmake.exe C:\Strawberry\c\bin\make.exe3. 配置工具链3.1 关键环境变量环境变量值说明GCC5_AARCH64_PREFIXC:\Tools\arm-gnu-toolchain-...\bin\aarch64-none-elf-ARM 交叉工具链前缀GCC_HOST_BINC:\Strawberry\c\bin\Host GNU make 路径NASM_PREFIXC:\Strawberry\c\bin\NASM 前缀PYTHON_COMMANDpy -3Python 命令EDK_TOOLS_BIN...\BaseTools\Bin\Win32BaseTools 二进制路径3.2 tools_def.txt 中的 GCC5 工具链EDK2 的Conf\tools_def.txt已内置 GCC5 工具链定义关键行# 工具链前缀通过环境变量设置 DEFINE GCC_HOST_PREFIX ENV(GCC_HOST_BIN) # AARCH64 交叉编译器路径 *_GCC5_AARCH64_CC_PATH ENV(GCC5_AARCH64_PREFIX)gcc *_GCC5_AARCH64_SLINK_PATH ENV(GCC5_AARCH64_PREFIX)gcc-ar *_GCC5_AARCH64_DLINK_PATH ENV(GCC5_AARCH64_PREFIX)gcc *_GCC5_AARCH64_ASM_PATH ENV(GCC5_AARCH64_PREFIX)gcc *_GCC5_AARCH64_PP_PATH ENV(GCC5_AARCH64_PREFIX)gcc *_GCC5_AARCH64_RC_PATH ENV(GCC5_AARCH64_PREFIX)objcopy # Host make 路径 *_GCC5_*_MAKE_PATH DEF(GCC_HOST_PREFIX)make4. 构建固件4.1 构建脚本创建build_armvirt.batecho off setlocal set WORKSPACEE:\code\edk22508Full set EDK_TOOLS_PATHE:\code\edk22508Full\BaseTools set BASE_TOOLS_PATHE:\code\edk22508Full\BaseTools set EDK_TOOLS_BINE:\code\edk22508Full\BaseTools\Bin\Win32 set CONF_PATHE:\code\edk22508Full\Conf set PYTHON_COMMANDpy -3 set PYTHONPATHE:\code\edk22508Full\BaseTools\Source\Python set GCC5_AARCH64_PREFIXC:\Tools\arm-gnu-toolchain-15.3.rel1-mingw-w64-x86_64-aarch64-none-elf\bin\aarch64-none-elf- set GCC_HOST_BINC:\Strawberry\c\bin\ set NASM_PREFIXC:\Strawberry\c\bin\ set PATHE:\code\edk22508Full\BaseTools\Bin\Win32;E:\code\edk22508Full\BaseTools\BinWrappers\WindowsLike;C:\Strawberry\c\bin;C:\Program Files\Python310;C:\Program Files\qemu;%PATH% cd /d E:\code\edk22508Full build -a AARCH64 -t GCC5 -b RELEASE -p ArmVirtPkg/ArmVirtQemu.dsc ^ -D SECURE_BOOT_ENABLETRUE ^ -D TPM2_ENABLETRUE ^ -D TPM2_CONFIG_ENABLETRUE ^ %*4.2 参数说明参数值说明-aAARCH64目标架构-tGCC5工具链标签-bRELEASE构建类型DEBUG / RELEASE / NOOPT-pArmVirtPkg/ArmVirtQemu.dsc平台描述文件-D SECURE_BOOT_ENABLETRUE—启用 Secure Boot镜像签名验证-D TPM2_ENABLETRUE—启用 TPM 2.0 支持-D TPM2_CONFIG_ENABLETRUE—启用 TPM 2.0 配置界面4.3 执行构建cd /d E:\code\edk22508Full build_armvirt.bat构建过程约 3~15 分钟取决于 CPU 核心数输出如下关键信息表示成功Fd File Name:QEMU_EFI (...\Build\ArmVirtQemu-AARCH64\RELEASE_GCC5\FV\QEMU_EFI.fd) Fd File Name:QEMU_VARS (...\Build\ArmVirtQemu-AARCH64\RELEASE_GCC5\FV\QEMU_VARS.fd) FV Space Information FVMAIN [99%Full] 7131712 total, 7131656 used, 56 free FVMAIN_COMPACT [38%Full] 3141632 total, 1199736 used, 1941896 free - Done -4.4 构建产物文件大小说明QEMU_EFI.fd3 MB主固件文件包含 SEC/PEI/DXE/BDS 全部模块QEMU_VARS.fd768 KBNVRAM 变量存储Secure Boot 密钥等路径Build\ArmVirtQemu-AARCH64\RELEASE_GCC5\FV\5. Secure Boot 与 TPM 2.0 模块说明5.1 Secure Boot 相关模块启用SECURE_BOOT_ENABLETRUE后以下模块被编入固件模块阶段功能DxeImageVerificationLibDXEUEFI 镜像签名验证SecureBootConfigDxeDXESecure Boot 配置界面EnrollDefaultKeysDXE默认密钥注册VariableRuntimeDxeDXE认证变量服务AuthVar相关 PCDgEfiSecurityPkgTokenSpaceGuid.PcdOptionRomImageVerificationPolicy|0x04 gEfiSecurityPkgTokenSpaceGuid.PcdFixedMediaImageVerificationPolicy|0x04 gEfiSecurityPkgTokenSpaceGuid.PcdRemovableMediaImageVerificationPolicy|0x045.2 TPM 2.0 相关模块启用TPM2_ENABLETRUE后以下模块被编入固件模块阶段功能Tcg2ConfigPeiPEITPM 2.0 早期配置Tcg2PeiPEIPEI 阶段 TPM 度量Tcg2DxeDXEDXE 阶段 TCG2 协议Tcg2ConfigDxeDXETPM 2.0 配置界面DxeTpm2MeasureBootLibDXE启动度量需同时启用 Secure BootTpm2CommandLib—TPM 2.0 命令库Tpm2DeviceLibDTpm—dTPM MMIO 设备访问库注意TPM 2.0 模块已编入.fd但实际运行需要 QEMU 提供 TPM 设备模拟tpm-tis-device前端 swtpm后端。Windows 版 QEMU 不支持 TPM 后端需在 Linux 环境验证。6. QEMU 验证固件启动6.1 准备 pflash 镜像QEMUvirt机器的 pflash 设备要求 64 MB 镜像需要将 3 MB 的QEMU_EFI.fd填充到 64 MB# 填充 QEMU_EFI.fd 到 64MB$content[System.IO.File]::ReadAllBytes(...\FV\QEMU_EFI.fd)$paddedNew-Objectbyte[]67108864[Array]::Copy($content,$padded,$content.Length)[System.IO.File]::WriteAllBytes(...\FV\QEMU_EFI_64M.fd,$padded)# 填充 QEMU_VARS.fd 到 64MB可写副本$content[System.IO.File]::ReadAllBytes(...\FV\QEMU_VARS.fd)$paddedNew-Objectbyte[]67108864[Array]::Copy($content,$padded,$content.Length)[System.IO.File]::WriteAllBytes(...\FV\QEMU_VARS_64M.fd,$padded)6.2 启动 QEMUqemu-system-aarch64.exe ^ -machine virt ^ -cpu cortex-a57 ^ -m 512 ^ -nographic ^ -drive ifpflash,formatraw,fileQEMU_EFI_64M.fd,readonlyon ^ -drive ifpflash,formatraw,fileQEMU_VARS_64M.fd ^ -net none6.3 预期输出固件正常启动时串口输出如下UEFI firmware (version built at 12:13:16 on Jul 27 2026) BdsDxe: No bootable option or device was found. BdsDxe: Press any key to enter the Boot Manager Menu.按任意键后进入 Boot Manager 菜单Please select boot device: EFI Firmware Setup ^ and v to move selection ENTER to select boot device ESC to exit这表明固件从 SEC → PEI → DXE → BDS 全流程正常执行。7. 常见问题Q1:make tbuild失败提示 “Unable to open makefile”原因系统 PATH 中的 Embarcaderomake.exe优先于 GNU make。解决复制 Strawberry Perl 的gmake.exe为make.exe并确保GCC_HOST_BIN指向C:\Strawberry\c\bin\。Q2:iasl未找到原因RamDiskDxe 等模块需要 iasl 编译 ACPI 表。解决从 ACPICA GitHub Releases 下载iasl-win-*.zip解压后将iasl.exe放入BaseTools\Bin\Win32\。Q3:HOST_ARCH is not defined原因BaseTools 的header.makefile无法自动检测 host 架构。解决编译时显式传入set HOST_ARCHX64。Q4: Pccts/antlr 编译失败ccnot found原因Pccts 的 makefile 默认使用cc而非gcc。解决编译时设置set CCgcc和set CXXg。Q5: QEMU 报错 “requires 67108864 bytes, pflash0 provides 3145728 bytes”原因QEMUvirt机器的 pflash 设备要求 64 MB 镜像。解决用零字节将.fd文件填充到 64 MB见第 6.1 节。Q6: QEMU 不支持 TPM-tpmdev: invalid option原因QEMU 在 Windows 平台上不支持 TPM 后端meson.build中限制host_os ! windows。解决固件端 TPM 2.0 模块已编入.fd。如需验证 TPM 功能需在 Linux 环境使用 QEMU swtpm。8. 目录结构参考E:\code\edk22508Full\ ├── ArmVirtPkg\ # ArmVirt 平台包 │ ├── ArmVirtQemu.dsc # 平台描述文件构建入口 │ ├── ArmVirtQemu.fdf # Flash 描述文件FD 布局 │ └── ArmVirtQemuFvMain.fdf.inc # FVMAIN 内容定义 ├── BaseTools\ │ ├── Bin\Win32\ # 编译后的 C 工具 iasl.exe │ ├── Source\C\ # C 工具源码 │ └── Source\Python\ # build 系统 Python 脚本 ├── Conf\ │ ├── target.txt # 构建目标配置 │ ├── tools_def.txt # 工具链定义 │ └── build_rule.txt # 构建规则 ├── Build\ │ └── ArmVirtQemu-AARCH64\ │ └── RELEASE_GCC5\ │ ├── AARCH64\ # 编译中间产物 │ └── FV\ │ ├── QEMU_EFI.fd # ★ 主固件 (3MB) │ └── QEMU_VARS.fd # ★ 变量存储 (768KB) └── build_armvirt.bat # 一键构建脚本增加一张带有电池功能的截图看起来Windows On ARM的还可以

相关新闻

揭秘潍坊网站建设价格背后,为何有人花5000元有人花5万?内行不说真话

揭秘潍坊网站建设价格背后,为何有人花5000元有人花5万?内行不说真话

最近好多老板给我发消息,聊的话题都特别统一,那就是“潍坊网站建设价格”。有个做机械加工的老板跟我抱怨,说他找了一家所谓的“互联网科技公司”,报了一个八千块的价格,他觉得挺贵,结果去隔壁小区找了个大学生兼职,三千块搞定。结果网站上线第一天,打开速度像蜗牛,手…

2026/8/13 22:44:25 阅读更多 →
2026年最新重庆市轨道交通图和 重庆轨道交通规划图 附图

2026年最新重庆市轨道交通图和 重庆轨道交通规划图 附图

重庆轨道交通(Chongqing Rail Transit,CRT)是服务于中国重庆市境内的城市轨道交通系统,其第一条线路于2005年6月18日开通试运营 [1],使重庆市成为中国内地第九座、西部地区第一座开通城市轨道交通的城市 截至2026年2月…

2026/8/13 22:43:24 阅读更多 →
2026年最新武汉市轨道交通图和 武汉轨道交通规划图 附图

2026年最新武汉市轨道交通图和 武汉轨道交通规划图 附图

武汉地铁(Wuhan Metro),是服务于中国湖北省武汉市的城市轨道交通,其首条线路——武汉地铁1号线于2004年7月28日正式开通 [1],于2004年9月28日进入正式运营阶段 [2],使武汉成为中国内地第七座开通城市轨道交…

2026/8/13 22:43:24 阅读更多 →

最新新闻

Flutter开发OpenHarmony二维码扫描App实战指南

Flutter开发OpenHarmony二维码扫描App实战指南

1. 为什么选择Flutter开发OpenHarmony二维码扫描App? OpenHarmony作为新一代分布式操作系统,其生态建设正处于关键时期。而Flutter作为Google推出的跨平台UI框架,近年来在移动开发领域展现出强大的生命力。将两者结合开发二维码扫描应用&…

2026/8/13 23:45:13 阅读更多 →
2024年广州网站建设q.479185700強避坑指南与实战心得

2024年广州网站建设q.479185700強避坑指南与实战心得

在现在的互联网时代,做一个企业官网或者个人品牌网站,已经不再是那种“有就就行”的点缀品了,它更像是你在数字世界里的脸面和名片。尤其是对于咱们广州这座商贸之都的企业来说,流量就是生命线,而网站往往就是承接流量的那个容器。今天我不讲那些高大上的理论,也不堆砌晦…

2026/8/13 23:45:13 阅读更多 →
2026 GEO系统选购科普:四大差异化平台落地选型指南

2026 GEO系统选购科普:四大差异化平台落地选型指南

前言2026年,生成式AI营销已进入常态化落地阶段,GEO(生成式引擎优化)成为企业搭建AI品牌资产、获取全域自然流量的核心手段。当前国内GEO平台品类繁杂,在技术能力、适配场景、计费模式、落地效果上差异显著。不少企业因…

2026/8/13 23:45:13 阅读更多 →
JavaScript 实现轮播图功能

JavaScript 实现轮播图功能

自动轮播:图片按照设定的时间间隔自动切换,实现循环播放。 箭头控制:用户可以通过点击左右箭头手动切换图片,控制轮播的方向。 小圆点指示:在轮播图下方显示小圆点,指示当前显示的图片位置 鼠标交互&#x…

2026/8/13 23:45:13 阅读更多 →
动态数字宇宙理论(第六篇):AI 驾驭层终局格局与稳态智能体完整商业变现体系(预判)

动态数字宇宙理论(第六篇):AI 驾驭层终局格局与稳态智能体完整商业变现体系(预判)

动态数字宇宙理论(第六篇):AI 驾驭层终局格局与稳态智能体完整商业变现体系前言前五篇已经完成理论、数理、工程、时代成因、科学实证的完整学术闭环。 本篇落地产业终局、商业壁垒、变现逻辑、赛道分层、赚钱路径。市面上 99% 的 AI 商业分析…

2026/8/13 23:45:13 阅读更多 →
母线槽安装前后的核验工作,哪些参数需要现场复核

母线槽安装前后的核验工作,哪些参数需要现场复核

母线槽属于现场拼装式配电设备,工厂制造质量、现场安装工艺,两者共同决定后期运行是否可靠。不少项目工厂检测报告齐全,但后期出现接头发热,问题往往出在运输磕碰、现场装配不到位。到货进场阶段可以做基础核验:外观检…

2026/8/13 23:44:08 阅读更多 →

日新闻

Visual Studio新建项目解决方案为空:系统性排查与修复指南

Visual Studio新建项目解决方案为空:系统性排查与修复指南

1. 问题现象与本质剖析如果你是一位.NET开发者,或者正准备踏入这个领域,那么Visual Studio(后面简称VS)绝对是你绕不开的伙伴。但有时候,这个伙伴会跟你开一个不大不小的玩笑:你满怀期待地点击“创建新项目…

2026/8/13 0:00:09 阅读更多 →
长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

长春建设厅网站:普通人买房办事必看的真实指南与避坑攻略

说实话,每次提起“长春建设厅网站”这几个字,我心里都挺有感触的。不是因为它有多高大上,也不是因为那里藏着什么不可告人的秘密,恰恰相反,是因为它太“接地气”了,或者说,它是咱们普通人想要在这个城市好好生活、安稳买房时,必须得翻过的一座“数据山”。很多新朋友第…

2026/8/13 0:00:09 阅读更多 →
Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案

Windows家庭版远程桌面多用户破解完整指南:RDPWrap终极解决方案 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini 你是否曾为Windows家庭版无法支持多用户远程桌面…

2026/8/13 0:00:09 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/13 2:38:34 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/13 10:41:52 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/13 10:41:51 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/13 10:41:50 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/13 10:41:49 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/13 10:41:49 阅读更多 →