一、windows下编译环境搭建

1.1 软件环境

  1. 操作系统:windows10
  2. 编译器:VS2019
  3. Python38 :python-3.8.0-amd64.exe
  4. ASL :iasl-win-20210730.zip
  5. NASM :nasm-2.13.03-installer-x64.exe
  6. git
  7. qemu :qemu-w64-setup-20210825.exe

1.2 编译EmulatorPkg

1.2.1 下载最新edk2

从github的edk2仓库下载

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

1.2.2 修改.gitmodules 文件

下载的edk2里面会有一个.gitmodules 文件,国内同步不了.gitmodules里面子模块的内容,我把里面的子模块都同步到了我的gitee仓库里面,所以直接修改成gitee上面对应的链接就行。

[submodule "CryptoPkg/Library/OpensslLib/openssl"]path = CryptoPkg/Library/OpensslLib/opensslurl = https://gitee.com/zl_work/edk_moudels_openssl.git
[submodule "SoftFloat"]path = ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3url = https://gitee.com/zl_work/edk_modules_berkeley-softfloat-3.git
[submodule "UnitTestFrameworkPkg/Library/CmockaLib/cmocka"]path = UnitTestFrameworkPkg/Library/CmockaLib/cmockaurl = https://gitee.com/zl_work/edk_modules_edk2-cmocka.git
[submodule "MdeModulePkg/Universal/RegularExpressionDxe/oniguruma"]path = MdeModulePkg/Universal/RegularExpressionDxe/onigurumaurl = https://gitee.com/zl_work/edk_modules_oniguruma.git
[submodule "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli"]path = MdeModulePkg/Library/BrotliCustomDecompressLib/brotliurl = https://gitee.com/zl_work/edk_modules_brotli.git
[submodule "BaseTools/Source/C/BrotliCompress/brotli"]path = BaseTools/Source/C/BrotliCompress/brotliurl = https://gitee.com/zl_work/edk_modules_brotli.gitignore = untracked
[submodule "RedfishPkg/Library/JsonLib/jansson"]path = RedfishPkg/Library/JsonLib/janssonurl = https://gitee.com/zl_work/edk_modules_jansson.git

1.2.3 下载对应子模块

修改.gitmodules 完毕之后,在edk2目录里面执行 git submodule update --init

1.2.4 设置环境变量

一般设置环境变量有两种方法:

  1. 右键计算机->高级系统设置->环境变量
  2. 在bat文件里面set

这里我选择使用第二种,在edk2/edksetup.bat增加

set NASM_PREFIX=C:\Program Files\NASM\
set IASL_PREFIX=C:\Program Files\ASL\
set WORKSPACE=C:\bios_code\edk2\
set PACKAGES_PATH=C:\bios_code\edk2\
set PYTHON_HOME=C:\Program Files\Python\Python38\
set CLANG_BIN=C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\Llvm\8.0.0\bin\

1.2.5 设置编译项

执行edksetup.bat之后,编辑edk2/Conf\target.txt

TARGET = RELEASE
TARGET_ARCH = X64
TOOL_CHAIN_TAG = VS2019
ACTIVE_PLATFORM = EmulatorPkg/EmulatorPkg.dsc

1.2.6编译BaseTool

执行 edksetup.bat rebuild编译工具链

1.2.7 编译EmulatorPkg

执行edksetup.bat,然后使用build,成功如下:

1.3运行emulatorPkg模拟器

1.3.1 使用命令行调试

在Buid完之后,在edk2\Build\EmulatorX64\RELEASE_VS2019\X64会生成winhost.exe,可以直接在edk根目录运行

cd Build\EmulatorX64\RELEASE_VS2019\X64 && winhost.exe


注:build的时候最好系统输入法最好切换到英文模式,否则可能会出现模拟器失去焦点问题

1.3.2 使用VS2019调试

因为我这里使用的是vs2019,所以要重新更改解决方案的内容

  1. 编辑EmulatorPkg\Win\VS2017\BuildVS.bat
