为树莓派3B+编译 64位UEFI 固件

    树莓派(RaspBerry) 是基于Arm架构的单板机,凭借着低廉的价格,丰富的社区资源风靡全球。

    在Iot 大行其道的今天,微软也在树莓派上面开发了windows iot 的操作系统。为支持Windows,微软请Intel为树莓派开发了32位的UEFI 固件(项目地址)。但是微软的这个固件非常简陋,支持的功能也很有限。国外有位大神基于微软的项目又开发了64 位的UEFI 固件RaspberryPiPkg(项目地址),可以启动Arm 版的Windows/Linux/BSD等。微软的方案在Windows 下面编译起来非常简单,就不再赘述。这里只记录一下如何编译64位的RaspberryPiPkg 。

OS:这里要求用Linux环境,例如用的是Ubuntu 18.04.2 LTS X64

Step1:安装EDK2 build 所需的基本工具集,一个命令搞定:

sudo apt-get install build-essential git uuid-dev acpica-tools nasm python 

Step2:下载安装64bit ARM 交叉编译工具集(这里与RaspberryPiPkg官方设置有差异,因为他用的是x86 OS),下载地址aarch64-linux-gnu for 64bit OS,放到工作目录下,并解压:

tar xvJf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz

Step3:下载RaspberryPiPkg:

git clone https://github.com/andreiw/RaspberryPiPkg.git

Step4:下载EDK2 code,因为某些原因要用指定的版本:

git clone git://github.com/tianocore/edk2.git
cd edk2
git reset --hard 66127011a544b90e800eb3619e84c2f94a354903

Step5:上面下载的EDK2 还需要打几个Patch:

git config --global user.email "charles@heart.com"
git config --global user.name "charles"
git am --ignore-whitespace ../RaspberryPiPkg/edk2Patches/*.patch

Step6:复制“RaspberryPiPkg\Scripts\build5”到工作目录下。并且执行它:

#最终的目录结构应该是像下面一样:
# \
# \edk2
# \RaspberryPiPkg
# \gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu
# \build5
#
修改build5里面的编译工具路径:

#export PATH=$PATH:$PWD/gcc-linaro-5.5.0-2017.10-i686_aarch64-linux-gnu/bin
export PATH=$PATH:$PWD/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin

执行build5,注意不要用root 权限来执行:

./build5

可以看到最终顺利生成 RPI_EFI.fd,这就是树莓派的UEFI 固件文件。这个文件加上闭源的GPU 固件和配置文件,放到SD卡里面就可以顺利进入UEFI Shell。

补充:

1.关于aarch64-linux-gnu,使用“sudo apt-get install gcc-aarch64-linux-gnu” 来安装的话,安装的版本是最新7.4版本。也可以正常编译,但是Release 版的文件会有奇怪的问题。所以采用RaspberryPiPkg 一致的5.5.0版本。

2.GCC 虽然要求GCC5 但是通过测试来看,使用GCC5 和GCC7 都可以正常Build 也可以启动,所以这里没有去改动GCC 的版本。想要使用GCC5的话请参考下面设定:

#下载安装gcc 5
sudo apt-get install gcc-5
#链接gcc 5到gcc
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-5 gcc

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值