Ubuntu 22.04 安装和运行 EDK2 超详细教程


Ubuntu 22.04 安装和运行 EDK2 超详细教程

适合新手小白,从零开始


🌟 1. 什么是 EDK2?

EDK2(EFI Development Kit 2)是一个开源的 UEFI(统一可扩展固件接口)开发环境,主要用于编写和测试 UEFI 固件。简单来说,它可以用来开发和运行 UEFI BIOS,比如在 QEMU 模拟器中测试 UEFI 启动。


🚀 2. 安装 EDK2 的必备工具

在 Ubuntu 22.04 中,我们需要安装一些编译工具和依赖项。

🔹 第一步:更新 Ubuntu

sudo apt update && sudo apt upgrade -y

这一步的作用:确保你的 Ubuntu 系统是最新的,避免后续出现兼容性问题。

🔹 第二步:安装必要的软件包

sudo apt install -y build-essential uuid-dev iasl git \gcc-aarch64-linux-gnu gcc-12 g++-12 \python3 python3-pip nasm python3-distutils \libssl-dev qemu-system-x86 qemu-system-arm qemu-system-aarch64

各个软件的作用

  • build-essential:C/C++ 编译工具
  • uuid-dev:UUID 相关的开发库
  • iasl:Intel ACPI 编译工具
  • git:用于克隆代码
  • gcc-aarch64-linux-gnu:ARM 64 位编译器
  • python3pip:Python 3 及其包管理工具
  • nasm:汇编编译器
  • libssl-dev:支持 OpenSSL
  • qemu-system-x86qemu-system-armqemu-system-aarch64:QEMU 虚拟机(用于测试 UEFI)

📥 3. 下载 EDK2 源代码

我们要从 GitHub 获取 EDK2 的源码。

🔹 克隆 EDK2 源码

git clone https://github.com/tianocore/edk2.git --recursive
cd edk2

注意:

  • --recursive 是为了下载 EDK2 依赖的子模块。
  • 如果忘记加 --recursive,可以手动运行:
    git submodule update --init --recursive
    

🛠 4. 设置 EDK2 环境

在 EDK2 目录下,运行:

source edksetup.sh

作用:初始化 EDK2 编译环境。

然后,我们需要创建 BaseTools(EDK2 需要的工具):

make -C BaseTools

作用:构建 EDK2 需要的基础工具。


📝 5. 选择编译工具

EDK2 需要指定编译工具,这里我们用 GCC。

🔹 设置 GCC 编译器

export GCC5_AARCH64_PREFIX=aarch64-linux-gnu-
export GCC5_X64_PREFIX=x86_64-linux-gnu-
export TOOLCHAIN=GCC5

作用

  • GCC5_AARCH64_PREFIX:用于 ARM 64 位编译
  • GCC5_X64_PREFIX:用于 x86_64 编译
  • TOOLCHAIN=GCC5:选择 GCC 作为编译工具

如果你要用 Clang(可选):

export CC=clang
export CXX=clang++
export TOOLCHAIN=CLANG38

但对于新手,建议使用 GCC(默认支持较好)。


🔧 6. 选择要编译的 UEFI 固件

EDK2 可以编译不同的平台,我们主要介绍 x86_64(用于 QEMU)和 AARCH64(ARM)

🔹 选择 x86_64 平台(用于 PC 模拟 UEFI)

如果你要在 QEMU(x86_64)上测试 UEFI,请运行:

source edksetup.sh
build -a X64 -t GCC5 -p OvmfPkg/OvmfPkgX64.dsc

编译时间大概 3-10 分钟(取决于你的电脑性能)。

🔹 选择 AARCH64 平台(ARM)

如果你要在 ARM(AARCH64)平台上运行 UEFI,请运行:

source edksetup.sh
build -a AARCH64 -t GCC5 -p ArmVirtPkg/ArmVirtQemu.dsc

📁 7. 编译完成后,找到 UEFI 固件

编译完成后,生成的 UEFI 固件位置如下:

平台固件路径
x86_64(PC BIOS)Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd
AARCH64(ARM BIOS)Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/FV/QEMU_EFI.fd

🚀 8. 运行 UEFI 固件

🔹 在 QEMU 上运行 x86_64 UEFI

qemu-system-x86_64 -bios Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd -m 512M

你会看到一个 UEFI 界面,说明成功运行!🎉

