发布时间:2026/8/15 5:54:33
自己编译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的还可以

相关新闻

2026/8/13 22:45:00

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

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

2026/8/13 22:45:00

从宁波网站建设设计到数字化转型,揭秘传统企业如何在互联网浪潮中突围并赢得客户信赖

在这个手指轻轻滑动就能浏览全球信息的时代,如果你还觉得拥有一个网站只是“有面子”的事,或者认为随便找个模板套用一下就能搞定,那可能真要稍微警惕一下了。咱们宁波,作为长三角南翼的经济重镇,制造业底蕴深厚,外贸起家,如今正处在产业转型升级的关键路口。在这个节骨…

2026/8/13 22:40:00

学历不好能不能学网安?彻底讲透网安学历歧视与真实就业现状

一、全网最争议的问题:网安吃学历还是吃技术?很多零基础、专科、非科班同学最大的焦虑:学历不好,到底能不能入行网安、能不能高薪、能不能长久发展?我用行业真实招聘逻辑、岗位分层、上岸案例,一次性彻底讲…

2026/8/15 5:54:21

OpenClaw+Remotion+TTS+Whisper:零成本AI自动化短视频制作全流程拆解

1. 从零到九千:一个视频创作者的“低成本奇迹”前几天,我随手发的一个视频,播放量从平时的几十、几百,一下子冲到了九千多。最让我意外的是,这个视频的制作成本,算下来可能连一毛钱都不到。我不是什么剪辑大…

2026/8/15 5:54:21

AI智能体记忆系统架构:从向量检索到多Agent协同实战

1. 项目概述:从“金鱼脑”到“过目不忘”的智能体进化在AI智能体(Agent)的开发与应用浪潮中,一个核心的瓶颈问题日益凸显:记忆。早期的智能体,甚至包括一些当前看似复杂的系统,常常表现得像个“…

2026/8/15 5:54:21

AI绘图Prompt工程实战:高效生成专业架构图的核心技巧

1. 项目概述:当架构师遇上AI画笔最近和几个技术团队负责人聊天,发现一个挺有意思的现象:大家画架构图的工具越来越“卷”了。从早年的Visio、PPT,到后来的Draw.io、Lucidchart,再到现在的Mermaid、PlantUML这类代码绘图…

2026/8/15 5:54:21

C++编译错误解析:不允许使用不完整类型的原因与解决方案

1. 问题引入:一个看似简单却令人困惑的编译错误如果你在写C代码时,编译器突然抛出一个“不允许使用不完整的类型”的错误,而你的代码看起来语法上似乎没什么毛病,这感觉就像开车时仪表盘突然亮起一个看不懂的警示灯,让…

2026/8/15 5:49:20

ZIP文件结构深度解析:从二进制格式到常见错误修复

1. ZIP格式:无处不在的压缩基石如果你在电脑上工作过,那么你几乎不可能没接触过ZIP文件。从下载一个软件安装包,到同事发来一堆文档,再到备份自己的项目代码,.zip后缀的文件无处不在。它就像一个数字世界的“打包袋”&…

2026/8/14 4:27:24

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

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

2026/8/14 4:27:24

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/15 0:04:00

AI 电动婴儿车智能功率 辅助控制、电源管理的完整选型方案

2026年随着 AI 技术在电动孕婴童用品中的深度渗透(如智能避障、自适应速度控制、能量回收),电动婴儿车对功率器件提出更高要求:高效率、小型化、低功耗、高可靠性。微碧半导体(VBsemi)基于 Trench 及 SGT 工…

2026/8/15 0:04:00

论文AIGC检测不达标完整教程!低门槛用5款工具逐步复检!

论文提交前自己先查一遍AI率,是2026年毕业生的常规动作。学校要求论文AI率低于30%,乃至于20%才能答辩… 很多同学发现一个尴尬的事情:同一篇论文,知网查出来AI率35%,维普查可能是48%,大雅、朱雀又是另外的数…

2026/8/14 4:27:24

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/15 4:56:16

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/14 4:27:24

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…