포스트

임베디드 스터디 - 커널 모듈 원격 디버깅

임베디드 스터디 - 커널 모듈 원격 디버깅

일반 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 라이센스를 따릅니다.