前言
到这里我就继续开始了一个新的篇章,这个部分的内容,在我们看源码的doc文件的时候,存在了一部分的重复。但是温故而知新可以为师亦。
首先的第一个章节:SPD
这个章节主要有四个小节。
安全有效载荷调度器(SPD)
目录
- 1.OP-TEE调度器
- 2.可信小内核(TLK)调度器
- 3.可靠的调度器
- 4.ProvenCore调度器
4.1.1. OP-TEE Dispatcher
4.1.2. Trusted Little Kernel (TLK) Dispatcher
4.1.3. Trusty Dispatcher
4.1.4. ProvenCore Dispatcher
下面首先来看看我最近研究的OPTEE
1-OP-TEE调度器
OP-TEE OS是一个以Secure EL1运行的受信任操作系统。
要构建和执行OP-TEE,请遵循OP-TEE build.git中的说明
OP-TEE OS有两种不同的加载模式。默认模式将在引导期间将其作为BL32负载加载,这是平台使用的推荐技术。还有另一种技术,通过启用专门为ChromeOS添加的OPTEE_ALLOW_SMC_LOAD选项,在启动后通过SMC调用加载OP-TEE OS。根据平台配置,通过SMC调用加载OP-TEE可能不安全。如果使用该选项,请确保了解允许以这种方式加载Trusted OS所涉及的风险。
ChromeOS使用引导流程,在执行固件之前验证固件的签名,然后只有当签名有效时,TEE使用的“秘密”才可访问。然后,固件使用depthcharge(Depthcharge 实用程序)验证内核的签名,内核使用dmverity验证rootfs。
然后,在内核完成加载之后,在通过安装可写文件系统或打开网络/设备连接打开任何攻击向量之前,立即调用SMC调用以加载OP-TEE。这确保了平台是“关闭的”,并通过OP-TEE加载点运行签名代码。
2.可信小内核(TLK)调度器
TLK调度器(TLK-D)增加了对NVIDIA的Trusted Little Kernel(TLK)的支持,以与Trusted Firmware-A(TF-A)一起工作。TLK-D可以通过将其包含在平台的makefile中来编译。TLK主要用于Tegra SoC,因此虽然TF-A仅支持Tegra上的TLK,但调度器代码只能为其他平台编译。
为了编译TLK-D,我们需要一个BL32图像。由于TLKD只需要编译,所以任何BL32映像都可以。要使用TLK作为BL32,请参阅“构建TLK”部分。
BL32就绪后,通过在build命令中添加“SPD=TLKD”,可以将TLKD包含在图像中。
2.1.可信小内核(TLK)
TLK是一个以Secure EL1运行的受信任操作系统。它是NVIDIA®Trusted Little Kernel(TLK)技术的自由开源软件(FOSS)版本,它扩展了Little Kernel(LK)开发过程中可用的技术。您可以从以下位置下载LK模块化嵌入式抢占式内核,以用于Arm、x86和AVR32系统https://github.com/travisg/lk
NVIDIA实现了其可信小内核(TLK)技术,该技术设计为一个自由开源的可信执行环境(OTE)。
TLK功能包括:
- 小型抢占式内核
- 支持多线程、IPC和线程调度
- 添加了TrustZone功能
- 添加了安全存储
- 根据MIT/FreeBSD许可证
小内核(LK)的NVIDIA扩展包括:
- 用户模式
- TA的地址空间分隔
- TLK客户端应用程序(CA)库
- TLK TA库
- 通过OpenSSL加密库(加密/解密、密钥处理)
- Linux内核驱动程序
- Cortex A9/A15支持
- 电源管理
- TrustZone内存分割(可重新配置)
- 页面表管理
- 通过UART调试支持(计划使用USB)
TLK由NVIDIA托管http://nv-tegra.nvidia.com在第三方/ote_partner/tlk.git存储库下。有关TLK和OTE的详细信息,请参阅“documentation”目录下的Tegra_BSP_for_Android_TLK_FOSS_Reference.pdf手册。
2.2.构建TLK
要构建和执行TLK,请遵循Tegra_BSP_for_Android_TLK_FOSS_Reference.pdf手册中“构建TLK设备”部分的说明。
2.3.输入TLK参数
TLK需要TZDRAM大小和包含引导参数的结构。BL2将此信息作为bl32_ep_info结构的成员传递给EL3软件,其中bl32_ep_info是bl31_params_t的一部分(由BL2在X0中传递)
2.3.1.示例
bl32_ep_info->args.arg0 = TZDRAM size available for BL32
bl32_ep_info->args.arg1 = unused (used only on Armv7-A)
bl32_ep_info->args.arg2 = pointer to boot args
3.Trusty Dispatcher
Trusty是一组软件组件,支持移动设备上的可信执行环境(TEE),由Google发布和维护。
可在Trusty的Android开源项目(AOSP)网页上找到详细信息和构建说明,网址为https://source.android.com/security/trusty
3.1.引导参数
自定义启动参数可以通过提供特定于平台的函数传递给Trusty:
void plat_trusty_set_boot_args(aapcs64_params_t*args)
如果提供了此函数,则必须将args->arg0设置为分配给trusty的内存大小。如果平台不提供此功能,但定义了TSP_SEC_MEM_SIZE,则默认实现将从TSP_SEC-MEM_SIZ传递内存大小。args->arg1可以设置为特定于平台的参数块,然后args->arg2应该设置为该块的大小。
3.2.支持的平台
在Trusted Firmware-A支持的所有平台中,Trusty仅由NVIDIA的Tegra SoC验证和支持。
4.ProvenCore调度器
ProvenCore调度器(PnC-D)增加了对ProvenRun的ProvenCore微内核的支持,以与Trusted Firmware-A(TF-A)一起工作。
ProvenCore是ProvenRun S.A.S.使用演绎形式化方法开发的安全操作系统。
BL32就绪后,通过在build命令中添加“SPD=pncd”,可以将PnC-D包含在图像中。
以上就是介绍了ATF的一个组件–SPD,这个玩意是根据TEEOS是什么,SPD就是什么。
https://trustedfirmware-a.readthedocs.io/en/latest/components/spd/pnc-dispatcher.html