在一个完整的optee程序中,一共多处需设置uuid,具体数量可能根据你所在的运行设备有关系;
文中简要介绍,几处设置UUID的位置、作用、及设置错误引发的异常。
CA
ca的.h文件
在ca中需要设置UUID,通常如下:
#define CRYPTO_VERIFY_UUID_ID {0x3ae0f4b5, 0x7e33, 0x4ad2, \
{
\
0x98, 0x02, 0xe6, 0x4f, 0x2a, 0x7c, 0xc2, 0x0c \
} \
}
使用变量svc_id赋值为uuid的值
TEEC_UUID svc_id = CRYPTO_VERIFY_UUID_ID;
打开会话的时候,需要用到该值,uuid是ta和ca沟通的桥梁。
result = TEEC_OpenSession(&g_TaskContext, session, &svc_id,
TEEC_LOGIN_PUBLIC, NULL, NULL, &origin);
如果 设置出错,则会报错:
InitializeContext success
ERR [610] TEES:load_ta:273: TA not found
OpenSession failed, ReturnCode=0xffff0008, ReturnOrigin=0x3
ca和ta通信,通过调用load_ta函数来实现的,该函数定义在tee_supplicant.c文件中;
从ta_dir变量指定的目录中查找与UUID相符的TA镜像,并将其内容读取到共享内存中
size = shm_ta.size;
ta_found = TEECI_LoadSecureModule(ta_dir, &uuid, shm_ta.buffer, &size);
if (ta_found != TA_BINARY_FOUND)
{
EMSG(" TA not found");
return TEEC_ERROR_ITEM_NOT_FOUND;
}
TA
TA的android.mk中
local_module := 3ae0f4b5-7e33-4ad2-9802-e64f2a7cc20c.ta
TA的makefile中
# The UUID for the Trusted Application
BINARY=3ae0f4b5-7e33-4ad2-9802-e64f2a7cc20c
TA的 .h中,这个具体看代码
/* Define the UUID of this TA */
#define TA_MY_CRYPTO_VERIFY_UUID {0x3ae0f4b5, 0x7e33, 0x4ad2, \
{
\
0x98, 0x02, 0xe6, 0x4f, 0x2a, 0x7c, 0xc2, 0x0c \
} \
}
如果配置出问题,报如下错误
InitializeContext success
OpenSession failed, ReturnCode=0xffff000f, ReturnOrigin=0x3