ubuntu1604下搭建UEFI开发环境图解
本机器环境
1.EKD2开发环境简介和下载
EDK2全称为“uEFI Development Kit”,是intel开源的一套符合UEFI标准的实现,点击进行下载 ,这个开源项目,版本众多,今天选用vUDK2018这个tag进行演示,主要这个版本有AppPkg和OptionRomPkg文件夹开发方便
也可以通过svn进行下载,svn路径是http://svn.code.sf.net/p/edk2/code/branches(推荐)
2. 安装gcc编译环境并且编译BaseTool
2.1 安装gcc编译环境
sudo apt-get install build-essential uuid-dev iasl git gcc-5 nasm python3-distutils
关于Ubuntu的build-essential有什么作用的问题,请点击我
2.2 编译BaseTool,生成所需的工具软件
#到解压的EDK2根目录执行
sudo make -C BaseTools
3.source edksetup.sh 生成build配置文件
可以在Conf/targe.txt中修改build编译选项,也可以在build的时候加入参数进行编译
3.1 修改target.txt内容
//运行模拟器的时候配置成EmulatorPkg/ EmulatorPkg .dsc (模拟器只能在IA32下使用,不建议使用)
//运行虚拟机的的时候配置成OvmfPkg/OvmfPkgX64.dsc(64位)或者OvmfPkg/OvmfPkgIa32.dsc(32位)
ACTIVE_PLATFORM = EmulatorPkg/ EmulatorPkg .dsc
TARGET = DEBUG
TARGET_ARCH = X64 //如果是32位则写成IA32
TOOL_CHAIN_TAG = GCC5
MAX_CONCURRENT_THREAD_NUMBER = 4 #我的机器上支持多线程
BUILD_RULE_CONF = Conf/build_rule.txt
也可在build的时候加入参数,这个时候可以忽略修改target.txt内容,可以不修改target.txt内容(不推荐用命令行,太麻烦)
- p PLATFORMFILE: 目标平台描述文件
- a TARGETARCH: 目标平台X64/IA32
- b BUILDTARGET: 可选项(DEBUG, RELEASE, NOOPT),将只编译dsc文件中特定的模块
- m MODULEFILE: 编译目标module
- t TOOLCHAIN : 使用目标编译器编译
- n THREADNUMBER : 多线程编译
- D MACROS: Macro格式: “Name [= Value]”,传入宏定义
3.2 编译UEFI模拟器和运行
build
build run
Note:如果用以前的项目的时候build可能会找不到路径,这是因为用了以前的配置,这个时候可以改下edk2\Conf下的BuildEnv.sh 的工具的路径。
4. QEMU虚拟机中使用OVMF(虚拟机固件)
QEMU是目前广泛使用的计算机仿真器和虚拟机。在QEMU虚拟机中,用户可以使用自定义的固件,利用这个特性我们可以测试OVMF.
OVMF(open Virtual Machine Fireware,开放虚拟机固件)是用于虚拟机上的UEFI固件。在开发过程中,我们需要不断地测试所开发的产品。在模拟器中测试非常方便,但是模拟器功能有限,并且模拟器只能支持32程序(X64的机器上build run的时候失败)。另外,在真实的UEFI环境中,测试又往往比较繁琐。在虚拟机中测试无疑是一种方便,快捷的方式,它既能较好地模拟真实环境,又可以做到快速方便。EDK2提供了制作虚拟机固件的方法,成为OVMF。
4.1 安装 QEMU虚拟机
sudo apt-get install qemu
查看QEMU支持的CPU架构
4.2 制作OVMF
编译OVMF包
ACTIVE_PLATFORM配置成OvmfPkg/OvmfPkgX64.dsc(64位)或者OvmfPkg/OvmfPkgIa32.dsc(32位cpu)
然后进行执行
build
编译后的固件为edk2/Build/OvmfX64/DEBUG_GCC5/FV\的OVMF.fd文件
4.3 运行OVMF
//到OVMF.fd目录运行
qemu-system-x86_64 -bios OVMF.fd
输入exit后