美文网首页A原理/底层程序员底层原理
玩转Mac OS之UEFI(一)----Mac下搭建UEFI开发

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

作者: 陌_Carl | 来源:发表于2017-10-23 16:44 被阅读336次

    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
    System Xcode 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开发

        本文链接:https://www.haomeiwen.com/subject/apopdxtx.html