DEBUGGING

포스트: 10
Tags

Posts

10 posts

ARM64- 스택 푸쉬(Stack Push) Userspace -> Kernel Space

Guillermo Austin Kim|2017년 12월 25일

유저 스페이스에서 커널 스페이스로 전환하려면 시스템 콜을 호출해야 한다 것은 마르고 닳도록 들었죠?이번에는 ARM64 Architecture에서 EL0 ->EL1로 변환될 시, Stack을 어떻게 Push하는 지 살펴볼께요. "rild"란 프로세스의 콜스택을 예를 들어 볼 께요. 잘 보면, 유저 공간에서 sendto란 시스템 콜을 호출했다는 걸 알 수 있네요.-000|do_mem_abort()-001|el1_da(asm) -->|exception-002|ch_pop_remote_rx_intent()-003|glink_tx_common()-004|glink_txv()-005|ipc_router_glink_xprt_write()-006|msm_ipc_router_write_pkt(inline)-00

특정 CPU를 끄는 패치(특정 CPU에서 커널 크래시)

Guillermo Austin Kim|2017년 12월 24일

가끔 타겟 보드에서 특정 CPU에서만 커널 패닉으로 시스템이 리셋되는 경우가 있어요.이럴 때 테스트할 수 있는 유용한 디버깅 패치를 소개하고자 해요. 아래 패치는 부팅 할 때 CPU3을 sys node에서 아예 제거시키거든요. 아예 CPU3가 안 돌게 되는거죠.diff --git a/kernel/cpu.c b/kernel/cpu.cindex 5b4440d..14cce91 100644--- a/kernel/cpu.c+++ b/kernel/cpu.c@@ -510,7 +510,7 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen) cpu_hotplug_begin(); - if (cpu_online(cpu) || !cpu_presen

Runqueue(런큐) Timestamp(실행 시간) 확인

Guillermo Austin Kim|2017년 12월 24일

보통 커널 크래시나 와치독 리셋으로 시스템이 다운된 경우 세밀하게 디버깅해야 할 때가 있어요.그런데 가끔 각 프로세스가 마지막에 어떤 순서로 실행이 됐는지 확인하고 싶을 경우가 가끔 있거든요.이 순서가 가끔 정말 중요한 순간이 가끔 있어요. 아래는 런큐에서 돌고 있는 프로세스 목록이거든요. 그럼 각각 프로세스가 어떤 순서로 실행이 되었는지 알 수 있을까요?crash64> runq -m CPU 0: [0 07:36:22.901] PID: 585 TASK: ffffffc071eb8b80 COMMAND: "android.hardwar" CPU 1: [0 07:36:22.901] PID: 726 TASK: ffffffc0f6e3f300 COMMAND: "DispSync" CPU 2: [0

[Linux][Kernel] fd(file descriptor: 파일 디스크립터) 디버깅 CrashTool

Guillermo Austin Kim|2017년 12월 20일

"echo c > /proc/sysrq-trigger" 명령어로 강제 커널 패닉을 유발시킨 다음 코어 덤프를 받아 보았어요.crash> bt -I C01003AC -S C59C3E20 0xD110E040PID: 4944 TASK: d110e040 CPU: 0 COMMAND: "sh" #0 [ ] (do_DataAbort) from [ ] pc : [ ] lr : [ ] psr: 60010013 sp : c59c3f10 ip : c1920700 fp : bee5765c r10: 00000000 r9 : acf2a284 r8 : 00000000