安全之安全(security²)博客目录导读
目录
一、Hafnium简介
二、Hafnium构建
2.1.1 先决条件
2.1.1.1 构建Host
2.1.1.2 工具链
2.1.1.3 依赖
2.1.1.4 获取源码
2.1.2 构建
可信固件为Armv8-A、Armv9-A和Armv8-M提供了安全软件的参考实现。它为SoC开发人员和OEM提供了符合相关Arm规范的参考可信代码库。可信固件的代码是Arm规范的首选实现,允许快速轻松地移植到现代芯片和平台。这构成了应用程序处理器上的可信执行环境(TEE)或微控制器的安全处理环境(SPE)的基础。
ARM可用的可信固件项目如下图9宫格所示,Hafnium为其中之一。
用于实现Armv8.4-A Secure-EL2扩展的系统的参考安全分区管理器(SPM)。它允许多个隔离的安全分区(sp)在Secure-EL1上运行。贡献指南可以在文档中找到。请订阅项目电子邮件列表以参与开发讨论。Hafnium和Secure-EL2也是TF-A技术论坛讨论的主题。
文档:Trusted Firmware-A Documentation — Trusted Firmware-A 2.9.0 documentation
代码:trusted-firmware-a.git - Trusted Firmware for A profile Arm CPUs
建议使用相对较新的Linux发行版。CI运行是使用Ubuntu 22.04 LTS(64位)完成的。
建议使用以下工具链构建Hafninum和测试基础架构:
对于x86_64 Ubuntu host,
https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.6/clang+llvm-15.0.6-x86_64-linux-gnu-ubuntu-18.04.tar.xz
对于AArch64 Ubuntu host,
https://github.com/llvm/llvm-project/releases/download/llvmorg-15.0.6/clang+llvm-15.0.6-aarch64-linux-gnu.tar.xz
【注意】
不支持使用安装在主机上的本地工具链(例如/usr/bin/clang)。
使用大于或明显小于指定的工具链版本不能保证工作。
如果你使用的是推荐的Ubuntu发行版,那么你可以用下面的命令安装所需的软件包:
sudo apt install make libssl-dev flex bison python3 python3-serial
python3-pip device-tree-compiler
pip3 install fdt
Hafnium源代码保存在托管于trustedfirmware.org的Git库中。要从服务器克隆这个库可以在shell中运行以下命令:
git clone --recurse-submodules https://git.trustedfirmware.org/hafnium/hafnium.git
为了导入用于在提交消息中添加Change-Id的gerrit钩子(hooks),建议使用:
git clone --recurse-submodules https://git.trustedfirmware.org/hafnium/hafnium.git && { cd hafnium && f="$(git rev-parse --git-dir)"; curl -Lo "$f/hooks/commit-msg" https://review.trustedfirmware.org/tools/hooks/commit-msg && { chmod +x "$f/hooks/commit-msg"; git submodule --quiet foreach "cp \"\$toplevel/$f/hooks/commit-msg\" \"\$toplevel/$f/modules/\$path/hooks/commit-msg\""; }; }
在构建之前,应将PATH环境变量调整为LLVM/clang目录,例如:
PATH=
默认情况下,Hafnium SPMC是用clang为几个目标平台构建的,并附带测试。在Hafnium顶层目录中,只需输入:
make
生成的FVP镜像位于out/reference/secure_aem_v8a_fvp_vhe_clang/hafnium.bin中。
可以使用ENABLE_ASSERTIONS make变量设置最终构建中断言的存在,默认情况下该变量被设置为true,这意味着构建中包含断言。
make ENABLE_ASSERTIONS=
项目目录中的每个项目指定构建的根配置。添加项目是将支持扩展到新平台的首选方法。要构建的目标项目由project make变量选择,默认项目为“reference”。
make PROJECT=
如果你想改变make变量的值,你可能需要先使用:
make clobber
那么args.gn文件将使用新值重新生成。