임베디드 스터디 - 커널 모듈 원격 디버깅
임베디드 스터디 - 커널 모듈 원격 디버깅
일반 GDB로 커널 디버깅이 불가능한 이유
gdb는 디버깅 대상 프로세스에 attach하여 제어함- 커널은 프로세스가 아닌 시스템 전체를 관장하는 주체
- 커널을 제어할 상위 존재가 없어 일반 gdb 접근 불가
KGDB
- 커널 안에 디버거 스텁을 내장하여, 호스트 PC의 gdb가 원격으로 커널을 제어하는 방식
1
2
3
[타겟 보드] [호스트 PC]
커널 + KGDB 스텁 ←시리얼/네트워크→ gdb
브레이크포인트에서 멈춤 소스코드 보며 디버깅
- 커널을 일시정지시켜야 하므로 실제 운영 중인 시스템에서는 사용 어려움
kprobes
- 커널을 멈추지 않고 특정 함수 진입/종료 시점에 콜백 함수를 삽입
1
2
일반 실행 : 함수A → 함수B → 함수C
kprobes : 함수A → [콜백: 인자·반환값 기록] → 함수B → 함수C
- 시스템을 계속 실행하면서 지정한 함수 호출 시 로그를 남김
- 운영 중인 시스템에서 성능 저하 없이 동작 관찰 가능
ftrace
- 커널 함수 호출 흐름을 추적·기록하는 도구
- “start_kernel() 이후 어떤 함수들이 얼마나 호출됐는지” 확인 가능
- 성능 병목, 예상치 못한 함수 호출 경로 분석에 활용
/proc 디버그 출력
- 드라이버가
/proc/my_driver파일을 생성하여 내부 상태를 실시간 확인
1
cat /proc/my_driver # 드라이버 내부 상태 읽기
- Day 62의 “Everything is a File” 철학의 연장선 — 드라이버 상태를 파일 읽기로 확인
비교 요약
| 도구 | 시스템 중단 | 주요 용도 |
|---|---|---|
| KGDB | ✅ | 브레이크포인트·소스레벨 디버깅 |
| kprobes | ❌ | 운영 중 함수 호출 로깅 |
| ftrace | ❌ | 함수 호출 흐름 추적 |
/proc | ❌ | 드라이버 상태 실시간 확인 |
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.