Zephyr tracing系统--1 简介

本文简要介绍Zephyr tracing系统的功能和特性。

Zephyr在几乎所有的内核对象中都埋入了钩子函数,通过对钩子函数的不同实现可以让上位机工具对Zephyr内核运行情况进行可视化分析。 Zephyr对tracing系统具有高配置性,可以通过配置选择一种或者多种要trace的对象,在不需要的时候可以通过配置移除tracing系统。也可以选择不同的tracing tool和后端。

Tracing对象 链接到标题

Zephyr可以tracing以下对象, 但不同的trace tool会根据实现的不一样tracing其中的全部或部分

  • SYSCALL_TRACING
  • TRACING_THREAD
  • TRACING_WORK
  • TRACING_ISR
  • TRACING_SEMAPHORE
  • TRACING_MUTEX
  • TRACING_CONDVAR
  • TRACING_QUEUE
  • TRACING_FIFO
  • TRACING_LIFO
  • TRACING_STACK
  • TRACING_MESSAGE_QUEUE
  • TRACING_MAILBOX
  • TRACING_PIPE
  • TRACING_HEAP
  • TRACING_MEMORY_SLAB
  • TRACING_TIMER

tracing tool 链接到标题

Zephyr支持多种tracing tool,在编译的时候根据其配置只能选择以下任意一种:

  • sysview
  • tracerecorder
  • ctf
  • user
  • test 如下图

sysview 链接到标题

sysview是Segger的一个trace工具,虽然sysview支持uart和快照,但目前Zephyr只支持Jlink RTT向上位机传送tracing数据流。 sysview的代码路径: modules/debug/segger:Segger sysview源代码 zephyr/modules/segger: 对Segger sysview进行初始化 zephyr/subsys/tracing/sysview: 对Segger sysview进行配置,将Segger sysview的API封装成zephyr使用的tracing API sysview实现了Zephyr所有的tracing API

tracerecorder 链接到标题

tracerecorder按照自己的格式将数据送给上位机的Tracealyzer,目前支持Jlink的RTT和ARM ITM传送数据流。 tracerecorder的代码路径: modules/debug/TraceRecoder:TraceRecoder的源代码,其中kernelports/Zephyr/streamports是Zephyr支持的,目前只有RTT和ARM ITM zephyr/modules/traceRecoder: 构建文件 zephyr对traceRecoder的封装都在外部模块中 tracerecorder实现了Zephyr所有的tracing API

CTF 链接到标题

CTF是Zephyr根据CTF标准格式实现的,支持同步和异步trace,trace的后端有4种:

  • ram: 保存在ram中
  • uart: 通过uart传输
  • usb: 通过USB传输
  • posix: 保存到文件系统

CTF的代码路径: zephyr/subsys/tracing/ Zephyr trace核心代码和backend实现,只对接CTF zephyr/subsys/tracing/CTF CTF event实现和trace API封装 CTF只实现了上下文切换,isr出入,idle和部分thread的trace API

user 链接到标题

user只实现了上下文切换,isr出入,idle的trace,这些函数以弱符号留空,可由用户在编新应用时实现强符号覆盖。 格式和backend都可以由用户自定义 user的代码路径: zephyr/subsys/tracing/user user目前只支持上下文切换,isr出入,idle的tracing

test 链接到标题

test用于,钩子函数中只有打印,目前除k_work和k_poll外其它的都实现。 user的代码路径: zephyr/subsys/tracing/test

后续文章 链接到标题

预计会写如下5篇:

  • Trace系统的配置和调用框架。
  • user和test的分析与使用,这两部分比较简单会合并为一篇文章。
  • sysview,分析实现代码,手上没有jlink就不说明如何使用了。
  • tracerecorder, 分析实现代码,如果tracealyzer的个人license申请下来了,就多写如何使用。
  • CTF,分析实现代码与使用说明,比较遗憾的时CTF是几种当中实现得最不全的。