본문 바로가기
Kernel

[Linux Kernel] 부팅 초기에 Abort가 나서 로그가 안보일때

by hyeyoo 2021. 10. 16.
※ 이 블로그의 글은 글쓴이가 공부하면서 정리하여 쓴 글입니다.
※ 최대한 내용을 검토하면서 글을 쓰지만 틀린 내용이 있을 수 있습니다.
※ 만약 틀린 부분이 있다면 댓글로 알려주세요.

SLUB/SLOB 분석하다가 이것저것 수정해보고있다. 버그가 나서 고쳐야하는데 start_kernel에서 local_irq_enable을 하기만 하면 인터럽트쪽 코드 때문에 디버깅이 안되는데 Oops도 제대로 안보여서 매우 곤란해졌다.

 

그래서 한 몇시간 삽질하다가 찾은 방법이 gdb 스크립트를 활용하는 것이다. 이런게 있었다니 .. OTL..

gdb -iex 'add-auto-load-safe-path .' vmlinux # gdb 실행
target remote:1234 # 원격 접속
continue # 터질때까지 기다림
^C # SIGINT 보냄
lx-dmesg # dmesg 보여주는 스크립트

 

너무 잘보인다...

 

p.s.

왜인지 모르겠으나 l *slob_free+0x140/0x284를 하면 잘못된 라인으로 보여준다. ./script/faddr2line으로 정확하게 찾아낼 수는 있는데 매번 치려니 좀 불편... faddr2line은 sjpark님 블로그에 매우 잘 정리되어있다.

 

Kernel text addresses removed from calltrace | hacklog

최근 커널은 stakc dump 에서 콜 트레이스(Call Trace) 에 각 코드의 메모리 어드레스를 찍어주지 않습니다. 이에 대해 포스팅을 해봅니다. Call Trace 커널은 문제가 발생하거나 하면 문제의 원인을 찾을

sjp38.github.io

 

댓글