cd ../../../
@call edksetup.bat
build -p EmulatorPkg\EmulatorPkg.dsc -t VS2019 %*
  1. 使用vs2019打开EmulatorPkg\Win\VS2017\Win.sln解决方案,右键属性按照自己对应路径更改输出目录工作目录

  2. 点击本地调试器,就可以开始调试了

1.3 使用qemu虚拟机调试OvmfPkg

修改 edksetup.bat设置qemu默认运行path

set PATH=%PATH%;C:\Program Files\qemu
  1. 执行 build -D ADD_SHELL_STRING 指令编辑模拟器
  2. 执行 build -p OvmfPkg/OvmfPkgX64.dsc 编译 OvmfPkg
  3. 执行build -p OvmfPkg/OvmfPkgX64.dsc -D DEBUG_ON_SERIAL_PORT即可看到BIOS CODE的DEBUG信息
  4. 编译完成,Build\OvmfX64\RELEASE_VS2019\FV/Ovmf.fd,就是可以在虚拟机下面运行的bios
  5. 使用qemu运行OvmfPkg的bios
qemu-system-x86_64.exe -bios "C:\bios_code\edk2\Build\OvmfX64\RELEASE_VS2019\FV\OVMF.fd" -serial stdio -net none

二、linux下编译环境搭建

操作系统:ubuntu20.04.2

2.1 软件环境

2.1.1安装git

sudo apt install git

2.1.2 安装python3

sudo apt install python3 python3-distutils python3-pip

2.1.3 安装编译相关

  • 安装UUID-DEV, 包含编译时所需要的源文件
  • 安装NASM, 用来编译X86汇编代码
  • 安装BIOSON和FLEX, 编译ACPICA工具需要
sudo apt install uuid-dev nasm bison flex

2.1.4 安装GCC 和 MAKE等编译工具

sudo apt install build-essential

因为我们使用的是 ubuntu20.04 所以安装gcc 版本为9,但是UEFI代码支持 GCC4.8 、GCC4.9 、GCC5进行编译,所以需要安装其中一个版本。

安装gcc5

这里直接安装,在默认安装源找不到安装包候选

两种方法进行安装:

  1. 需要直接下载安装包安装
    安装包地址
  2. 或者添加软件源,使用apt安装
    打开sources.list
sudo vim /etc/apt/sources.list

添加源

deb http://dk.archive.ubuntu.com/ubuntu/ xenial main
deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe

更新

sudo apt update

使用apt下载

sudo apt install gcc-5 g++-5

为gcc-5配置替代版本,并将优先级与之关联

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 80 --slave /usr/bin/g++ g++ /usr/bin/g++-5 --slave /usr/bin/gcov gcov /usr/bin/gcov-5

使用update-alternatives命令更改gcc-5为默认版本

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 40
sudo update-alternatives --config gcc

2.2 编译运行EmulatorPkg

2.2.1 从github下载edk2、edk2-libc、acpica

  1. edk2 : 开发UEFI应用、驱动和固件所需的主要开发包
  2. edk2-libc : 提供Stdlib库,允许开发者使用C标准库开发UEFI程序
  3. acpica : 编译ACPI工具的开发包
git clone https://github.com/tianocore/edk2.git
git clone https://github.com/tianocore/edk2-libc.git
git clone https://github.com/acpica/acpica.git

2.2.2 修改.gitmodules 文件

下载的edk2里面会有一个.gitmodules 文件,国内同步不了.gitmodules里面子模块的内容,我把里面的子模块都同步到了我的gitee仓库里面,所以直接修改成gitee上面对应的链接就行。

