전체 글 (518) 썸네일형 리스트형 [crash-utility]wakelock - rbtree debugging(디버깅) [crash-utility] wakelock 디버깅(rbtree: wakelocks_tree) [crash-utility]wakelock - rbtree debugging(디버깅) [리눅스커널][Trace32] wakelock 디버깅 - container_of [Kernel] wakelock debug patch 코어 덤프에서 wakelock 정보를 CrashTool(red hat crash-utility)로 확인할 수 있는 팁을 공유하고자 해요. CrashTool "rbtree"에 대해 강력한 명령어를 제공하거든요. wakelocks_tree란 전역 변수에서 rb_node를 확인하고요. 0xffffffc0e397b108 아래 오프셋으로 명령어를 주면 되요. crash64> tree -t rbtree -.. crash-utility(crash tool) - ps command 커널 패닉 디버깅할 때 crash-utility를 아주 많이 쓰죠. 수 많은 명령어 중 ps를 소개하려고 합니다. ps -p 프로세스 전체의 부모와 자식 프로세스 정보를 보여줘요. crash64> ps -p PID: 0 TASK: ffffffc001580e40 CPU: 0 COMMAND: "swapper/0" PID: 0 TASK: ffffffc001580e40 CPU: 0 COMMAND: "swapper/0" PID: 0 TASK: ffffffc0f865f300 CPU: 1 COMMAND: "swapper/1" PID: 0 TASK: ffffffc001580e40 CPU: 0 COMMAND: "swapper/0" PID: 0 TASK: ffffffc0f86b8000 CPU: 2 COMMAND: "swa.. crash-utility(crashtool) - 리다이렉션 커맨드 가끔 모든 프로세스의 스택 주소를 알고 싶을 때가 있어요. 이럴 때 쓰면 좋은 명령어가 있어 소개합니다. 이 기능이 Trace32보다 확실히 좋은 것 같아요. 우선 init process의 TCB(Task descriptor) 주소를 파악해요. 흠, 0xffffffc001580e40이네요. crash64> p &init_task $1 = (struct task_struct *) 0xffffffc001580e40 모든 프로세스들이 task_struct.tasks 링크드 리스트에 매달려 있잖아요? 그럼 아래 명령어를 쳐서 task_addr란 파일로 리다이렉트 시켜요. list task_struct.tasks -h 0xffffffc001580e40 > task_addr task_addr 파일을 확인해보면 ta.. crash-utility(crashtool) - runq awk 명령어 아래 runq 명령어로 프로세스가 runqueue에 큐잉된 타입을 알 수 있는데요. crash64> runq -t CPU 0: 27382901302089 00000000000000 PID: 585 TASK: ffffffc071eb8b80 COMMAND: "android.hardwar" CPU 1: 27382901206517 00000000000000 PID: 726 TASK: ffffffc0f6e3f300 COMMAND: "DispSync" CPU 2: 27382900987194 00000000000000 PID: 18654 TASK: ffffffc089b82280 COMMAND: "pompeii_dm_router" CPU 3: 27382901150527 00000000000000 PID: 16266 T.. [crash-utility] wakelock 디버깅(rbtree: wakelocks_tree) [crash-utility] wakelock 디버깅(rbtree: wakelocks_tree) [crash-utility]wakelock - rbtree debugging(디버깅) [리눅스커널][Trace32] wakelock 디버깅 - container_of [Kernel] wakelock debug patch 이번에 crash-utility로 손 쉽게(?) wakelock 디버깅하는 방법을 소개합니다. android 시스템에서 wakelock 소스를 등록할 때는 wakelocks_tree란 rbtree에 접근을 합니다. 그럼 이 정보를 바탕으로 어떤 모듈이 wakelock을 잡고 있는지 점검 하겠습니다. 우선 wakelocks_tree.rb_node 멤버가 갖고 있는 rbnode를 확인합니다. cra.. [Best][Kernel][Stability] 스택 오염(Stack Corruption) 디버깅 아래 글에서 stack canary에 대한 내용을 다뤘습니다. 스택을 깨는 지 점검하는 루틴인데요. http://rousalome.egloos.com/9965540#216009 이번에는 다른 디버깅 패치를 작성해서 어떤 루틴이 스택 오염을 시켰는지 점검해보겠습니다. 우선 스택이 깨지는 순서를 살펴보겠습니다. 1. 아래 함수가 처음 실행될 때 순서로 스택을 푸쉬합니다. current_sp-0x1c--- R14 // 0xC06FAE8C 실행 시 스택 주소(스택 푸쉬 후) current_sp-0x18--- R3 current_sp-0x14--- R4 current_sp-0x10--- R11 current_sp-0xc---- R12 current_sp-0x8---- LR current_sp-0x4---- PC .. [Kernel] wakelock debug patch [crash-utility] wakelock 디버깅(rbtree: wakelocks_tree) [crash-utility]wakelock - rbtree debugging(디버깅) [리눅스커널][Trace32] wakelock 디버깅 - container_of [Kernel] wakelock debug patch 안드로이드에서 wake lock이란 기능이 있습니다. 그런데 대부분 wake lock을 어떤 모듈이 잡고 있어서 슬립에 못 들어가는 문제가 생기죠. 이럴 때 프로파일링하면 좋은 디버그 패치를 소개합니다. diff --git a/drivers/base/power/wakeup.c b/drivers/base/power/wakeup.c old mode 100644 new mode 100755 index.. [Kernel][Debug] 런큐에서 CFS 스케쥴러에 큐잉된 프로세스 찾기 런큐에 CFS 스케쥴러로 큐잉된 상태로 기다리는 프로세스 목록은 어디서 찾을 수 있을까요? per-cpu 타입의 runqueues.cfs_tasks 멤버를 찾으면 됩니다. 다음은 CPU4 runqueue의 예시입니다. (struct rq *) [-] (struct rq*)(((void*)&runqueues)+__per_cpu_offset[4]) = 0xFFFFFFC73E0F2900 -> ( (raw_spinlock_t) [D:0xFFFFFFC73E0F2900] lock = ((arch_spinlock_t) [D:0xFFFFFFC73E0F2900] raw_lock = ((u16) [D:0xFFFF (unsigned int) [D:0xFFFFFFC73E0F2918] nr_running = 0x3, //..... 이전 1 ··· 50 51 52 53 54 55 56 ··· 65 다음