UEFI BIOS tutorial

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

這篇文章主要用來記錄學習 UEFI EDKII 的心路歷程,由於非該領域的專業,因此難免會有錯誤。
以下介紹提供在windows環境或是Linux環境中的安裝與操作方式
如有發現錯誤,還請大家踴躍指正

在 Linux 中(Fedora 41)開發 UEFI EDKII


由於大部分的教程都是在 Windows 或是 Ubuntu 環境,所以這邊特意使用 Fedora/ Red Hat 來做開發。

首先進行環境配置,安裝依賴的套件:

# 這會安裝開發C/C++工具所需的套件集合
dnf group install -y development-tools

# 以下是執行edkII 所需要的套件
dnf install nasm libXext-devel \
    libX11-devel uuid-devel \
    gcc-c++ libuuid-devel acpica-tools

下載官方鏡像原始程式碼:

$ mkdir UEFI; cd UEFI
UEFI$ git clone https://github.com/tianocore/edk2.git
UEFI$ cd edk2
UEFI/edk2$ git submodule update --init

編譯EDKII工具鍊:

UEFI/edk2$ make -C BaseTools
UEFI/edk2$ source edksetup.sh

第一次執行 source edksetup.sh 會在 Conf目錄生成 tools_def.txt、target.txt、build_rule.txt 檔案,這是之後 build 指令會預設讀取的資訊

build 指令也是 edk2 用來編譯 package 的命令腳本,路徑會在剛剛編譯的 BaseTools 下:

edk2/BaseTools/BinWrappers/PosixLike/build

編譯 EDKII Packages


在 EDKII 中,編譯工作都是使用 build script 來完成

build 命令有幾個常用的選項可供配置:

  • -a TARGETARCH or –arch=TARGETARCH: 該選項用於指定目標的指令及架構,常見的有 IA32(X86)、X64(AMD64, X86_64)、ARM、RISCV64
  • -p PLATFORMFILE or –platform=PLATFORMFILE: 建構由 DSC 檔案名稱參數指定的平台,覆蓋 target.txt 的 ACTIVE_PLATFORM 定義
  • -m MODULEFILE or –module=MODULEFILE: 建構由 INF 檔案名稱參數指定的模組,如果未提供該選項,預設會編譯 package 中的所有 Module
  • -t TOOLCHAIN or –tagname=TOOLCHAIN: 使用工具鏈標記名建構平台,覆蓋 target.txt 的 TOOL_CHAIN_TAG 定義,在 windows 環境中通常是 VS2015,Linux 中則使用 GCC
  • -b BUILDTARGET or –buildtarget=BUILDTARGET: 使用 TARGET 建置平台,覆蓋 target.txt 的 TARGET 定義,常用的有 RELEASE 或是 DEBUG

在 edk2 Module 中,模擬器是常用的工具,編譯該工具的方式如下:

# 在該命令中我們沒有使用 -m 指定要編譯的 Module
# 因此會將 EmulatorPkg 中的所有 Module 都編譯
UEFI/edk2$ build -p EmulatorPkg/EmulatorPkg.dsc -t GCC -a X64

編譯完成之後會在下命令的該目錄之下,出現一個 Build 目錄,這裡面會有以我們編譯的 Package 為名稱的目錄。
以剛剛編譯的模擬器工具為例,如下:

UEFI/edk2/Build$ ls
EmulatorX64/

# 進入 EmulatorX64 目錄後我們可以看到 DEBUG_GCC 目錄
# 雖然我們沒有使用 -b 來指定目標,但預設會是DEBUG,GCC表示 -t 指定的 toolchain

要執行虛擬機只需執行 Host,他會在剛剛編譯的套件路徑之下中,以下是執行後的範例:

可以看到很多 efi 執行檔,我們隨意執行一個 HelloWorld.efi 後即可得到結果。

OVMF 開放虛擬機器韌體

OVMF 是基於 EDKII 的韌體,可以在 qemu x86-64 虛擬機器下運作。這樣可以輕鬆地使用 UEFI 韌體進行調試和實驗

