아래와 같이 독자분께서 블로그에 댓글로 문의를 주셨는데, 답신 내용이 길어져 아예 새롭게 포스팅을 합니다.
링크
문의)
커널빌드하고 설치한후 irq_trace_ftrace.sh를 실행하면 line 19: echo: write error: Invalid argument라는 에러가 뜹니다. 오타가 있었나 찾아보기도 하고 proc.c 함수명이 틀렸나하고 봐도 이상한게 없는데 뭐가 문제일지 알수 있을까요? 제가 쓴 스크립트 아래와 같이 올려봅니다.
echo rpi_get_interrupt_info bcm2835_mmc_irq > /sys/kernel/debug/tracing/set_ftrace_filter
답변)
1. available_filter_functions을 확인해보세요.
'/sys/kernel/debug/tracing/set_ftrace_filter' 파일에 지정할 수 있는 함수 이름은 아래 파일에 있어야 합니다.
'/sys/kernel/debug/trace/available_filter_functions'
이 블로그 글에 첨부한 'available_filter_functions' 파일(available_filter_functions.txt)을 보시면 다음과 같이 rpi_get_interrupt_info, bcm2835_mmc_irq 함수 이름이 보일 겁니다.
...
init_irq_proc
rpi_get_interrupt_info //<<-- 함수 이름
show_interrupts
...
bcm2835_mmc_finish_command
bcm2835_mmc_irq //<<-- 함수 이름
bcm2835_mmc_set_clock
먼저 지금 사용 중인 라즈베리 파이에서 '/sys/kernel/debug/trace/available_filter_functions' 파일을 여시고,
위에서 언급한 함수가 있는 지 확인해주세요.
available_filter_functions 파일에 'rpi_get_interrupt_info' 함수 이름이 보이지 않으면, rpi_get_interrupt_info() 함수가 제대로 라즈베리 파이에 설치가 되지 않는 것입니다.
기존 코드 대신에,
아래 구문을 입력해보시면 어느 함수를 필터로 지정하다가 문제가 생겼는지 확인할 수 있습니다.
(기존 코드)
echo rpi_get_interrupt_info bcm2835_mmc_irq > /sys/kernel/debug/tracing/set_ftrace_filter
(업데이트되는 코드)
echo bcm2835_mmc_irq > /sys/kernel/debug/tracing/set_ftrace_filter
sleep 1
echo "bcm2835_mmc_irq is enabled"
echo rpi_get_interrupt_info > /sys/kernel/debug/tracing/set_ftrace_filter
sleep 1
echo "rpi_get_interrupt_infois enabled"
Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자

최근 덧글