[Debugging] Tips (55) 썸네일형 리스트형 [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, //..... [Trace32] 폰트 색상 변경 - setup.color config.t32 파일에 다음 명령어를 입력하면 Trace32 폰트 색상이 바뀝니다. PALETTE 0 = 56 56 56 PALETTE 1 = 221 221 221 PALETTE 4 = 128 0 255 PALETTE 11 = 255 0 0 PALETTE 18 = 255 128 64 PALETTE 27 = 255 128 64 PALETTE 48 = 128 128 0 PALETTE 50 = 255 128 64. Trace32를 열고 setup.color을 입력해서 폰트나 텍스트 상자 색상을 바꿀 수도 있습니다. cmm 스크립트로는 다음과 같은 명령어를 입력하면 됩니다. //PALETTE 0 = 56 56 56 SETUP.COLOR 0. 56. 56. 56. //PALETTE 1 = 221 221 221.. [리눅스커널][Trace32] wakelock 디버깅 - container_of [crash-utility] wakelock 디버깅(rbtree: wakelocks_tree) [crash-utility]wakelock - rbtree debugging(디버깅) [리눅스커널][Trace32] wakelock 디버깅 - container_of [Kernel] wakelock debug patch 이번 시간에는 wakeup_sources이란 링크드 리스트를 통해 wakelock 디버깅을 합시다. 이전에는 crash-utility를 썻는데 이번에는 Trace32를 쓰겠습니다. 개발자는 다양한 툴을 써야 한 가지 툴에 종속된 노예 개발자가 되는 것을 피할 수 있습니다. 또한 각 툴의 장점을 잘 활용할 수도 있습니다. 먼저, 다음 T32 명령어를 입력해서 offsetof와 container_o.. [안드로이드][리눅스커널] 시그널 - 유저 공간 abort(SIGABRT) 시 동작 시 흐름 유저 공간에서 zygote가 강제 종료되면서 부팅을 못하는 상황입니다. 커널 로그로 아래 메시지를 볼 수 있습니다. 아래 로그는 init 프로세스가 zygote에 SIGABRT(6) 시그널을 전달해서 zygote를 종료시키고 있습니다. [ 46.116831 / 01-02 01:20:24.859][0] init: Service 'zygote' (pid 1777) killed by signal 6 [ 46.124107 / 01-02 01:20:24.869][1] init: Service 'zygote' (pid 1777) killing any children in process group 그럼 이 동작을 할 때 커널 관점으로 어떤 코드가 수행되는지 살펴보겠습니다. zygote는 커널 공간에서 "main" 이.. [Crash-Utility] Radix Tree 디버깅: 'tree -t radix -N (struct radix_tree_node *) 구조체 주소' 이번 시간에는 크래시 유틸리티로 라덱스 트리를 디버깅하는 방법을 소개합니다. 라딕스 트리(Radix Tree)를 보기 위한 명령어 크래시 유틸리티로 라덱스 트리 노드를 보기 위한 명령어 포멧은 다음과 같습니다. tree -t radix -N (struct radix_tree_node *) 구조체 주소 예제 명령어 및 결과 ( struct radix_tree_node 구조체 주소가 0xFFFFFFFF3A806E79 인 경우) crash> tree -t radix -N 0xFFFFFFFF3A806E79 ffffffff3f53c180 ffffffff3f53c4c0 ffffffff3f555180 ffffffff3f5554c0 ffffffff3f56e180 ffffffff3f56e4c0 ffffffff3f5871.. [리눅스커널] 안드로이드/라즈베리 파이 부팅 실패 100% 해결하는 디버깅 패치 Overview 많은 개발자들은 '브링업'이란 개발 업무를 맡고 있습니다. 이 과정에서 다음과 같은 어려움을 많이 겪습니다. * 보드 브링업을 하다 보니 컴퓨터의 시작 화면까지 보이지 않는다. * 부팅 과정에서 출력하는 화면이 계속 출력된다. 이런 이슈를 겪은 적이 있나요? 보통 이런 상황을 겪으면 굉장히 답답하고 짜증이 납니다. 그 이유는 무엇일까요? * 뭔가 문제가 생겨서 부팅이 안되는 상황인데 그 원인을 파악하기 어렵기 때문입니다. 달리 말씀을 드리면 정확히 어디에 문제가 생겨서 부팅이 안되는지 알 수 없기 때문입니다. 이번 포스팅에서는 이런 상황에서 사용하면 아주 유용한 커널 패치를 소개합니다. 아이디어 안드로이드나 라즈비안 타겟 부팅 과정에서 init이나 systemd 프로세스가 *.rc나 *... [TRACE32] 유저 공간 콜스택 복원하기 - ARMv8(Aarch64) Overview 커널 크래시가 발생해 덤프를 TRACE32로 분석할 때 유저 공간에서 실행 중인 함수들의 콜스택을 보고 싶을 때가 있습니다. 그 이유는 아래와 같은 디버깅 정보를 얻기 위해서 입니다.; * 유저 공간에서 어떤 함수가 실행한 후 시스템 콜을 통해 커널 공간으로 실행 흐름이 바뀌었나? * 유저 공간에서 어떤 파라미터를 전달했을까? 그런데 대부분 리눅스 시스템 개발자들은 TRACE32로 커널 공간의 콜스택만을 보면서 디버깅을 합니다. 이번 포스팅에서는 커널 패닉이 발생했을 때 유저 공간의 콜스택을 TRACE32으로 보는 방법을 소개합니다. 패치 코드를 활용하면 커널의 특정 함수에 브레이크 포인트를 걸었을 때도 유저 공간의 콜스택을 볼 수 있습니다. 조건 이번에 소개하는 패치 코드와 TRACE3.. 이전 1 2 3 4 5 6 7 다음