echo 0 > /sys/kernel/debug/tracing/tracing_on
sleep 1
echo "tracing_off"
echo 0 > /sys/kernel/debug/tracing/events/enable
sleep 1
echo "events disabled"
echo do_init_module > /sys/kernel/debug/tracing/set_ftrace_filter
sleep 1
echo "set_ftrace_filter init"
echo function > /sys/kernel/debug/tracing/current_tracer
sleep 1
echo "function tracer enabled"
echo dwc_otg_common_irq > /sys/kernel/debug/tracing/set_ftrace_filter
sleep 1
echo "set_ftrace_filter enabled"
echo 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_entry/enable
echo 1 > /sys/kernel/debug/tracing/events/irq/irq_handler_exit/enable
echo "event enabled"
echo 1 > /sys/kernel/debug/tracing/options/func_stack_trace
echo 1 > /sys/kernel/debug/tracing/options/stacktrace
echo "function stack trace enabled"
echo 1 > /sys/kernel/debug/tracing/tracing_on
echo "tracing_on"
<idle>-0 [003] d.h1. 6060.470867: irq_handler_entry: irq=2 name=IPI
<idle>-0 [003] d.h1. 6060.470869: <stack trace>
=> __traceiter_irq_handler_entry
=> handle_percpu_devid_irq
=> generic_handle_domain_irq
=> gic_handle_irq
=> call_on_irq_stack
=> do_interrupt_handler
=> el1_interrupt
=> el1h_64_irq_handler
=> el1h_64_irq
=> arch_cpu_idle
=> default_idle_call
=> do_idle
=> cpu_startup_entry
=> secondary_start_kernel
=> __secondary_switched
name : IPI
시간 : 6060.470869
IPI가 무엇인지 궁금해서 찾아보았다.
IPI : Inter-Processor Interrupt
른 프로세서 또는 코어로부터 발생하는 인터럽트입니다. 이는 다중 프로세서 시스템에서 프로세서 간 통신 및 동기화를 위해 사용
=> arch_cpu_idle
=> default_idle_call
=> do_idle
=> cpu_startup_entry
=> secondary_start_kernel
=> __secondary_switched
이 부분은 프로세스 컨텍스트.
cat-2659 [000] ..... 11116.926854: sched_process_exec: filename=/usr/bin/cat pid=2659 old_pid=2659
cat-2659 [000] ..... 11116.926858: <stack trace>
=> __traceiter_sched_process_exec
=> bprm_execve
=> do_execveat_common.isra.50
=> __arm64_sys_execve
=> invoke_syscall
=> el0_svc_common.constprop.3
=> do_el0_svc
=> el0_svc
=> el0t_64_sync_handler
=> el0t_64_sync
cat-2659 [000] ..... 11116.928901: show_interrupts <-seq_read_iter
cat-2659 [000] ..... 11116.928906: <stack trace>
=> show_interrupts
=> seq_read_iter
=> proc_reg_read_iter
=> vfs_read
=> ksys_read
=> __arm64_sys_read
=> invoke_syscall
=> el0_svc_common.constprop.3
=> do_el0_svc
=> el0_svc
=> el0t_64_sync_handler
=> el0t_64_sync
filename = /usr/bin/cat : pid가 2659인 cat 프로세스는 /bin/cat
이후 cat-2659에서 show_interrupts 발생 =⇒ cat/proc/interrups 명령어를 입력하면 호출되는 함수