Android Trusty系统源码分析---启动和调度

本文详细分析了Android Trusty系统,探讨了其作为可信执行环境的角色,Trusty OS与Android的独立运行机制,以及Trusty的启动过程和调度机制。Trusty通过特定接口与Android通信,其内核Little Kernel负责初始化,并通过时间片轮询实现调度。文章还介绍了Trusty应用程序的执行流程,包括应用的内存布局和与Android的交互方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是Trusty OS

  为了应对开放系统的安全风险,Global Platform(GP)提出了可信执行环境的概念(TEE)。TEE要求在设备上有一个能够与Rich OS(例如Android)并存,并运行于独立空间的系统。这个系统的安全级别更高,可以为Rich OS提供密钥存储、加解密计算等服务。很明显,这种系统的实现需要获得从芯片到软件的整套支持。很早以前ARM就推出了基于自己核心的解决方案---TrustZone。而各个下游厂商通常会在此基础上各自实现自己的软件系统,对Rich OS的接口也各不相同。这在一定程度上造成了开发成本的上升以及软件系统的碎片化等问题。而Trusty OS就是谷歌针对这些问题提出的解决方案。

下图是Trusty的一个大致构架,可以看出Trusty OS和Android是相对独立运行的,他们之间通过特定的接口驱动进行通信。

image

图1 Trusty OS 框架

此外,由图中也可以看出Trusty OS可以直接接管硬件资源,这也在很大程度上提高了系统的安全性。关于这一点,在后面的应用场景中进行更详细的讨论。

有可能是因为Trusty不强制要求,目前的AOSP默认情况下似乎还没有包含这部分内容。不过我们可以通过下面的命令直接下载代码:

$ repo init -u https://android.googlesource.com/trusty/manifest
$ repo sync

启动过程

Trusty的内核与Android Bootloader有一个同样的名字---Little Kernel(LK),实际内容也差不多。我们先来看启动过程。在目录trusty/external/lk/arch/arm64中我们可以找到链接脚本system-onesegment.ld。其中的ENTRY(_start)指定了LK从_start函数开始。而_start的定义在同一目录下的文件start.S中。start.S会做一些CPU的初始化工作,然后通过bl指令跳至lk_main函数。

前面提到的lk_main在trusty/external/lk/top/main.c中,它主要完成的工作如下:

 

1 void lk_main(ulong arg0, ulong arg1, ulong arg2, ulong arg3)

 2 {

 3 … …

 4     thread_init_early();//初始化thread相关的结构体上下文

 5     arch_early_init();//初始化MMU、向量表之类构架相关的东西

 6     lk_primary_cpu_init_level(LK_INIT_LEVEL_ARCH_EARLY, LK_INIT_LEVEL_PLATFORM_EARLY - 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值