--- /dev/null
+#!/bin/bash
+
+##
+# @file trinity-trace.sh
+# @brief trace trinity device driver events
+# @see https://github.sec.samsung.net/AIP/NPU_SystemService
+# @author Jiho Chu <jiho.chu@samsung.com>
+#
+
+# envs
+FTRACE_PATH=/sys/kernel/debug/tracing
+
+# global var
+TRACE_DURATION=2147483647L
+TRACE_STOP=false
+TRACE_BUFFER_SIZE=4096
+TRACE_OUTPUT=
+TRACE_EXECUTABLE=
+
+print_help() {
+ echo -e "Trace trinity device driver"
+ echo -e "Usage: $0 [-h] [-b SIZE] [-o OUTPUT] [-t TIME]"
+ echo -e "\th: show help"
+ echo -e "\tb: set trace buffer size"
+ echo -e "\to: output file path"
+ echo -e "\tt: trace duration (sec)"
+}
+
+sig_handler() {
+ echo "detect SIGINT"
+ TRACE_STOP=true
+}
+
+setup() {
+ echo 0 > $FTRACE_PATH/tracing_on
+ echo nop > $FTRACE_PATH/current_tracer
+
+ echo 0 > $FTRACE_PATH/events/enable
+ echo $TRACE_BUFFER_SIZE > $FTRACE_PATH/buffer_size_kb
+
+ echo 0 > $FTRACE_PATH/trace
+
+ trap sig_handler SIGINT
+}
+
+start() {
+ echo 1 > $FTRACE_PATH/events/trinity/enable
+ echo 1 > $FTRACE_PATH/tracing_on
+ echo "trace start"
+
+ if [ ! -z "$TRACE_EXECUTABLE" ]; then
+ $TRACE_EXECUTABLE
+ TRACE_STOP=true
+ fi
+
+ while [ $TRACE_STOP = false ]; do
+ TRACE_DURATION=$(($TRACE_DURATION - 1))
+ [ $TRACE_DURATION -le "0" ] && break
+ sleep 1
+ done
+}
+
+stop() {
+ echo 0 > $FTRACE_PATH/tracing_on
+ echo "trace finish"
+}
+
+print_trace() {
+ if [ ! -z "$TRACE_OUTPUT" ]; then
+ cat $FTRACE_PATH/trace > "$TRACE_OUTPUT"
+ echo "trace is recorded to $TRACE_OUTPUT"
+ else
+ cat $FTRACE_PATH/trace
+ fi
+}
+
+while getopts "b:ho:p:t:" opt; do
+ case $opt in
+ b)
+ TRACE_BUFFER_SIZE=$OPTARG
+ ;;
+ h)
+ print_help
+ exit 0
+ ;;
+ o)
+ TRACE_OUTPUT=$OPTARG
+ ;;
+ p)
+ TRACE_EXECUTABLE=$OPTARG
+ ;;
+ t)
+ TRACE_DURATION=$OPTARG
+ ;;
+ esac
+done
+
+[ ! -d "$FTRACE_PATH/events/trinity" ] && echo "trinity ftrace is not enabled" && exit 1
+[ $TRACE_DURATION -gt "0" ] && echo -e "Press 'Ctrl+C' to complete trace"
+
+setup
+start
+stop
+print_trace