【調試筆記-20240516-Windows-使用VS2019編譯edk2(上)】

調試筆記-系列文章目錄

調試筆記-20240516-Windows-使用VS2019編譯edk2(上)


文章目錄

  • 調試筆記-系列文章目錄
    • 調試筆記-20240516-Windows-使用VS2019編譯edk2(上)
  • 前言
  • 一、安裝開發工具
    • 1. 安裝 VS2019
    • 2. 安裝 Python 3.10
    • 3. 安裝 iASL
    • 4. 安裝 NASM
  • 二、準備 EDK2 源代碼
    • 1.從 github 下載
    • 2. 從 gitee 下載
  • 三、編譯測試模擬器
    • 1. 配置項目
    • 2. 編譯基本工具
    • 3. 編譯測試模擬器
    • 4. 運行測試模擬器
  • 總結


前言

本文介紹了在 Windows 平臺上搭建 edk2 開發環境的步驟,為研究 QEMU 的UEFI 支持提供實驗基礎。
本文讀者需要具備 Windows 平臺的開發經驗,并對 QEMU 系統仿真有一定的使用經驗。

實驗使用的電腦如下:

CPU:

Intel Core i5 8265U

操作系統:

Microsoft Windows 10  Professional (x64), Version 22H2, Build 19045.4412

一、安裝開發工具

1. 安裝 VS2019

下載地址:https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/history#installing-an-earlier-release

選擇 BuildTools

下載后運行,選擇 “使用C++的桌面開發”

我的安裝路徑是:D:\VS\2019\BuildTools

VS2019安裝選項

安裝完成后,在系統變量中添加

CLANG_BIN=D:\VS\2019\BuildTools\VC\Tools\Llvm\x64\bin\

注意目錄 bin 最后的 “”

新建環境變量 CLANG_BIN


2. 安裝 Python 3.10

主頁:https://www.python.org/

選擇最新的穩定版本下載安裝即可。

Python安裝界面

我的安裝目錄是:D:\Python\Python310\

安裝完成后,在添加系統變量

PYTHON_HOME=D:\Python\Python310

添加系統變量 PYTHON_HOME


3. 安裝 iASL

下載地址: https://www.intel.cn/content/www/cn/zh/developer/topic-technology/open/acpica/download.html

選擇 “Windows Binary Tools”
下載后解壓安裝到 D:\iASL\ 目錄中
并在環境變量中添加

IASL_PREFIX=D:\iASL\

注意目錄 iASL 后的 “\”

添加系統變量 IASL_PREFIX


4. 安裝 NASM

主頁: https://www.nasm.us/

下載地址: https://www.nasm.us/pub/nasm/releasebuilds/2.16.03/win64/

下載后安裝到 D:\NASM\ 目錄中
并在環境變量中添加

NASM_PREFIX=D:\NASM\

注意目錄 NASM 后的 “\”