[submodule "CryptoPkg/Library/OpensslLib/openssl"]path = CryptoPkg/Library/OpensslLib/opensslurl = https://gitee.com/zl_work/edk_moudels_openssl.git
[submodule "SoftFloat"]path = ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3url = https://gitee.com/zl_work/edk_modules_berkeley-softfloat-3.git
[submodule "UnitTestFrameworkPkg/Library/CmockaLib/cmocka"]path = UnitTestFrameworkPkg/Library/CmockaLib/cmockaurl = https://gitee.com/zl_work/edk_modules_edk2-cmocka.git
[submodule "MdeModulePkg/Universal/RegularExpressionDxe/oniguruma"]path = MdeModulePkg/Universal/RegularExpressionDxe/onigurumaurl = https://gitee.com/zl_work/edk_modules_oniguruma.git
[submodule "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli"]path = MdeModulePkg/Library/BrotliCustomDecompressLib/brotliurl = https://gitee.com/zl_work/edk_modules_brotli.git
[submodule "BaseTools/Source/C/BrotliCompress/brotli"]path = BaseTools/Source/C/BrotliCompress/brotliurl = https://gitee.com/zl_work/edk_modules_brotli.gitignore = untracked
[submodule "RedfishPkg/Library/JsonLib/jansson"]path = RedfishPkg/Library/JsonLib/janssonurl = https://gitee.com/zl_work/edk_modules_jansson.git

2.2.3 下载对应子模块

修改.gitmodules 完毕之后,在edk2目录里面执行 git submodule update --init

git submodule update --init

2.2.4 编译ACPICA

make -C ./acpica/

2.2.5 编译Basetools

进入edk2目录,执行

make -C BaseTools

第一次编译有出现 g++ 之类的问题,执行

sudo apt-get install g++

再重新执行make -C Basetools/

2.2.6 设置开发工具路径

把如下内容加入到 edk2/edksetup.sh里面

export PYTHON_COMMAND=/usr/bin/python3
export IASL_PREFIX=/home/zl/bios_space/acpica/generate/unix/bin/

2.2.7 编译uefi运行程序

执行设置环境变量脚本,在bios_space目录

./edk_export.sh
source edk2/edksetup.sh

编译MdeModulePkg/Application/HelloWorld

build -p MdeModulePkg/MdeModulePkg.dsc -m MdeModulePkg/Application/HelloWorld/HelloWorld.inf -a IA32 -t GCC5

2.2.8 编译运行EmulatorPkg

在EmulatorPkg目录,执行

./build.sh
./build.sh run

出现
gcc 没有安装完全

sudo apt-get install gcc-multilib

安装完成,重新执行

./build.sh
./build.sh run

2.3 使用qemu虚拟机调试OvmfPkg

2.3.1 安装qemu

sudo apt-get install qemu
sudo apt install qemu-system-x86

2.3.2 先build OvmfPkg ,进入目录执行

./build.sh

2.3.3 run qemu虚拟机

 qemu-system-x86_64 -bios  "/home/zl/bios_space/edk2/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd" -net none -hda fat:rw:/home/zl/bios_space/edk2/OvmfPkg/qemu_tmp
  • /home/zl/bios_space/edk2/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd -------> 编译ovmf的fd路径
  • /home/zl/bios_space/edk2/OvmfPkg/qemu_tmp -------> 是在ovmfpkg里面建的文件夹,挂载到qemu虚拟机,uefi shell下的FS0

