Nuttx:任务追踪使用指南

本文档详细介绍了如何在Ubuntu 18.04上使用NuttX RTOS进行任务跟踪,包括安装JDK,部署TraceCompass,配置NuttX内核,设置跟踪参数,以及使用trace命令进行任务跟踪和系统调用、中断的监控。通过TraceCompass工具,可以收集和分析NuttX内核中的事件,以图形化方式展示结果,有助于理解和优化系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考链接:Task Trace — NuttX latest documentation
任务跟踪是收集 NuttX 内核中各种事件并以图形方式显示结果的工具。
它可以收集以下事件:

  • 任务执行、终止、切换
  • 系统调用的进入/离开
  • 中断的进入/离开

环境:

  • ubuntu18.04 linux version 5.4.0-42-generic
  • nuttx10.0.1
  • trace-compass-7.0.0-20210609-2151-linux.gtk.x86_64

一、JDK\JRE安装

参考链接Ubuntu安装JDK-阿里云开发者社区 (aliyun.com)

1、安装openjdk

这里注意使用openjdk11,如果使用openjdk8会无法安装TraceCompass
sudo apt-get install openjdk-11-jdk
在这里插入图片描述在这里插入图片描述

2、配置环境变量

vim ~/.bashrc
最后一行增加

export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

3、测试jdk是否安装成功

java -version
在这里插入图片描述

二、Trace Compass安装

1、下载linux版本的trace Compass

Trace Compass (eclipse.org)
我这里下载的版本是trace-compass-7.0.0-20210609-2151-linux.gtk.x86_64

2、对应目录下,进行解压

tar xvzf trace-compass-7.0.0-20210609-2151-linux.gtk.x86_64.tar.gz
在这里插入图片描述

3、启动

进入解压出来的目录,运行./tracecompass
在这里插入图片描述
启动成功
在这里插入图片描述

三、插件安装与参数设置

1、插件安装

安装完成后,执行并选择Tools -> add-ons 菜单,然后选择Install Extensions 安装名为“Trace Compass ftrace (Incubation)”的扩展。
在这里插入图片描述

2、配置nuttx

make menuconfig
	* RTOS Features → Performance Monitoring ->system performance monitor hooks
	* RTOS Features → Performance Monitoring ->instrumenation filter
	* RTOS Features → Performance Monitoring ->interrupt handler monitor hooks

在这里插入图片描述

	* Device Drivers ->Note Driver support
	* Device Drivers -> Note Driver Support-> Note driver selection -> note ram driver
	* Device Drivers -> Note Driver Support-> Scheduler instrumentation filter control driver

在这里插入图片描述

	* Application Configuration  -> System Libraries and NSH Add-Ons -> trace command
	* Application Configuration  -> System Libraries and NSH Add-Ons -> system command

四、任务追踪命令trace可配置参数说明

1、 CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE
配置路径:RTOS Features → Performance Monitoring->Default instrumentation filter mode

  • 指定默认过滤器模式。如果设置了以下位,则在引导时启用相应的检测。
  • 位 0 = 启用检测; 位 1 = 启用系统调用检测; 位 2 = 启用 IRQ 检测 ;位 3 = 启用收集系统调用参数

2、 CONFIG_SCHED_INSTRUMENTATION_HIRES
配置路径:RTOS Features -> Performance Monitoring -> System performance monitor hooks (SCHED_INSTRUMENTATION [=y]) -》Use Hi-Res RTC for instrumentation
如果启用,请使用更高分辨率的系统计时器进行检测。
3、 CONFIG_DRIVER_NOTERAM_BUFSIZE
以字节为单位指定笔记缓冲区大小。较高的值可以容纳更多的记录,但会消耗更多的内核内存。
4、 CONFIG_DRIVER_NOTERAM_TASKNAME_BUFSIZE
以字节为单位指定任务名称缓冲区大小。缓冲区用于在检测期间保存任务的名称。通过使用此缓冲区,跟踪转储可以在检测数据中找到并显示与给定 pid 对应的任务名称。如果指定为 0,则禁用此功能并且跟踪转储仅显示新创建的任务的名称。
5、 CONFIG_DRIVER_NOTERAM_DEFAULT_NOOVERWRITE
如果启用,默认情况下,当缓冲区已满时,停止覆盖循环缓冲区中的旧笔记。这对于保留系统启动开始时的检测数据很有用。

