OPTEE Ftrace函数跟踪

安全之安全(security²)博客目录导读

OPTEE调试技术汇总

目录

一、序言        

二、Ftrace配置

三、Ftrace使用

四、Ftrace典型输出


一、序言        

        本节描述如何使用ftrace为TA生成函数调用图。该名称来自具有类似目的的Linux框架,但是OP-TEE ftrace非常具体。

        调用图记录了对函数的所有调用,并包含计时信息。因此,对于排除性能问题或优化代码来说,它是一个很有价值的工具。

二、Ftrace配置

        配置选项CFG_FTRACE_SUPPORT=y使OP-TEE能够从在用户模式下运行并使用-pg编译的TA收集函数信息。收集后,函数调用数据通过RPC发送到tee-supplicant,因此它们可以保存到磁盘,稍后使用辅助脚本(可在optee_os/scripts中找到的ftrace_format.py和symbolize.py)进行处理和显示。有关symbolize.py的使用可参考OPTEE异常调用栈解析。

        除了CFG_FTRACE_SUPPORT=y之外,另一个配置选项CFG_SYSCALL_FTRACE=y允许OP-TEE在内核模式下代表TA运行时收集系统调用的函数信息。请注意,少数内核函数无法跟踪;它们在源代码中有__noprof属性。

        第三个配置选项CFG_ULIBS_MCOUNT=y可以跟踪optee_os中包含的用户空间库以及ta使用的用户空间库(例如libutee和libutils)。

三、Ftrace使用

        使用CFG_FTRACE_SUPPORT=y构建OP-TEE OS,有选择性地配置CFG_ULIBS_MCOUNT=y和CFG_SYSCALL_FTRACE=y。

        使用-pg构建用户TA,例如,启用CFG_TA_MCOUNT=y来检测整个TA。此外,如果用户希望为特定文件设置-pg,则应在相应的子.mk中执行以下操作:cflags--y+=-pg。注意,instrumented ta有一个更大的.bss段。内存开销取决于CFG_FTRACE_BUF_SIZE宏,该宏可以使用config: CFG_FTRACE_BUF_SIZE=4096(默认值:2048,详细信息请参阅TA链接器脚本:TA /arch/$(arch)/ TA .ld. s)对用户TAs进行配置。       

        正常运行应用程序。当当前会话退出或TA执行过程中有任何中止时,tee- supplant将把函数数据写入/tmp/ftrace-.out。如果文件已经存在,则附加一个数字,例如:ftrace-.1.out。       

        运行名为ftrace_format.py的辅助脚本将函数二进制数据转换为人类可读的文本,并运行symbolize.py将函数地址转换为函数名:

        cat ftrace-.out | optee_os/scripts/ftrace_format.py | optee_os/scripts/symbolize.py -d .elf -d tee.elf

        有关QEMU的完整使用示例,请参阅commit 5c2c0fb31efb。

四、Ftrace典型输出

OPTEE Ftrace函数跟踪_第1张图片

        持续时间(函数的执行时间)显示在函数的右括号行上,如果函数是叶(leaf )函数,则显示在同一行上。换句话说,只要检测函数返回,就会显示持续时间。它包括执行函数及其任何调用者所花费的时间。计数器物理计数寄存器(CNTPCT)和计数器频率寄存器(CNTFRQ)用于计算持续时间。服务外部中断所花费的时间被减去。

        第二列是当前函数的堆栈深度。它有助于直观地匹配函数入口和退出。

参考:Ftrace (function tracing) — OP-TEE documentation documentation

你可能感兴趣的:(TEE之安全,OPTEE,TEE,Ftrace,函数跟踪,调试)