uefi开发环境搭建相关推荐

  1. 飞腾FT2000/4 u-boot/UEFI开发环境搭建

    参考 UEFI开发与调试-edk2中子目录介绍 ACP基础--Resource Descriptors for ACPI ubuntu16.04操作系统下的edk2安装 [UEFI实战]如何在OS下获 ...

  2. UEFI入门之EDK II开发环境搭建

    EDK II是开源的对UEFI标准的实现,目前主流的IBV(BIOS代码供应商,像AMI.Insyde和Byosoft等)的代码都是基于EDK II做二次开发.本文将介绍在Windows10系统中使用 ...

  3. Android开发 环境搭建(ubuntu)

    通过本节实现Android开发的环境搭建,主要内容包括: (1)Linux系统安装. (2)开发工具安装. (3)刷机. 2003年10月,Andy Rubin等人创建Android公司,并组建And ...

  4. linux下安装EDK2开发环境,EDK2开发环境搭建 - osc_y9wmeuxa的个人空间 - OSCHINA - 中文开源技术交流社区...

    EDK2开发环境搭建 来源 https://blog.csdn.net/rikeyone/article/details/80759724 EDK2全称为"uEFI Development ...

  5. Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建

    目前,微软针对Windows IoT计划支持的硬件包括树莓派2,Minnow Board MAX 和Galileo (Gen 1和Gen 2).其中,Galileo (Gen 1和Gen 2)运行的是 ...

  6. Android环境搭建和Android HelloWorld—Android开发环境搭建

    Android_Android开发环境搭建-搭建Android的开发环境 1.我考虑先下载JDK7.0,在JDK的安装中,考虑一般SDK都是向上兼容的,于是选择了最高的版本7.0 这里是我总结的详细的 ...

  7. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  8. uefi 嵌入式Linux,面向嵌入式平台的高级UEFI开发环境.PDF

    面向嵌入式平台的高级UEFI开发环境 面向嵌入式平台的高级 UEFI 开发环境 晋磊, 技术市场工程师, 英特尔 周鹏程, 开发经理, 百敖软件* 姜波, 首席技术官, 盛博科技* PTAS003 议 ...

  9. Go:分布式学习利器(1) -- 开发环境搭建 + 运行第一个go程序

    文章目录 为什么要学习 go 开发环境搭建 -- MAC 运行第一个go程序 go 函数的返回值设置 go 函数的命令行参数 为什么要学习 go 在如下几个应用场景的需求下产生了go: 超大规模分布式 ...

  10. 智能合约开发环境搭建及Hello World合约

    如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...

最新文章

  1. openGL学习笔记(1)——常用方法原型解释
  2. ICML 2019:序列到序列自然语言生成任务超越BERT、GPT!微软提出通用预训练模型MASS | 技术头条...
  3. 大数据分布式集群搭建(6)
  4. 揭秘人工智能面试内容:8家国际巨头机器学习面试题目整理
  5. 山东赛区国赛答辩成绩公示
  6. 两年JAVA程序员的面试总结
  7. Blocks与Dispatch Queue的使用
  8. apache+mod_wsgi+django的环境配置
  9. CentOS7加入windows 2008 AD域
  10. 使用Eclipse+PyDev创建Django项目一windows下
  11. SetStretchBltMode() 防止图片失真
  12. 数据网格组件 Handsontable 不再开源,采用自拟的非商业许可证
  13. 10个要点为Joomla网站创建完善的SEO优化内容
  14. Unity3D:UDPSocket通信模块
  15. Sublime Text安装与配置
  16. 2022-2027年中国服装辅料行业市场全景评估及发展战略规划报告
  17. PS实现割掉狗熊耳朵流血效果
  18. 解决loadrunner使用谷歌浏览器录制时打不开网页的问题
  19. 思科-实验10:路由器接口 PPP 协议封装和 PAP、CHAP 验证配置
  20. 手把手教你使用R语言做出SCI论文中的表二(单因素分析表)(2)

热门文章

  1. 三国演义人物出场次数统计
  2. 曙光服务器怎么修改启动项,简单易上手 戴尔T5500工作站BIOS全设置
  3. 色差仪确保番茄酱色彩一致性
  4. 【Linux 内核】实时调度类 ④ ( 实时运行队列 rt_rq 源码分析 | 实时运行队列 rt_rq 结构体字段分析 | active、rt_nr_running、curr、next 字段 )
  5. 计算机专业 本科论文,计算机专业本科毕业设计和毕业论文的感悟
  6. 漫谈Go语言与区块链
  7. MSDN我告诉你 一个没有人注意的工具站
  8. Java前方交会后方交会编程_摄影测量后方交会、前方交会程序
  9. Web开发——Photoshop(PSD格式截取)
  10. 电子书chm转换html,chm转换为html的超简单方法