玩转Mac OS之UEFI(一)----Mac下搭建UEFI开发环境

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
玩转Mac OS之UEFI(一)----Mac下搭建UEFI开发环境_第1张图片
System
玩转Mac OS之UEFI(一)----Mac下搭建UEFI开发环境_第2张图片
Xcode
玩转Mac OS之UEFI(一)----Mac下搭建UEFI开发环境_第3张图片
GCC

在开始编译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

target.txt
$ cd edk2
$ source sourcemesetup.sh
$ build 

在编译的过程中肯定会出现编译错误
例如 [-Werror, -Wvarags]


编译错误

像这样的编译错误,可以在edk 2的编译选项中增加字段来解决
打开edk2/Conf/tools_def.txt
搜索 DEBUG_XCODE5_X64_CC_FLAGS
将-Wno-varags 添加进去保存后退出

tools_def.txt

在接下来出现的一些错误同理解决

到此为止,在Mac上的EDK II 开发环境已经搭建完成了!

小编也是初次接触UEFI,能力有限,有错误的话还请指正。如果您也是UEFI的开发人员。欢迎留下联系方式,大家一起交流,共同进步。

你可能感兴趣的:(玩转Mac OS之UEFI(一)----Mac下搭建UEFI开发环境)