# 在該命令中我們沒有使用 -m 指定要編譯的 Module
# 因此會將 OvmfPkg 中的所有 Module 都編譯
UEFI/edk2$ build -p OvmfPkg/OvmfPkgX64.dsc -t GCC -a X64 -b RELEASE

# 編完的檔案放在 Build/{Platform Name}/{TARGET}_{TOOL_CHAIN_TAG}/FV
UEFI/edk2/Build/OvmfX64/RELEASE_GCC/FV$ ls -alh OVMF*
-rw-r--r--. 1 alan alan 3.5M Jan  2 17:07 OVMF_CODE.fd
-rw-r--r--. 1 alan alan 4.0M Jan  2 17:07 OVMF.fd
-rw-r--r--. 1 alan alan 528K Jan  2 17:07 OVMF_VARS.fd

OVMF 韌體(QEMU 的 UEFI 實作)分為兩個檔案:

  • OVMF_CODE.fd 包含實際的 UEFI 韌體
  • OVMF_VARS.fd 是用於模擬持久 NVRAM 儲存的「模板」

有 OVMF 後我們就可以使用 qemu 模擬器來執行。

$ qemu-system-x86_64 -s -pflash OVMF.fd -hda fat:rw:<efi_file_loc>\
-net none -debugcon file:debug.log -global -isa-debugcon.iobase=0x402 -nographic 

執行之後,debug 的相關訊息會輸出到 debug.log

可以使用qemu搭配gdb進行除錯

常用工具


這邊介紹一些常使用的工具:

intel udk debugger tool
這裡存放除錯工具與使用手冊

這篇文章在 HackMD 上也有分享,由於收到 CSDN 很多貢獻,因此這邊也發表一篇 
深入解析:如何通过libvirtd配置实现QEMU的UEFI启动支持 本文深入解析了如何通过libvirtd配置实现QEMU虚拟机的UEFI启动支持。详细介绍了从BIOSUEFI的升级必要性,拆解了OVMF、libvirtd与NVRAM等核心组件的关系,并提供了从获取OVMF固件、配置libvirtd到创建UEFI虚拟机的完整实战步骤,帮助用户为QEMU虚拟机启用现代UEFI固件。 阅读详情

相关推荐

UEFI实践】Shell下tool模板

后续有更深理解,会继续补充。学艺不精,错误请指正;如有侵权,请联系删除。

Mutouyugi的博客 786

解决SDM660代码编译报错问题

今天在linux服务器 编译高通sdm660的代码时有如下的报错信息出现. Traceback (most recent call last): File &amp;amp;amp;quot;/home/yuewen/project/workspace/PL2O/PL2O_0312/LINUX/android/bootable/bootloader/edk2/BaseTools/BinWrappers/PosixLike...

天高任鸟飞海阔凭鱼跃的专栏 2159

IDV软件安装win7_x64 UEFI镜像模板解决方案

IDV软件安装win7_x64 UEFI镜像模板解决方案

weixin_43305050的博客 1404

固件幽灵:UEFI后门植入与Secure Boot绕过实战教程

这段代码利用UEFI的执行环境,在操作系统启动之前执行恶意任务,例如加载一个未签名的驱动程序、修改操作系统内核、或者在网络上建立一个隐蔽的C2(Command and Control)通道。,就是通过物理访问(使用编程器)或软件层面漏洞(利用BIOS写保护机制的缺陷),解析固件镜像,找到一个合适的DXE驱动(通常是启动后期执行且功能不关键的驱动),将恶意代码(Shellcode)注入其中,然后重新打包固件并刷写回SPI Flash芯片。当系统启动进入DXE阶段时,被感染的驱动会被加载执行,从而激活后门。

Alfadi联盟 萧瑶的博客 774

【免费下载】 Beyond BIOS 第三版 PDF 资源下载

Beyond BIOS 第三版 PDF 资源下载 【下载地址】BeyondBIOS第三版PDF资源下载 Beyond BIOS 第三版 PDF 资源下载 项目地址: https://gitcode.com/Open-source-...