![添加系統變量 NASM_PREFIX


二、準備 EDK2 源代碼

1.從 github 下載

項目主頁:https://github.com/tianocore/edk2

使用命令

git clone https://github.com/tianocore/edk2.git edk2

或直接下載 zip 打包文件

下載解壓后,需要對項目的子模塊初始化,在 edk2 根目錄下執行命令

cd edk2git submodule update --init

2. 從 gitee 下載

項目主頁:https://gitee.com/david921518/mingw-edk2](https://gitee.com/david921518/mingw-edk2)

使用命令

git clone https://gitee.com/david921518/mingw-edk2.git mingw-edk2

或直接下載 zip 打包文件

下載解壓后,需要對項目的子模塊初始化,在 edk2 根目錄下執行命令

cd mingw-edk2git submodule update --init

此倉庫為我在 Windows MSYS2 環境中的工作倉庫,同步更新開發中遇到的各種問題,建議使用此倉庫來練習。


三、編譯測試模擬器

1. 配置項目

啟動 VS2019 的開發者命令行窗口,進入 edk2 項目的根目錄。

注意,此處我們使用 VS2019 的開發者命令行窗口而不是直接用 Windows 自帶的命令行窗口,這樣可以省去配置環境變量的步驟。當然,如果有興趣了解 VS2019 為我們設置了怎樣的環境變量,你也可以用 Windows 自帶的命令行工具一步一步添加缺少的環境變量。

VS2019 的開發者命令行窗口

運行命令,配置 EDK2 的編譯設置。此命令在每一次新開 VS2019 開發者命令行窗口都需要執行一次,在窗口未退出前執行一次后不需要再執行。

edk2setup.bat

設置 EDK2 開發環境

執行此命令后會在 Conf\ 目錄中生成項目配置文件。

其中 target.txt 是我們重點關注的。

打開 target.txt 文件,確認以下設置

TARGET                = DEBUG
...
TARGET_ARCH           = X64
...
TOOL_CHAIN_TAG        = VS2019

2. 編譯基本工具

在 edk2 的根目錄下,執行命令

cd BaseToolsnmake

執行成功,顯示如下:

編譯基本工具

3. 編譯測試模擬器

在 edk2 的根目錄下,執行命令

build

執行成功,顯示如下:

EmulatorX64

4. 運行測試模擬器

在運行模擬器前,需要將鍵盤切換到英文鍵盤,如下圖:

在這里插入圖片描述

在 edk2 的根目錄下,執行命令

cd Build\EmulatorX64\DEBUG_VS2019\X64\

進入測試模擬器的生成目錄

執行以下命令啟動模擬器

WinHost.exe

模擬器開機畫面

在 UEFI 的 shell> 環境中運行命令

fs0:

這樣 UEFI shell 就切換到主機的 Build\EmulatorX64\DEBUG_VS2019\X64\ 目錄下了。

在 UEFI shell 中運行命令

dir

可以列出當前目錄的文件信息,如下圖:

UEFI shell

最后運行命令

reset

退出模擬器。


總結

以上搭建了 EDK2 在 Windows 上使用 VS2019 進行開發的環境,并生成了第一個 EFI 模擬器程序。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14336.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

pdf加水印怎么加?3種添加水印方法分享

pdf加水印怎么加?PDF加水印不僅是為了保護文檔內容,確保信息的安全性和完整性,更是一種有效的版權保護措施。通過添加水印,您可以在文檔中嵌入公司名稱、日期、編號等信息,以明確文檔的歸屬權和使用限制。此外&#xf…

小而美:兩步完成從源碼到應用的極簡交付

作者:花三(王俊) Serverless 應用引擎 SAE 是阿里云推出的一款零代碼改造、極簡易用、自適應彈性的容器化應用托管平臺,面市以來為幾萬家企業客戶提供服務,運行穩定,廣受好評。 SAE 的出現解決了眾多企業…

Python庫之lxml的簡介、安裝、使用方法詳細攻略

Python庫之lxml的簡介、安裝、使用方法詳細攻略 簡介 lxml是一個用于處理XML和HTML文檔的Python庫,它提供了簡單易用的API來解析和生成這些文檔。lxml以其性能和易用性而受到廣泛歡迎,特別適合于需要處理大量數據或需要高性能解析的場景。 安裝 安裝…

運行時異常和編譯時異常的區別

Java中的異常被分為兩大類:編譯時異常和運行時異常。 都是RuntimeException類及其子類異常,如NullPointerException、IndexOutOfBoundsException。這些異常是不檢查異常,運行時異常的特點是Java編譯器不會檢查它,程序中可以選擇捕…

純代碼如何實現WordPress搜索包含評論內容?

WordPress自帶的搜索默認情況下是不包含評論內容的,不過有些WordPress網站評論內容比較多,而且也比較有用,所以想要讓用戶在搜索時也能夠同時搜索到評論內容,那么應該怎么做呢? 網絡上很多教程都是推薦安裝SearchWP插…

RK3588 Android13 預安裝自己的apk應用及把這個應用設置為默認桌面

1、cp -rf device/rockchip/rk3588/rk3588m_s/preinstall device/rockchip/rk3588/rk3588_t/ 2、給device/rockchip/rk3588/rk3588_t/preinstall/的存放app的文件夾改名為app-imms2,在app-imms2放入app-imms2.apk,編譯安卓源碼即可, 3、編譯完會在out/…

android sp指針的cast

sp<Base> b; sp<Derived> d; b static_cast<Base*>(d.get()); 對于c原生的智能指針&#xff0c;有static_pointer_cast之類的操作方法。可以看cppreference。

Spring Web MVC介紹及詳細教程

目錄 1.什么是Spring Web MVC&#xff1f; 1.1 MVC定義 1.2 Spring MVC與MVC關系 2.為什么要學習Spring MVC 3.項目創建 4.Spring MVC連接 4.1 RequestMapping 4.2 PostMapping和GetMapping 5.Spring MVC參數獲取 5.1 獲取單個參數 5.2 獲取多個參數 5.3 獲取普通對…

通用代碼生成器應用場景一,項目前期

通用代碼生成器是一種自動化編程軟件&#xff0c;是一種先進的編譯系統。它具有表級抽象。把系統抽象為域對象&#xff0c;枚舉&#xff0c;彈性登錄模塊&#xff0c;復雜版面和圖形報表。使用通用代碼生成器完成項目前期&#xff0c;比直接使用對應的高級語言快的多&#xff0…

element Notification 消息過多需要折疊

Notification 消息過多太長 希望能折疊 如圖下效果 element-plus 可以將dom 插入到具體的元素 結合css :nth-child 來控制樣式達到效果 element dom 只能插入到body中 所以無法使用:nth-child 1.Notification需要消息提示時設置class let eleNum 0 // 彈窗的序號 function…

vue+canvas實現逐字手寫效果

在pc端進行逐字手寫的功能。用戶可以在一個 inputCanvas 上書寫單個字&#xff0c;然后在特定時間后將這個字添加到 outputCanvas 上&#xff0c;形成一個逐字的手寫效果。用戶還可以保存整幅圖像或者撤銷上一個添加的字。 <template><div class"container"…

小紅書-社區搜索部 (NLP、CV算法實習生) 一面面經

&#x1f604; 整個流程按如下問題展開&#xff0c;用時60min左右面試官人挺好&#xff0c;前半部分問問題&#xff0c;后半部分coding一道題。 各位有什么問題可以直接評論區留言&#xff0c;24小時內必回信息&#xff0c;放心~ 文章目錄 1、自我介紹2、介紹下項目&#xff…

金額計算導致的錯誤問題匯總解決

在日常的開發中&#xff0c;前端計算金額是非常常見&#xff0c;如果不夠仔細&#xff0c;考慮不夠周全的話&#xff0c;很容易犯錯的&#xff0c;金額這個東西一但錯了是很嚴重的&#xff0c;因此總結一些常見的錯誤&#xff1a; 1.最重要的&#xff0c;涉及到計算的參數一定要…

關于做事方式的小討論

大家好&#xff0c;我是阿趙。 ??之前五一勞動節期間&#xff0c;看到了這么一個新聞&#xff1a;某動物園內部收費項目五一期間漲價&#xff0c;喂長頸鹿的樹葉&#xff0c;一枝需要30元。然后新聞下面的評論就炸鍋了&#xff0c;紛紛的指責動物園太黑心&#xff0c;一枝樹葉…

淄博公司商標駁回復審條件及流程

商標是人工審查的&#xff0c;所以不同的人會有不同的想法和意見&#xff0c;導致同一案件的審查結果不同。特別是商標審查周期縮短到5個月&#xff0c;全國平均每個工作日有1萬多個商標提交申請&#xff0c;而全國只有一個商標審查單位——國家商標局提交申請。這種情況下&…

從入門到精通:掌握Scrapy框架的關鍵技巧

在當今信息爆炸的時代&#xff0c;獲取并利用網絡數據成為了許多行業的核心競爭力之一。而作為一名數據分析師、網絡研究者或者是信息工作者&#xff0c;要想獲取網絡上的大量數據&#xff0c;離不開網絡爬蟲工具的幫助。而Scrapy框架作為Python語言中最為強大的網絡爬蟲框架之…

ubuntu當前登錄用戶IP驗證

設置一個白名單列表檢查到登錄用戶IP信息不在白名單&#xff0c;發送信息到指定郵箱 #!/bin/bash# 定義常用IP地址列表文件 KNOWN_IP_FILE"/path/to/known_ips.txt" # 替換為實際路徑# 定義郵件接收者 EMAIL_TO"test163.com"# 定義日志文件 LOG_FILE&quo…

2024-5-23

今日安排&#xff1a; 繼續審計 nf_tables 源碼 && iptables 相關學習?????復現 CTF 相關題目????mount 的使用&#xff0c;學習 namespace (昨昨昨昨昨昨昨昨昨昨昨昨昨天殘留的任務)&#xff08;&#xff1a;看我能擱到什么時候???靜不下心學習新知識就…

qmt量化交易策略小白學習筆記第11期【qmt編程之獲取股票訂單流數據--原生Python】

qmt編程之獲取股票訂單流數據 qmt更加詳細的教程方法&#xff0c;會持續慢慢梳理。 也可找尋博主的歷史文章&#xff0c;搜索關鍵詞查看解決方案 &#xff01; 感謝關注&#xff0c;需免費開通量化回測與咨詢實盤權限&#xff0c;可以和博主聯系&#xff01; 獲取股票訂單流…

Java版工程行業管理系統-提升工程項目的綜合管理能力

工程項目管理涉及眾多環節和角色&#xff0c;如何實現高效協同和信息共享是關鍵。本文將介紹一個采用先進技術框架的Java版工程項目管理系統&#xff0c;該系統支持前后端分離&#xff0c;功能全面&#xff0c;可滿足不同角色的需求。從項目進度圖表到施工地圖&#xff0c;再到…