从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
int main( int argc, char *argv[] )
{
....
/* Initialize the global/statics to zero */
memset( g_qseeCommHandles, 0, sizeof(g_qseeCommHandles) );
memset( g_xors, 0, sizeof(g_xors) );
先初始化全局变量g_qseeCommHandles