EFI:
它是一种可扩展固件接口,英文名Extensible Firmware Interface 的缩写,是英特尔一个主导个人电脑技术研发的公司推出的一种在未来的类PC的电脑系统中替代BIOS的升级方案
UEFI:
新型UEFI,全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。
可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的 BIOS 的继任者。
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织。
二者的区别
- EFI: v1.0版本 现在被用于Mac OS上
- UEFI: v2.0版本 适用于大多数PC电脑, 不兼容EFI的v1.0版本
如何在Mac上开发UEFI
目前开发UEFI有以下两种选择
- GNU_EFI_ToolKit
- EDK II
本次主要讲述在如何在Mac OS上搭建EDK II 开发环境,EDK II是开源的,源码放在GitHub上,并且提供了相应的build方法。不过对于像一些初次接触的人开说,编译起来还是非常困难的。就像小编足足花了一周多混迹在Google、Bing、Baidu才终于给编译成功。说起来这个问题也很是难受,小编在UBuntu、Windows上都编译的好好的,一到Mac上就出各种问题。都是眼泪啊!!
在开始之前介绍本次的编译环境
- 电脑: Mac Book Pro 2017
- 系统:Mac OS 10.12.6
- Xocde:9.0.1
在开始编译EDK II之前 需要安装依赖的程序
打开http://www.opensource.apple.com/在Developer Tools下选择最新的版本号单击进去目前最高是8.2.1,然后找到cctools-895下载,895指版本号,目前最高版本是895。
打开http://llvm.org/releases/download.html#5.0在Sources下下载LLVM Source Code目前小编这里是LLVM5.0.0
接下来把 llvm-5.0.0.src/include/llvm-c这个文件夹里的内容复制到cctools-895/include/llvm-c 这个文件夹里面 注意:不要覆盖原有的Disassembler.h文件
打开http://pan.baidu.com/s/1c2xYBVM下载libprunetrie.a 将该文件下载后复制到/usr/local/lib/目录下 部分电脑如果没有这个文件夹,那么就自行创建吧
打开http://pan.baidu.com/s/1miMeR9Y下载prnue_trie.h将该文件下载后复制到cctools-895/include/mach-o/文件夹
打开终端
$ cd cctools-895/
$ make
最后出现“dsymutil ./mtoc.NEW”就算编译成功了 接着在终端输入
$ cd cctools-895/efitools/
$ sudo cp mtoc.NEW /usr/local/bin/mtoc
同样如果出现没有这个文件夹的话,自行创建
安装HomeBrew
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安装NASM
$ brew install nasm
$ brew upgrade nasm
安装ACPI Compiler
$ brew install acpica
$ brew upgrade acpica
安装Git
brew install git
brew upgrade git
到现在为止前期的准备工作已经做好了,接下来就是编译EDK II
$ cd ~/
$ mkdir ./work
$ cd ~/work
$ git clone https://github.com/tianocore/edk2.git
$ cd ./edk2/BaseTools
$ make
配置编译环境,由于每次编译新项目都需要配置编译环境所以写一个脚本更方便。
打开Vim - 新建文件 命名为:sourcemesetup.sh
脚本内容
export EDK_TOOLS_PATH=$PWD/BaseTools
export NASM_PREFIX=/usr/local/Cellar/nasm/2.13.01/bin/
source edksetup.sh BaseTools
脚本要执行需要添加一个可执行权限
$ cd edk2
$ chmod a+x sourcemesetup.sh
修改编译方式
在edk2/Conf/路径下的target.txt 保存着edk2的编译方式
搜索 ACTIVE_PLATFORM 改为 MdeModulePkg/MdeModulePkg.dsc
搜索 TARGET_ARCH 改为 X64
搜索Tools_CHAIN_TAG 改为 XCODE5
$ cd edk2
$ source sourcemesetup.sh
$ build
在编译的过程中肯定会出现编译错误
例如 [-Werror, -Wvarags]
像这样的编译错误,可以在edk 2的编译选项中增加字段来解决
打开edk2/Conf/tools_def.txt
搜索 DEBUG_XCODE5_X64_CC_FLAGS
将-Wno-varags 添加进去保存后退出
在接下来出现的一些错误同理解决
到此为止,在Mac上的EDK II 开发环境已经搭建完成了!
小编也是初次接触UEFI,能力有限,有错误的话还请指正。如果您也是UEFI的开发人员。欢迎留下联系方式,大家一起交流,共同进步。