五、trace 命令说明

  1. 启动任务跟踪
    trace start [-c][<duration>]
  • -c: 继续之前的跟踪。在开始新的跟踪之前不会清除跟踪数据。
  • <duration> : 以秒为单位指定跟踪的持续时间。任务跟踪在指定时间段后停止。如果未指定,则跟踪将继续,直到被命令停止。
  1. 停止任务跟踪
    trace stop

  2. 跟踪命令(跟踪某个命令)
    在运行指定命令时获取跟踪。命令终止后,停止任务跟踪。要使用此命令,需要启用 CONFIG_SYSTEM_SYSTEM。
    trace cmd [-c] <command> [<args>...]

  • -c :继续之前的跟踪。在开始新的跟踪之前不会清除跟踪数据。
  • <command> : 指定命令以获取任务跟踪。
  • <args> :命令的参数。

例子:nsh > trace cmd sleep 1

  1. 跟踪转储
    输出跟踪结果。如果任务跟踪正在运行,它会在输出之前停止。
    trace dump [-c][<filename>]
  • 在输出之前不要停止跟踪。由于转储跟踪本身是一项任务活动,并且在输出时添加了新的跟踪数据,因此转储永远不会停止。
  • : 指定文件名以保存跟踪结果。如果未指定,则将跟踪结果显示到控制台。
  1. 跟踪模式
    设置任务跟踪模式选项。默认值由内核配置CONFIG_SCHED_INSTRUMENTATION_FILTER_DEFAULT_MODE 给出。
    trace mode [{+|-}{o|s|a|i}...]
  • +o :启用覆盖模式。跟踪缓冲区是一个环形缓冲区,如果缓冲区中没有可用空间,它可以覆盖旧数据。启用此行为。
  • -o : 禁用覆盖模式。当缓冲区已满时,将处理新的跟踪数据。这对于保留跟踪开始的数据很有用。
  • +s : 启用系统调用跟踪。它记录了应用程序发出的进入/离开系统调用的事件。默认情况下会记录所有系统调用。 trace syscall 命令可以过滤要记录的系统调用。
  • -s : 禁用系统调用跟踪。
  • +a : 启用记录系统调用参数。它将传递给发出的系统调用的参数记录到跟踪数据中。
  • -a : 禁用记录系统调用参数。
  • +i : 启用中断跟踪。它记录跟踪时发生的进入/离开中断处理程序的事件。默认情况下会记录所有 IRQ。 trace irq 命令可以过滤要记录的 IRQ。
  • -i : 禁用中断跟踪。
  1. 跟踪系统调用
    配置系统调用跟踪过滤器。
    trace syscall [{+|-}<syscallname>...]
  • +<syscallname> :将指定的系统调用名称添加到过滤器中。过滤后的系统调用的执行不会记录到跟踪数据中。
  • -<syscallname> :从过滤器中删除指定的系统调用名称。
    通配符“*”可用于指定系统调用名称。例如“trace syscall +sem_*”过滤以“sem_”开头的系统调用,如sem_post()、sem_wait()、…
    如果未指定命令参数,则显示当前过滤器设置如下。
nsh> trace syscall
Filtered Syscalls: 16  
    getpid  
    sem_destroy  
    sem_post  
    sem_timedwait  
    sem_trywait  
    sem_wait  
    mq_close  
    mq_getattr  
    mq_notify  
    mq_open  
    mq_receive  
    mq_send  
    mq_setattr  
    mq_timedreceive  
    mq_timedsend  
    mq_unlink
  1. 跟踪中断
    配置中断跟踪过滤器。
    trace irq [{+|-}<irqnum>...]
  • +<irqnum> :将指定的 IRQ 编号添加到过滤器。过滤后的 IRQ 处理程序的执行不会记录到跟踪数据中。
  • -<irqnum>:从过滤器中删除指定的 IRQ 编号。
    通配符“*”可用于指定所有 IRQ。如果未指定命令参数,则显示当前过滤器设置如下。
nsh> trace irq
Filtered IRQs: 2  
    11
    15

六、使用示例

1、trace start 开启追踪
2、调用hello 模拟其他任务启动
3、trace dump 输出任务追踪信息
在这里插入图片描述
可以看到红框处显示的追踪信息里面有我们调用hello是的情况。由于我这里使用过的是仿真sim,使用trace dump xxx要导出任务追踪记录会失败。无法导出后使用trace compass可视化界面分析系统的任务调用情况。
这里暂时先写到这里,后续如果有板子开始调试会继续更新。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值