🔹 在 QEMU 上运行 AARCH64(ARM)UEFI

qemu-system-aarch64 -machine virt -cpu cortex-a57 -m 1024 \-bios Build/ArmVirtQemu-AARCH64/DEBUG_GCC5/FV/QEMU_EFI.fd \-nographic

这会运行 ARM 版本的 UEFI。


💾 9. 创建 UEFI 虚拟磁盘(可选)

如果你想创建一个 UEFI 启动磁盘,可以运行:

qemu-img create -f qcow2 uefi_disk.qcow2 20G

然后在 QEMU 中挂载磁盘:

qemu-system-x86_64 -bios Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd \-m 1024 -drive file=uefi_disk.qcow2,if=virtio

这样你可以在 QEMU 里安装 UEFI 操作系统,比如 Windows 或 Linux。


🛠 10. 可能遇到的问题

edksetup.sh: command not found

请确认你已在 edk2 目录下运行:

source edksetup.sh

No rule to make target 'BaseTools'

请确保 BaseTools 已正确构建:

make -C BaseTools

qemu-system-x86_64: command not found

请检查 QEMU 是否安装:

qemu-system-x86_64 --version

如果没有安装,运行:

sudo apt install qemu-system

🎯 总结

  1. 安装依赖
  2. 下载 EDK2
  3. 初始化环境
  4. 编译 UEFI
  5. 使用 QEMU 运行 UEFI

到这里,你已经成功在 Ubuntu 22.04 上部署并运行了 EDK2 了!🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/76408.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是STEP认证

**什么是STEP认证** STEP认证,全称为“可持续纺织生产认证”(Sustainable Textile Production),是一项由国际环保纺织协会Oeko-Tex提供的权威独立认证体系。这一认证体系犹如纺织和皮革行业的绿色灯塔,为追求可持续发…

odoo-045 ModuleNotFoundError: No module named ‘_sqlite3‘

文章目录 一、问题二、解决思路 一、问题 就是项目启动,本来好好地,忽然有一天报错,不知道什么原因。 背景: 我是在虚拟环境中使用的python3.7。 二、解决思路 虚拟环境和公共环境直接安装 sqlite3 都会报找不到这个库的问题…

[Linux系统编程]进程间通信—system V

进程间通信—system V 1. System V 共享内存(Shared Memory)1.1 共享内存的建立过程1.2 共享内存函数2. System V 消息队列(Message Queues)3. System V 信号量(Semaphores)4. 总结前言: 之前所提的管道通信是基于文件的,OS没有做过多的设计工作。 system V 进程间通信…

R语言——获取数据1

参考资料:学习R 数据的来源可以由很多。R内置有许多数据集,而在其他的附件包中能找到更多的数据。R能从各式各样的来源中读取,且支持大量的文件格式。 1、内置的数据集 R的基本分发包有一个datasets,里面全是示例数据集。很多其他…

HTTP 请求方法

HTTP 请求方法 引言 HTTP(超文本传输协议)是互联网上应用最为广泛的网络协议之一。它定义了客户端与服务器之间通信的规则。HTTP请求方法,也称为HTTP动词,是客户端向服务器发送请求时使用的操作类型。本文将详细介绍HTTP请求方法的概念、分类、常用方法及其在实际应用中的…

python函数装饰器

python函数装饰器 声明:博主并没有系统学习过python语言,在实际项目中遇到关于python不懂的语法,这里仅作为个人学习积累笔记 1.1 python函数相关基础 深入了解python函数装饰器移步:Python 函数装饰器 下面的笔记来源于上述链接…

OpenCV 图形API(7)用于将笛卡尔坐标(x, y)转换为极坐标(magnitude, angle)函数cartToPolar()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算二维向量的大小和角度。 cartToPolar 函数计算每个二维向量 (x(I), y(I)) 的大小、角度,或同时计算两者: magnitude…

什么是向量搜索Vector Search?

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…

搜索工具Everything下载安装使用教程(附安装包)

文章目录 前言一、搜索工具Everything介绍二、搜索工具Everything使用步骤1.软件下载2.版本选取3.启动软件4.文件搜索 前言 本教程将详细为您介绍 Everything 的下载、安装与使用方法,助您快速上手,充分利用这款工具的强大功能,告别文件查找…

element-plus中,Upload上传组件的使用 + 后端处理

