2. 디버깅과 코드 학습 능력
디버깅을 하며 리눅스 커널 코드를 함께 분석하면, 다음과 같은 정보를 더 얻을 수 있습니다.
- 분석하는 코드가 동작하는 콜 스택
- 함수가 실행될 때 변경되는 자료구조
- 함수가 실행되는 빈도와 실행 시각
- 분석 대상 코드를 실행하는 프로세스
커널 소스코드 분석과 함수의 실행흐름과 실행 빈도를 함께 알아두면 좋습니다.
ex. 리눅스 커널 코드 분석의 예
$ cat /proc/interrupts 명령어를 입력하면 인터럽트의 세부 속성을 알 수 있습니다.
show_interrupts() 함수가 이 정보를 터미널로 출력합니다.
만약, 아래와 같은 정보를 확인하고싶다면?
- 인터럽트 디스크립터인 irq_desc 구조체의 action 필드에 저장된 인터럽트의 속성 정보를 점검하고싶다.
- cat /proc/interrupts 명령어를 입력하면 show_interrupts() 함수가 호출되는지 확인하고 싶다.
- show_interrupts() 함수를 호출할 때 프로세스 정보를 보고싶다.
커널 코드를 수정하여 패치코드를 작성합니다.
rpi_get_interrupt_info() 함수는 ftrace로 다음 정보를 출력합니다.
- 프로세스 이름
- 인터럽트 번호
- 인터럽트 이름
- 인터럽트 핸들러 함수 이름
인터럽트의 속성정보를 담고있는 자료구조는 인터럽트 디스크립터를 나타내는 irq_desc 구조체.
2. ftrace
2.1 ftrace 설정
ftrace를 설정하기 위해 명령어를 입력할 수도 있으며, 편의상 명령어로 작성한 셸 스크립트를 사용할 수도 있다.
3. ps 명령어 옵션
'SoC : : Architecture > : : Raspberry' 카테고리의 다른 글
dump_stack() 함수 (0) | 2024.10.10 |
---|---|
printk() 함수 (0) | 2024.10.10 |
(1) 디버깅은 문제 해결 능력의 지름길 (0) | 2024.10.10 |
Kernel Source 구조 (1) | 2024.10.10 |
리눅스 커널(Linux Kernel) 전처리 파일 생성하기 (0) | 2024.06.18 |