Android/Framework

커널 로그 분석 및 디버깅

임베디드 친구 2025. 4. 22. 14:41
728x90
반응형

커널 로그 분석 및 디버깅

안드로이드 시스템에서 커널 디버깅은 시스템 안정성과 성능 최적화를 위해 필수적인 작업입니다. 커널 로그 분석과 디버깅을 효과적으로 수행하기 위해 다양한 도구와 기법을 사용할 수 있으며, 이번 글에서는 dmesgprocfs를 활용한 기본적인 로그 분석 방법과 kgdb, ftrace를 이용한 커널 디버깅 기법을 설명합니다.

1. dmesg와 procfs를 활용한 로그 분석

1.1 dmesg 명령어 활용

dmesg는 커널 메시지 버퍼의 내용을 출력하는 명령어로, 커널에서 발생한 이벤트와 오류 메시지를 확인하는 데 유용합니다. 이는 주로 부팅 과정, 드라이버 로딩, 시스템 오류 등의 문제를 분석하는 데 활용됩니다.

dmesg | less

필요한 정보를 특정 키워드로 필터링할 수도 있습니다.

dmesg | grep "error"
dmesg | grep "usb"

또한, 새로운 커널 메시지만 실시간으로 모니터링하려면 -w 옵션을 사용할 수 있습니다.

dmesg -w

1.2 procfs를 활용한 정보 확인

/proc 파일 시스템(procfs)은 커널의 상태를 파일 형태로 제공하는 가상 파일 시스템입니다. 주요 정보를 확인하는 몇 가지 예제는 다음과 같습니다.

  • 커널 버전 확인:
    cat /proc/version
  • CPU 정보 확인:
    cat /proc/cpuinfo
  • 메모리 상태 확인:
    cat /proc/meminfo
  • 실행 중인 프로세스 목록 확인:
    cat /proc/[PID]/status
    특정 프로세스의 상태를 확인할 때 유용합니다.

2. Kernel Debugging (kgdb, ftrace)

2.1 kgdb를 활용한 커널 디버깅

kgdb는 커널 레벨에서 GDB를 활용하여 디버깅을 수행할 수 있도록 해주는 기능입니다. 주로 커널 패닉, 메모리 오류 등의 문제를 분석하는 데 사용됩니다.

2.1.1 kgdb 설정

  1. 커널을 kgdb 지원이 가능하도록 빌드해야 합니다. 이를 위해 커널 설정에서 다음 옵션을 활성화해야 합니다.
    CONFIG_KGDB=y
    CONFIG_KGDB_SERIAL_CONSOLE=y
    CONFIG_KGDB_KDB=y
  2. kgdb를 사용하려면 시리얼 콘솔 또는 네트워크를 통해 원격 디버깅을 수행해야 합니다. 다음과 같이 kgdboc를 설정할 수 있습니다.
    echo "ttyS0,115200" > /sys/module/kgdboc/parameters/kgdboc
  3. 이후, GDB를 실행하여 원격 디버깅을 진행할 수 있습니다.
    gdb vmlinux
    target remote /dev/ttyS0

2.2 ftrace를 활용한 동적 트레이싱

ftrace는 커널 함수의 실행을 추적하는 강력한 도구입니다. 특히, 시스템 호출, 스케줄링 이벤트, 드라이버 동작 등을 분석할 때 유용합니다.

2.2.1 ftrace 설정 및 사용

  1. ftrace/sys/kernel/debug/tracing/ 디렉터리를 통해 접근할 수 있습니다. 먼저 tracing 디렉터리에 접근합니다.
    cd /sys/kernel/debug/tracing
  2. 사용 가능한 트레이서 목록을 확인합니다.
    cat available_tracers
  3. 특정 함수 호출을 추적하려면 set_ftrace_filter 파일을 설정합니다.
    echo "schedule" > set_ftrace_filter
  4. 트레이싱을 시작합니다.
    echo 1 > tracing_on
  5. 결과를 확인합니다.
    cat trace
  6. 트레이싱을 종료하려면 다음 명령어를 실행합니다.
    echo 0 > tracing_on

2.3 ftrace와 AOSP 연동 예제

AOSP 환경에서도 ftrace를 활용할 수 있습니다. 예를 들어, Android 디바이스에서 adb를 이용하여 ftrace를 실행할 수 있습니다.

adb shell
cd /sys/kernel/debug/tracing
echo "sched_switch" > set_event
echo 1 > tracing_on
sleep 5
echo 0 > tracing_on
cat trace > /data/local/tmp/trace_log
adb pull /data/local/tmp/trace_log .

이렇게 하면 일정 시간 동안의 스케줄링 이벤트를 수집할 수 있습니다.

3. 마무리

커널 로그 분석과 디버깅은 시스템의 안정성과 성능 최적화를 위해 매우 중요한 과정입니다. dmesgprocfs를 활용하면 기본적인 커널 로그와 시스템 상태를 빠르게 확인할 수 있으며, kgdbftrace를 활용하면 보다 심층적인 디버깅과 성능 분석이 가능합니다. 특히 AOSP 환경에서 ftrace를 활용하면 실제 디바이스에서 발생하는 문제를 효과적으로 분석할 수 있습니다.

이러한 도구들을 적절히 활용하여 Android 커널의 안정성을 확보하고 최적의 성능을 유지하시기 바랍니다.

반응형

'Android > Framework' 카테고리의 다른 글

Android 시스템 최적화  (0) 2025.04.23
Android 디버깅 기법  (0) 2025.04.21
Android 디바이스 포팅  (0) 2025.04.20
AOSP 소스 코드 수정 및 커스텀 기능 추가  (0) 2025.04.19
AOSP 빌드 및 환경 설정  (0) 2025.04.17