Linux Kernel(4.19) Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

110258
1323
114612


[리눅스커널][디버깅] Red Hat Crash-Utility(크래시 유틸리티) 설치 [Kernel] Debug Feature

리눅스 커널 동네에서 전 세계적으로 쓰고 있는 디버깅 툴을 소개하고자 합니다.
https://people.redhat.com/anderson/

레드헷의 앤더슨이란 형님이 만든 오픈 소스로 배포한 리눅스 크래시(커널 패닉)을 분석할 수 있는 툴인데요, 
리눅스 커널 커뮤니티에서도 이 툴을 활발히 쓰고 있죠.

소스를 좀 받아 볼까요? 리눅스 머신에서 아래 커맨드로 소스를 땡겨옵니다.
git clone https://github.com/crash-utility/crash.git

소스를 받고 나서 아래 명령어로 빌드를 해요.
ARM machine인 경우
make target=ARM
make target=ARM extensions

X86인 경우
make target=X86_64
make target=X86_64 extensions

이제 trace command란 오픈소스 툴을 가져올 차례입니다. 이 툴로 ftrace 각 event를 파싱할 수 있어요.
git clone https://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git

빌드 명령어는 초간단, 그냥 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

덧글

  • 하루n 2019/03/08 19:05 # 삭제 답글

    언제나 좋은 글을 써주셔서 감사드립니다!

    그동안 이렇게 좋은 내용들을 실제로 따라해보고 싶었지만
    crash 컴파일 시 에러가 발생하여 막혔다가 어제 문제를 해결했습니다.
    결론은 64비트 개발환경의 고질적인 문제였군요

    제 경우에는 다음의 패키지를 설치하여 해결했습니다

    sudo apt-get install lib32tinfo-dev
    sudo apt-get install zlib1g-dev:i386

    일단 제 환경은 Ubuntu 14.04 x64 입니다
    crash 컴파일 시 no termcap library found 에러가 발생하는데
    구글링을 해보니 libncurses5-dev 패키지를 설치하라고 하더군요
    근데 이미 설치가 되어있다고 합니다

    termcap 라이브러리를 직접 컴파일해서 라이브러리 추가를 해봤지만 실패했습니다

    그러다가 packages.ubuntu.com 에서 libtermcap를 검색되게 됬는데
    i386 버전 패키지를 보게되어 설치하니 이번에는 zconf.h 가 없다고 뜨더군요

    다시 고통받다가 zlib i386 버전 패키지 찾아서 설치를 하니
    겨우 컴파일 성공하였습니다

    여기 방문하신 다른 분들께 도움이 됬으면 합니다

    감사합니다

  • AustinKim 2019/03/09 22:27 #

    크래시 유틸리티를 빌드하시느라 고생하셨습니다.
    고군분투 끝에 좋은 결과를 얻어 다행입니다. 유익한 팁 공유해주셔서 감사드립니다.
    자주 제 블로그에 오셔서 이렇게 좋은 답글이나 궁금하신 점이 있으면 질문 올려주세요.
댓글 입력 영역