SoC : : Architecture/: : Raspberry

(2) 디버깅과 코드 학습 능력

Jay.P Morgan 2024. 10. 10. 23:56

 

 

  2.  디버깅과 코드 학습 능력

 
디버깅을 하며 리눅스 커널 코드를 함께 분석하면, 다음과 같은 정보를 더 얻을 수 있습니다.

 

  •   분석하는 코드가 동작하는 콜 스택
  •   함수가 실행될 때 변경되는 자료구조
  •   함수가 실행되는 빈도와 실행 시각
  •   분석 대상 코드를 실행하는 프로세스
커널 소스코드 분석과 함수의 실행흐름과 실행 빈도를 함께 알아두면 좋습니다.
 
 
 
 
 

  ex.  리눅스 커널 코드 분석의 예

 
$ cat /proc/interrupts 명령어를 입력하면 인터럽트의 세부 속성을 알 수 있습니다.

 

show_interrupts() 함수가 이 정보를 터미널로 출력합니다.

 

만약, 아래와 같은 정보를 확인하고싶다면?

  •   인터럽트 디스크립터인 irq_desc 구조체의 action 필드에 저장된 인터럽트의 속성 정보를 점검하고싶다.
  •   cat /proc/interrupts 명령어를 입력하면 show_interrupts() 함수가 호출되는지 확인하고 싶다.
  •   show_interrupts() 함수를 호출할 때 프로세스 정보를 보고싶다.

 

 

커널 코드를 수정하여 패치코드를 작성합니다.

 

 

 

 

rpi_get_interrupt_info() 함수는 ftrace로 다음 정보를 출력합니다.

  • 프로세스 이름
  • 인터럽트 번호
  • 인터럽트 이름
  • 인터럽트 핸들러 함수 이름

 

인터럽트의 속성정보를 담고있는 자료구조는 인터럽트 디스크립터를 나타내는 irq_desc 구조체.

※ irqaction 구조체의 action 필드에 속성정보가 저장됨.

 

 

 

※ irqaction 구조체 오른쪽 부분의 주석이, 인터럽트의 속성 정보. 패치코드를 입력하고 커널을 빌드하여 설치합니다.

 

 

 

 

  2.  ftrace

 

  2.1  ftrace 설정

 
​ftrace를 설정하기 위해 명령어를 입력할 수도 있으며, 편의상 명령어로 작성한 셸 스크립트를 사용할 수도 있다.
 

 

 

 

 

  3.  ps 명령어 옵션