Guillermo Austin Kim

Sources

Posts

998 posts

[Linux][Kernel] Red Hat crash tools 설치

Guillermo Austin Kim|2017년 12월 4일

리눅스 커널 동네에서 전 세계적으로 쓰고 있는 디버깅 툴을 소개하고자 합니다.https://people.redhat.com/anderson/ 레드헷의 앤더슨이란 형님이 만든 오픈 소스로 배포한 리눅스 크래시(커널 패닉)을 분석할 수 있는 툴인데요, 리눅스 커널 커뮤니티에서도 이 툴을 활발히 쓰고 있죠. 소스를 좀 받아 볼까요? 리눅스 머신에서 아래 커맨드로 소스를 땡겨옵니다.git clone 소스를 받고 나서 아래 명령어로 빌드를 해요.ARM machine인 경우make target=ARMmake target=ARM extensions X86인 경우make target=X86_64make target=X86_64 extensions 이제 trace command란 오픈소스 툴을 가져올 차례입니다.

[Linux][Kernel] softirq overview (1)

Guillermo Austin Kim|2017년 12월 4일

bottom half의 핵심 softirq에 대해서 잠깐 짚어볼께요.우선 먼저 "softirq는 어느 함수에서 실행되나?" 알아볼께요. 사실 코드 리뷰를 열심히 해도 좋은데요. 전 대가리가 나뻐서 소스 코드와 로그를 함께 봐야 머리에 잘 들어오더라구요. 자, softirq는 어느 함수에서 실행되는지 확인하기 위해 아래 코드에 ftrace log를 추가해 보았어요.흠, 어떤 결과를 확인할 수 있을까요?diff --git a/kernel/softirq.c b/kernel/softirq.cindex 0c998ef..5593bf6 100644--- a/kernel/softirq.c+++ b/kernel/softirq.c@@ -389,6 +389,7 @@ void irq_exit(void) WARN_

[Linux][Kernel] T32 - Linked List 디버깅 cmm Script

Guillermo Austin Kim|2017년 12월 3일

리눅스 커널 데이터 스트럭쳐 내 수 많은 linked list를 확인할 수 있어요.예를 들어 struct kset이란 구조체도 첫번 째 멤버로 list란 링크드 리스트죠. struct kset { struct list_head list; //<<-- spinlock_t list_lock; struct kobject kobj; const struct kset_uevent_ops *uevent_ops;}; 실제 코어 덤프를 T32로 열어서 상세 구조체를 보면 아래와 같거든요.kset_find_obj( [R5] kset = 0xED74A980 -> ( [NSD:0xED74A980] list = ( //<<-- [NSD:0xED74A980] next = 0

[Linux][Kernel][ARM] char buf[32]; vs char buf[32]={0};

Guillermo Austin Kim|2017년 12월 3일

얼마 전에 아래 패치를 봤어요. 이게 뭐지? 잘 이해가 안 가더라구요.배열을 초기화하는 것 같기도 한데.diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c index f040026..11f56a8 100644 --- a/drivers/usb/dwc3/debugfs.c +++ b/drivers/usb/dwc3/debugfs.c @@ -402,7 +402,7 @@ static ssize_t dwc3_mode_write(struct file *file, struct dwc3 *dwc = s->private; unsigned long flags; u32

[Linux][Kernel] 전처리 Preprocess File 추출 방법

Guillermo Austin Kim|2017년 12월 3일

한 4년 전 인가요? 아래 코드를 열심히 분석 했었어요. 그런데 나중에 알고 보니 CONFIG_KMEMCHECK, CONFIG_LOCKDEP 컨피그 내 코드가 컴파일 되지 않는 죽은 코드라는 걸 알게 되었어요. 그 때 참 머리를 쥐어 뜯으며 자책했죠. static inline void slab_free_hook(struct kmem_cache *s, void *x){ kmemleak_free_recursive(x, s->flags); /* * Trouble is that we may no longer disable interrupts in the fast path * So in order to make the debug calls that expect irqs to be * disabled w