简谈高通Trustzone的实现【转】

本文介绍了高通msm8916平台上的QSEE信任区(Trustzone)技术,详细阐述了HLOS(普通世界)与QSEE(安全世界)的软件架构,包括HLOS与QSEE之间的通信流程,以及QSApp的启动、监听和数据交换过程。通过对qseecom_security_test代码的分析,揭示了Trustzone如何提供硬件级别的安全隔离。
摘要由CSDN通过智能技术生成

本文转载自:https://blog.csdn.net/hovan/article/details/42520879

trust zone之我见知道,支持trustzone的芯片会跑在两个世界。

普通世界、安全世界,对应高通这边是HLOS,QSEE。

如下图:

如下是HLOS与QSEE的软件架构图

HLOS这两分为kernel层,user层。user层的通过qseecom提供的API起动trustzone那边的app。

qseecom driver 除了提供API,还调用scm函数做世界切换。

scm driver 那边接到qseecom的调用后,会把HLOS相关数据(包括指令参数)放入指它buffer,然后执行scm调用。

qsapp通过qsee提供的api接受来自HLOS那边的请求,并把执行结果返回HLOS。

qsee除了提供API,还与从monitor把来自HLOS的数据传给qsapp,然后把qsapp的数据返回给HLOS。

monitor就不用说了,切换世界用的,还处理shared buffer的内容。

是大概的架构图,细节比较复杂,没有开元。

下面通过一个简单的qseecom_security_test代码来说明整个调用流程。

如下图:

qseecom_security_test.c

 
  1. int main( int argc, char *argv[] )

  2. {

  3. ....

  4.  
  5. /* Initialize the global/statics to zero */

  6. memset( g_qseeCommHandles, 0, sizeof(g_qseeCommHandles) );

  7. memset( g_xors, 0, sizeof(g_xors) );


先初始化全局变量g_qseeCommHandles

 
  1. for( j = 0; j < NUM_CLIENTS; j++ ) {

  2. /* Initialize the barriers to ensure that commands aren't sent before the listeners

  3. * have been started. Otherwise, errors will be generated.

  4. */

  5. ret = sem_init( &barrier[j], 0, 0 );//初始化一个信号量

  6. if( ret ) {

  7. LOGD( "barrier init failed %i, %i", ret, errno );

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式小庄老师

要是觉得不错,就给我点支持吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值