uefi开发环境搭建
一、windows下编译环境搭建
1.1 软件环境
- 操作系统:windows10
- 编译器:VS2019
- Python38 :python-3.8.0-amd64.exe
- ASL :iasl-win-20210730.zip
- NASM :nasm-2.13.03-installer-x64.exe
- git
- 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 设置环境变量
一般设置环境变量有两种方法:
- 右键计算机->高级系统设置->环境变量
- 在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,所以要重新更改解决方案的内容
- 编辑EmulatorPkg\Win\VS2017\BuildVS.bat
cd ../../../
@call edksetup.bat
build -p EmulatorPkg\EmulatorPkg.dsc -t VS2019 %*
- 使用vs2019打开EmulatorPkg\Win\VS2017\Win.sln解决方案,右键属性按照自己对应路径更改输出目录和工作目录
- 点击本地调试器,就可以开始调试了
1.3 使用qemu虚拟机调试OvmfPkg
修改 edksetup.bat设置qemu默认运行path
set PATH=%PATH%;C:\Program Files\qemu
- 执行 build -D ADD_SHELL_STRING 指令编辑模拟器
- 执行 build -p OvmfPkg/OvmfPkgX64.dsc 编译 OvmfPkg
- 执行build -p OvmfPkg/OvmfPkgX64.dsc -D DEBUG_ON_SERIAL_PORT即可看到BIOS CODE的DEBUG信息
- 编译完成,Build\OvmfX64\RELEASE_VS2019\FV/Ovmf.fd,就是可以在虚拟机下面运行的bios
- 使用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
这里直接安装,在默认安装源找不到安装包候选
两种方法进行安装:
- 需要直接下载安装包安装
安装包地址 - 或者添加软件源,使用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
- edk2 : 开发UEFI应用、驱动和固件所需的主要开发包
- edk2-libc : 提供Stdlib库,允许开发者使用C标准库开发UEFI程序
- 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开发环境搭建相关推荐
- 飞腾FT2000/4 u-boot/UEFI开发环境搭建
参考 UEFI开发与调试-edk2中子目录介绍 ACP基础--Resource Descriptors for ACPI ubuntu16.04操作系统下的edk2安装 [UEFI实战]如何在OS下获 ...
- UEFI入门之EDK II开发环境搭建
EDK II是开源的对UEFI标准的实现,目前主流的IBV(BIOS代码供应商,像AMI.Insyde和Byosoft等)的代码都是基于EDK II做二次开发.本文将介绍在Windows10系统中使用 ...
- Android开发 环境搭建(ubuntu)
通过本节实现Android开发的环境搭建,主要内容包括: (1)Linux系统安装. (2)开发工具安装. (3)刷机. 2003年10月,Andy Rubin等人创建Android公司,并组建And ...
- linux下安装EDK2开发环境,EDK2开发环境搭建 - osc_y9wmeuxa的个人空间 - OSCHINA - 中文开源技术交流社区...
EDK2开发环境搭建 来源 https://blog.csdn.net/rikeyone/article/details/80759724 EDK2全称为"uEFI Development ...
- 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)运行的是 ...
- Android环境搭建和Android HelloWorld—Android开发环境搭建
Android_Android开发环境搭建-搭建Android的开发环境 1.我考虑先下载JDK7.0,在JDK的安装中,考虑一般SDK都是向上兼容的,于是选择了最高的版本7.0 这里是我总结的详细的 ...
- qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...
作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...
- uefi 嵌入式Linux,面向嵌入式平台的高级UEFI开发环境.PDF
面向嵌入式平台的高级UEFI开发环境 面向嵌入式平台的高级 UEFI 开发环境 晋磊, 技术市场工程师, 英特尔 周鹏程, 开发经理, 百敖软件* 姜波, 首席技术官, 盛博科技* PTAS003 议 ...
- Go:分布式学习利器(1) -- 开发环境搭建 + 运行第一个go程序
文章目录 为什么要学习 go 开发环境搭建 -- MAC 运行第一个go程序 go 函数的返回值设置 go 函数的命令行参数 为什么要学习 go 在如下几个应用场景的需求下产生了go: 超大规模分布式 ...
- 智能合约开发环境搭建及Hello World合约
如果你对于以太坊智能合约开发还没有概念(本文会假设你已经知道这些概念),建议先阅读入门篇. 就先学习任何编程语言一样,入门的第一个程序都是Hello World.今天我们来一步一步从搭建以太坊智能合约 ...
最新文章
- openGL学习笔记(1)——常用方法原型解释
- ICML 2019:序列到序列自然语言生成任务超越BERT、GPT!微软提出通用预训练模型MASS | 技术头条...
- 大数据分布式集群搭建(6)
- 揭秘人工智能面试内容:8家国际巨头机器学习面试题目整理
- 山东赛区国赛答辩成绩公示
- 两年JAVA程序员的面试总结
- Blocks与Dispatch Queue的使用
- apache+mod_wsgi+django的环境配置
- CentOS7加入windows 2008 AD域
- 使用Eclipse+PyDev创建Django项目一windows下
- SetStretchBltMode() 防止图片失真
- 数据网格组件 Handsontable 不再开源,采用自拟的非商业许可证
- 10个要点为Joomla网站创建完善的SEO优化内容
- Unity3D:UDPSocket通信模块
- Sublime Text安装与配置
- 2022-2027年中国服装辅料行业市场全景评估及发展战略规划报告
- PS实现割掉狗熊耳朵流血效果
- 解决loadrunner使用谷歌浏览器录制时打不开网页的问题
- 思科-实验10:路由器接口 PPP 协议封装和 PAP、CHAP 验证配置
- 手把手教你使用R语言做出SCI论文中的表二(单因素分析表)(2)
热门文章
- 三国演义人物出场次数统计
- 曙光服务器怎么修改启动项,简单易上手 戴尔T5500工作站BIOS全设置
- 色差仪确保番茄酱色彩一致性
- 【Linux 内核】实时调度类 ④ ( 实时运行队列 rt_rq 源码分析 | 实时运行队列 rt_rq 结构体字段分析 | active、rt_nr_running、curr、next 字段 )
- 计算机专业 本科论文,计算机专业本科毕业设计和毕业论文的感悟
- 漫谈Go语言与区块链
- MSDN我告诉你 一个没有人注意的工具站
- Java前方交会后方交会编程_摄影测量后方交会、前方交会程序
- Web开发——Photoshop(PSD格式截取)
- 电子书chm转换html,chm转换为html的超简单方法