리눅스 커널 동네에서 전 세계적으로 쓰고 있는 디버깅 툴을 소개하고자 합니다.
레드헷의 앤더슨이란 형님이 만든 오픈 소스로 배포한 리눅스 크래시(커널 패닉)을 분석할 수 있는 툴인데요,
리눅스 커널 커뮤니티에서도 이 툴을 활발히 쓰고 있죠.
소스를 좀 받아 볼까요? 리눅스 머신에서 아래 커맨드로 소스를 땡겨옵니다.
소스를 받고 나서 아래 명령어로 빌드를 해요.
ARM machine인 경우
make target=ARM
make target=ARM extensions
X86인 경우
make target=X86_64
make target=X86_64 extensions
이제 trace command란 오픈소스 툴을 가져올 차례입니다. 이 툴로 ftrace 각 event를 파싱할 수 있어요.
빌드 명령어는 초간단, 그냥 make 만 때리면 되요.
자자, 이제 좀 정리해볼까요?
crash tool을 빌드한 결과물은 crash, trace command을 빌드한 이미지는 trace-cmd 거거든요.
/bin/CrashTool 폴더에 각각 결과물을 복사하구요.
"make target=ARM extensions" 빌드하면 생성되는 extensions 폴더도 잊지 마세요.
austin.kim@Linux:~/bin/CrashTool$ ls -l
total 52400
-rwxrwxrwx 1 austin.kim home001 8536852 Jul 13 11:30 crash
drwxrwxrwx 4 austin.kim home001 4096 May 4 19:20 extensions
-rwxrwxrwx 1 austin.kim home001 868663 Feb 15 09:23 trace-cmd
crash_load.sh란 파일을 아래와 같이 만들고, "./crash_load.sh vmlinux" 명령어를 입력하면 실행 끝이죠.
#!/bin/sh
export CRASH_EXTENSIONS=/home001/austin.kim/bin/CrashTool/extensions
export TRACE_CMD=/home001/austin.kim/bin/CrashTool/trace-cmd
/home001/austin.kim/bin/CrashTool/crash coredump0.BIN@0x0,coredump1.BIN@0xc0000000 -p 4096 -m phys_base=0x80000000 --no_panic --smp $1
실행 결과 화면입니다. 참 쉽죠.
KERNEL: vmlinux
DUMPFILES: /var/tmp/ramdump_elf_1X1HKt [temporary ELF header]
DDRCS0.BIN
DDRCS1.BIN
CPUS: 4
DATE: Wed Nov 29 15:24:00 2017
UPTIME: 00:35:30
LOAD AVERAGE: 6.66, 7.02, 5.86
TASKS: 363
NODENAME: localhost
RELEASE: 3.18.66-g715eee2
VERSION: #2 SMP PREEMPT Wed Nov 29 12:37:14 KST 2017
MACHINE: armv7l (unknown Mhz)
MEMORY: 2 GB
PANIC: "kernel BUG at /src/3.18_kernel_ver/kernel/lib/list_debug.c:40!"
PID: 0
COMMAND: "swapper/0"
TASK: c1917578 (1 of 4) [THREAD_INFO: c1900000]
CPU: 0
STATE: TASK_RUNNING
WARNING: reported panic task e6357840 not found
crash>
#Reference
디버깅이란
ftrace
임베디드 디버거의 전설 Trace32
편하게 커널 코드를 수정할 수 있는 디버깅용 Debugfs 드라이버 코드 소개
# Reference: For more information on 'Linux Kernel';
디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 1
디버깅을 통해 배우는 리눅스 커널의 구조와 원리. 2
'유용한 디버깅 팁 > crash utility and vmcore' 카테고리의 다른 글
[Debugging] crash-utility (11/10/2023) (0) | 2023.11.10 |
---|---|
[crash-utility] 컴파일 에러: curses.h: No such file or directory! (0) | 2023.05.06 |
[crash-utility] crash-utilty 실행 시 디버깅 옵션(-d 6) (0) | 2023.05.05 |
[디버깅] Crash-Utility(디버깅 패치) (0) | 2023.05.05 |
Crash 명령어 (0) | 2023.05.05 |