0
点赞
收藏
分享

微信扫一扫

【TF-M】Trusted Firmware-M TF-M 固件学习【三】

彩虹_bd07 2022-04-13 阅读 104

TF-M安全服务处理流程

本篇讲解安全服务是如何在TF-M里处理的,基于TF-Mv1.5版本。IPC模型

流程图

安全服务处理依赖于TF-M实现的IPC机制。基于连接响应的服务器与客户端模型。
由psa_connect → psa_call → psa_close的过程
在这里插入图片描述

psa_connect 请求服务的发起

一次服务的发起依赖于客户端调用PSA client APIs里的psa_connect函数开始。psa_connect传入参数SID。带入SG头进入SPE环境。TF-M里运行的SPM负责处理此连接请求。其根据SID找到service,生成user_handle。表示建立了连接,后续的IPC调用都依赖于此handle。然后打包消息发送信号,唤醒分区线程。此时,阻塞的对应的分区被唤醒的到执行,其调用psa_get从消息链表里获取消息。得到消息后处理此消息。对于connect的请求一般分区线程不做特殊处理。只调用psa_reply将其user_handle返回给客户端。通过bxns指令返回到NSPE的client。client得到handle之后表示成功建立了与安全服务的连接。后续可以使用此handle调用具体的服务。

psa_call 请求具体的服务

当psa_connect调用成功得到handle后,调用PSA client APIs里的psa_call能够调用具体的安全服务。psa_call传入从connect返回的handle和in_vec和out_vec输入输出向量,并带入SG头进入SPE环境。TF-M里运行的SPM负责处理此连接请求,然后打包消息发送信号,唤醒分区线程。此时,阻塞的对应的分区被唤醒的到执行,其调用psa_get从消息链表里获取消息。得到消息后处理此消息,分区线程需要访问in_vec和写out_vec的话需要调用PSA Partition APIs的psa_read和psa_write函数。取出信息后就可已执行具体的安全服务。执行完成后调用psa_reply将其执行结果返回给客户端。通过bxns指令返回到NSPE的client。客户端收到处理完成的结果。

psa_close 断开与服务器的连接

完成psa_call需要结束服务断开连接时。调用PSA client APIs里的psa_close函数。psa_close传入从connect返回的handle。并带入SG头进入SPE环境。TF-M里运行的SPM负责处理此连接请求,然后打包消息发送信号,唤醒分区线程。此时,阻塞的对应的分区被唤醒的到执行,其调用psa_get从消息链表里获取消息。得到消息后处理此消息。对于cloes请求,一般会释放相关资源。执行完成后调用psa_reply将其执行结果返回给客户端。通过bxns指令返回到NSPE的client。客户端收到后表示成功断开服务连接。

举报

相关推荐

0 条评论