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.pswp.cn/diannao/76408.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76408.shtml
英文地址,請注明出處:http://en.pswp.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…