커널 로그 분석 및 디버깅
안드로이드 시스템에서 커널 디버깅은 시스템 안정성과 성능 최적화를 위해 필수적인 작업입니다. 커널 로그 분석과 디버깅을 효과적으로 수행하기 위해 다양한 도구와 기법을 사용할 수 있으며, 이번 글에서는 dmesg
와 procfs
를 활용한 기본적인 로그 분석 방법과 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 설정
- 커널을 kgdb 지원이 가능하도록 빌드해야 합니다. 이를 위해 커널 설정에서 다음 옵션을 활성화해야 합니다.
CONFIG_KGDB=y CONFIG_KGDB_SERIAL_CONSOLE=y CONFIG_KGDB_KDB=y
- kgdb를 사용하려면 시리얼 콘솔 또는 네트워크를 통해 원격 디버깅을 수행해야 합니다. 다음과 같이
kgdboc
를 설정할 수 있습니다.echo "ttyS0,115200" > /sys/module/kgdboc/parameters/kgdboc
- 이후, GDB를 실행하여 원격 디버깅을 진행할 수 있습니다.
gdb vmlinux target remote /dev/ttyS0
2.2 ftrace를 활용한 동적 트레이싱
ftrace
는 커널 함수의 실행을 추적하는 강력한 도구입니다. 특히, 시스템 호출, 스케줄링 이벤트, 드라이버 동작 등을 분석할 때 유용합니다.
2.2.1 ftrace 설정 및 사용
ftrace
는/sys/kernel/debug/tracing/
디렉터리를 통해 접근할 수 있습니다. 먼저tracing
디렉터리에 접근합니다.cd /sys/kernel/debug/tracing
- 사용 가능한 트레이서 목록을 확인합니다.
cat available_tracers
- 특정 함수 호출을 추적하려면
set_ftrace_filter
파일을 설정합니다.echo "schedule" > set_ftrace_filter
- 트레이싱을 시작합니다.
echo 1 > tracing_on
- 결과를 확인합니다.
cat trace
- 트레이싱을 종료하려면 다음 명령어를 실행합니다.
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. 마무리
커널 로그 분석과 디버깅은 시스템의 안정성과 성능 최적화를 위해 매우 중요한 과정입니다. dmesg
와 procfs
를 활용하면 기본적인 커널 로그와 시스템 상태를 빠르게 확인할 수 있으며, kgdb
와 ftrace
를 활용하면 보다 심층적인 디버깅과 성능 분석이 가능합니다. 특히 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 |