본문 바로가기

[Debugging] Tips

(55)
[리눅스커널] 인터럽트 핸들러 실행 시각 측정 디버깅 패치 가끔 인터럽트 핸들러의 처리 시간이 조금 더 정확히 보고 싶을 때가 있습니다. 이때, 다음과 같은 패치 코드를 적용하면 인터럽트 핸들러의 실행 시간을 측정할 수 있습니다. 패치 코드는 다음과 같습니다. diff --git a/drivers/mailbox/bcm2835-mailbox.c b/drivers/mailbox/bcm2835-mailbox.c index a03aeed..e353beb 100644 --- a/drivers/mailbox/bcm2835-mailbox.c +++ b/drivers/mailbox/bcm2835-mailbox.c @@ -72,17 +72,29 @@ static struct bcm2835_mbox *bcm2835_link_mbox(struct mbox_chan *link) re..
[리눅스커널] 커널 동적 타이머를 사용해 실행 시각을 측정해보기 이번에는 조금 더 재미있는 패치 코드를 같이 볼까요? 다음은 패치 코드의 내용입니다. diff --git a/kernel/workqueue.c b/kernel/workqueue.c index cd8b61b..128c998 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -49,7 +49,7 @@ #include #include #include - +#include #include "workqueue_internal.h" enum { @@ -2029,6 +2029,18 @@ static bool manage_workers(struct worker *worker) return true; } +static int work_timer_debug = 1;..
[리눅스커널] 크래시 유틸리티: files -p '아이노드 주소' + files -d '덴트리 주소' 디버깅 크래시 유틸리티는 다양한 메모리 및 파일 시스템 디버깅 기능을 제공합니다. 그 중에 유용한 기능 중 하나를 소개합니다. * files -p '아이노드 주소' 먼저 다음 명령어를 입력해 오픈된 파일에 대한 파일 디스크립터, 아이노드 그리고 덴트리를 확인 합니다. * files crash> files 1664 PID: 1664 TASK: dc270000 CPU: 1 COMMAND: "Chrome-proc.anim" ROOT: / CWD: / FD FILE DENTRY INODE TYPE PATH 0 de4d8200 e1a33ab0 e0ce8dd8 CHR /dev/null 1 de4d8200 e1a33ab0 e0ce8dd8 CHR /dev/null ... 32 dd0cb000 dd4c0000 e02a6af8 ..
[TRACE32] gcore 크래시 유틸리티로 유저 프로세스의 콜스택 보기 이번 포스팅에서는 크래시 유틸리티의 extensions인 gcore를 빌드하는 방법과 이 기능을 활용해 유저 프로세스의 스택을 추출하는 방법을 소개한다. * gcore 소스 코드를 내려받기 'http://people.redhat.com/~anderson/extensions.html' url에 액세스한 다음에, crash-gcore-command-1.5.1.tar.gz 파일을 내려받는다. url: http://people.redhat.com/~anderson/extensions.html crash-gcore-command-1.5.1.tar.gz crash-gcore-command-1.5.1.tar.gz 파일을 받은 다음에 압축을 푼다. * gcore 소스 코드를 빌드하기 먼저 크래시 유틸리티의 소스 코드를..
[리눅스커널][디버깅] ftrace: ftrace를 비활성화하기 보통 프로덕션 빌드로 이미지를 생성하려고 할 때 커널에서 ftrace를 아예 꺼버리고 싶을 때가 있다. 이 때 다음 패치를 적용해보자. diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 40817e4..2cf0d86 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -273,6 +273,7 @@ unsigned long long ns2usecs(u64 nsec) */ static struct trace_array global_trace = { .trace_flags = TRACE_DEFAULT_FLAGS, + .buffer_disabled = 1, }; LIST_HEAD(ftra..
[TRACE32] 폰트(FONT) 사이트 변경 아래와 같이 t32 파일을 수정하면 폰트 사이즈를 LARGE로 변경할 수 있습니다. index d07418b..db9c6c9 100644 --- a/config-sim.t32 +++ b/config-sim.t32 @@ -16,7 +16,7 @@ ID=T32 SYS=${2} ; make system directory the same as the executable directory SCREEN= -FONT=SMALL +FONT=LARGE HEADER=iTSP - HANCOM MDS GUI ${4} ; Ethernet on Host information @@ -26,4 +26,4 @@ CORE=${4} ; CORE=1 indicates the primary core that has the trace wind..
[리눅스커널] 크래시 유틸리티(Crash-Utility): 슬랩 페이지의 갯수를 확인하는 방법 크래시 유틸리티 프로그램을 실행할 때 페이지 디스크립터가 위치한 vmemmap의 범위는 'ffffffbc00000000 - ffffffbdffffffff'와 같습니다. crash64: kernel image: ffffff96ff280000 - ffffff9702265000 crash64: vmemmap: ffffffbc00000000 - ffffffbdffffffff kmalloc 슬랩 캐시를 확인해보겠습니다. crash64> p kmalloc_caches kmalloc_caches = $1 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xffffffc6008fdc80, 0xffffffc6008fdb00, 0xffffffc6008fd980, 0xffffffc6008fd800, 0x..
[리눅스커널] TRACE32: 'v.type' 명령어로 구조체와 enum 필드를 바로 확인하기 소스 코드를 분석 하다보면 구조체와 enum의 정체를 알고 싶을 때가 있습니다. 이 때 TRACE32를 활용하면 바로 이 정보를 확인할 수 있습니다. 구조체 확인하기 먼저 구조체의 세부 필드는 다음과 같은 명령어를 입력하면 확인할 수 있습니다. $ v.type % %m %l %hi %sp struct '구조체 이름' 자, 그럼 리눅스 커널에서 프로세스 정보를 나타내는 struct task_struct 구조체의 정체를 확인해봅시다. $ v.type % %m %l %hi %sp struct task_struct (struct task_struct) struct task_struct struct (4096 bytes, [0] struct thread_info thread_info, [24] long int s..