gitblog_06689的博客 920

Ubuntu&&win10双系统常见问题解决以及win10的修复

Ubuntu&&win10双系统常见问题解决以及win10的修复问题a) 在win10上安装ubuntu双系统后,只能进入ubuntu系统而进不去win10系统b) 在ubuntu的grub文件中设置win10引导项,不起作用c) Bios中误删了 window boot manager,导致无法进入win10系统d) 在引导项中,取消了ubuntu的引导项,导致系...

Annjes的博客 3428

UEFI与MBR区别

 EFI与MBR启动的区别          大硬盘和WIN8系统,让我们从传统的BIOS+MBR模式升级到UEFI+GPT模式,现在购买的主流电脑,都是预装WIN8系统,为了更好的支持2TB硬盘 ,更快速的启动win8,预装系统都采取了GPT分区的格式,并且主板bios支持UEFI启动。 MBR与GPT介绍:           MBR和GPT是两种不同分区形式,好比你买回来一块新硬盘...

weixin_33752045的博客 1142

基于 Web-Dev-For-Beginners 的实战作业指南:Adopt an API——用外部 API 与 Local Storage 构建数据驱动的浏览器扩展

本作业是 [Web-Dev-For-Beginners](https://link.gitcode.com/i/a29299c2f2a43e1a901b3073b95b1a50) 教程中"浏览器扩展项目"第 2 课([调用 API 并使用 Local Storage](https://link.gitcode.com/i/220b215e67ebe5ca4a7d68493038ff30))的配套实

gitblog_00649的博客 669

如何搭建 Astro 源码仓库本地开发环境并用 examples 验证你的修改

你要完成的任务是:把 Astro 源码仓库拉到本地,安装依赖并构建,然后修改 `packages/astro` 中的源码,通过仓库自带的 `examples` 站点亲眼看到修改生效。Astro 仓库使用 pnpm workspaces 组织,`examples` 目录下的站点依赖的 `astro` 会被解析到本地源码,而不是 npm 上发布的版本,所以 examples 是验证源码改动的最直接方式

gitblog_00046的博客 389

GPU-Passthrough-Tutorial:终极KVM GPU直通完整指南

GPU直通(GPU Passthrough)技术让你能够在Linux系统上通过KVM虚拟机运行Windows游戏,无需重启即可享受接近原生的性能体验。本教程将详细介绍如何搭建KVM GPU直通环境,帮助你告别双系统切换的烦恼,轻松实现Linux开发与Windows游戏的无缝切换。 ## 什么是KVM GPU直通? KVM(Kernel-based Virtual Machine)是Linux

gitblog_00047的博客 550

如何用 BlockSuite Adapter 与 ASTWalker 实现文档到 Markdown 的导入导出?

在 AFFiNE 的编辑器内核 BlockSuite 中,如果你需要把文档内容导出为 Markdown,或者把 Markdown 文件导入成 BlockSuite 文档,直接实现入口就是 Adapter API:它是不同数据格式与 BlockSuite `Snapshot`(JSON 序列化的块树)之间的桥梁。本文基于仓库内的 [Adapter 指南](https://link.gitcode.c

gitblog_00582的博客 479

Insyde BIOS@G50-80 初探

近些天为了激活笔记本上的WoL功能,对UEFI BIOS有了一些了解。新一代的UEFI规范实现了很多先进的功能,比如图形界面,文件系统支持,扩展性,secure boot,secure flash(capsule)等,而这些原本是为了使用户体验更好,使用更方便、安全的的功能,被厂商念错了经。M$利用secure boot功能限制电脑安装其他的操作系统,甚至安装了Ubuntu一类的系统,连进一步安装...

weixin_30892889的博客 1344

如何快速搭建Windows游戏虚拟机:GPU-Passthrough-Tutorial实战教程

GPU-Passthrough-Tutorial是一个功能强大的开源项目,它能帮助你在Linux系统上搭建高性能的Windows游戏虚拟机,通过KVM技术实现GPU直通,让你无需双系统即可享受接近原生的游戏体验。本文将为你提供一个简单快速的实战指南,带你轻松掌握这一技术。 ## 什么是GPU直通技术? GPU直通(GPU Passthrough)是一种通过虚拟化技术将物理显卡直接分配给虚拟机的

gitblog_00826的博客 628

GPU-Passthrough-Tutorial社区资源:从入门到精通的完整学习路径

GPU-Passthrough-Tutorial是一个全面的开源项目,提供了从基础到高级的GPU直通技术学习资源,帮助用户在Linux系统上通过KVM实现GPU虚拟化,让Windows虚拟机获得接近原生的显卡性能,特别适合游戏和图形处理需求。 ## 为什么选择GPU直通技术? 🚀 GPU直通(GPU Passthrough)技术允许将物理显卡直接分配给虚拟机,突破了传统虚拟化的性能瓶颈。与W

gitblog_00120的博客 404

virtIO驱动完全指南:GPU-Passthrough-Tutorial磁盘与网络性能提升

GPU-Passthrough-Tutorial是一个专注于KVM虚拟化环境下GPU直通技术的开源项目,通过virtIO驱动可以显著提升虚拟机的磁盘与网络性能,让普通用户也能轻松构建高效的虚拟化平台。 ## 为什么选择virtIO驱动? 在KVM虚拟化环境中,传统的设备模拟方式会带来严重的性能损耗。virtIO作为一种高效的半虚拟化驱动方案,通过在 hypervisor 和虚拟机之间建立直接通

gitblog_00976的博客 769

Linux-Tutorial内存测试:memtest86与memtester工具使用

内存故障是服务器运行不稳定的潜在风险,可能导致数据损坏、服务崩溃甚至系统宕机。本文将介绍两款专业的Linux内存测试工具——MemTest86(基于BIOS的物理内存测试)和Memtester(用户态内存检测工具),帮助你快速定位内存问题。 ## 内存测试必要性与应用场景 内存故障通常表现为: - 随机进程崩溃或内核异常(Kernel Panic) - 数据文件校验错误(如MD5不一致) - ...

gitblog_00963的博客 1385

VeraCrypt终极指南:3步创建救援盘,系统崩溃也不怕数据丢失

在数字时代,数据安全是每个用户都必须面对的重要课题。当你的硬盘遭遇加密错误、引导扇区损坏或密码遗忘时,普通用户往往面临数据永久丢失的风险。VeraCrypt作为一款开源的磁盘加密软件,不仅提供强大的加密保护,还配备了救援盘功能,成为你数据安全的"紧急钥匙"。今天,我将为你详细解析如何创建VeraCrypt救援盘,让你在系统崩溃时也能从容应对。 ## 为什么你需要VeraCrypt救援盘? 想象

gitblog_00830的博客 382

GPU-Passthrough-Tutorial实战:从双系统到完美虚拟化的转变

GPU-Passthrough-Tutorial是一个完整的GPU虚拟化解决方案,帮助用户摆脱双系统切换的麻烦,在Linux主机上通过KVM技术创建高性能Windows虚拟机,实现游戏与开发工作的无缝切换。本教程将带你从硬件准备到最终实现接近原生性能的GPU passthrough配置,让你的PC同时拥有Linux的高效与Windows的游戏体验。 ## 为什么需要GPU Passthrough

gitblog_01171的博客 593

GPU-Passthrough-Tutorial部署流程:自动化脚本与配置管理最佳实践

GPU-Passthrough-Tutorial是一套完整的GPU直通解决方案,通过KVM虚拟化技术实现物理GPU资源的直接分配,让虚拟机获得接近原生的图形处理性能。本教程将详细介绍如何利用项目提供的自动化脚本与配置文件,快速完成GPU直通环境的部署与管理。 ## 什么是GPU直通技术? GPU直通(GPU Passthrough)是一种将物理显卡直接分配给虚拟机的技术,通过IOMMU(输入输

gitblog_00934的博客 292
上一篇: Debian 使用debuginfo
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值