目录 一. 案例一&#xff1a;用户更换个人头像 1.前端实现 2.后端实现 ①引入阿里云oss的依赖 ②编写AliOSSUtils工具类 ③编写controller层 ④编写service层 ⑤编写mapper层 3.效果展示 4.重点理解 结语 一. 案例一&#xff1a;用户更换个人头像 1.前端实现 <…

HarmonyOS-ArkUI Rcp模块类关系梳理

前言 本文重点解决的是&#xff0c;按照官网学习路径学习Tcp模块内容时&#xff0c;越看越混乱的问题。仿照官网案例&#xff0c;书写代码时&#xff0c;产生的各种疑惑。比如&#xff0c;类与类之间的关系&#xff0c;各种配置信息究竟有多少&#xff0c;为什么越写越混乱。那…

【云计算物理网络】数据中心网络架构设计

云计算的物理基础&#xff1a;数据中心网络架构设计 一、技术背景&#xff1a;从“三层架构”到“云原生网络”二、技术特点&#xff1a;云数据中心网络的四大支柱三、技术细节&#xff1a;CLOS架构的实现挑战四、未来方向&#xff1a;从“连接设备”到“感知服务”结语&#x…

window11 通过cmd命令行安装 oh my zsh 的教程

步骤 1&#xff1a;安装 WSL 2 和 Ubuntu 1. 以管理员身份打开 CMD wsl --install -d Ubuntu此命令会自动安装 WSL 2 和 Ubuntu 发行版。 安装完成后重启系统。 初始化 Ubuntu 在开始菜单中打开 Ubuntu&#xff0c;设置用户名和密码。 步骤 2&#xff1a;在 WSL 的 Ubunt…

gdb 调试命令记录

启动调试 gdb ./待调试的程序 #不带参数 (gdb) run #带参数 gdb --args ./your_program arg1 arg2 arg3 (gdb) run arg1 arg2 arg3 #图形化代码界面 (gdb) layout src基础调试命令 命令缩写作用run [args]r运行程序&#xff08;可带命令行参数&#xff09;break <locatio…

STM32F103低功耗模式深度解析:从理论到应用实践(上) | 零基础入门STM32第九十二步

主题内容教学目的/扩展视频低功耗模式什么是低功耗&#xff0c;模式介绍&#xff0c;切换方法。为电池设备开发做准备。 师从洋桃电子&#xff0c;杜洋老师 &#x1f4d1;文章目录 一、低功耗模式概述1.1 为什么需要低功耗模式&#xff1f;1.2 基本实现原理 二、低功耗模式的本…

JavaScript instanceof 运算符全解析

JavaScript instanceof 运算符全解析 核心语义: 判断一个对象(object)是否属于某个构造函数(constructor)或类的实例,基于原型链(prototype chain)实现类型检测。 一、JavaScript 中的基础用法 1. 语法结构 object instanceof constructor 返回值:布尔值(true/fal…

电脑基础之word基础操作

word是常用的办公软件之一&#xff0c;用于文档编辑&#xff0c;如合同/报告撰写、论文等‌。 一、简介 word文档最早由微软推出&#xff0c;通过Microsoft Office Word软件创建和编辑。由于涉及版权付费问题&#xff0c;大多数个人使用盗版软件。后来金山出了WPS office免费软…

深度解析Python代码中的广告信息提取与JSON处理

哈喽,大家好,我是木头左! 在当今数字化时代,广告无处不在,而从广告中提取关键信息并进行处理则成为了一项重要的技能。本文将深入剖析一段Python代码,该代码旨在从给定的JSON格式字符串中提取广告相关信息,并对其进行解析和处理。通过这段代码,将展示如何运用Python的j…

base64在线解码工具

我们经常会用到base64编码&#xff0c;相应的base64解码成为日常必备&#xff0c;所有我们需要拥有一个base64在线解码工具 base64在线解码工具

Linux——进程信号(3)(信号保存与信号捕捉)

进程信号3 信号保存信号相关概念详解信号集&#xff08;sigset_t&#xff09;及操作函数详解 信号捕捉信号捕捉的详细流程解析信号捕捉的核心概念信号捕捉的完整流程&#xff08;以 SIGQUIT 为例&#xff09; 信号保存 信号相关概念详解 1.核心概念 (1) 信号递达&#xff08…