가끔 타겟 보드에서 특정 CPU에서만 커널 패닉으로 시스템이 리셋되는 경우가 있어요.
이럴 때 테스트할 수 있는 유용한 디버깅 패치를 소개하고자 해요.
아래 패치는 부팅 할 때 CPU3을 sys node에서 아예 제거시키거든요. 아예 CPU3가 안 돌게 되는거죠.
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 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_present(cpu)) {
+ if ( (cpu == 3) || cpu_online(cpu) || !cpu_present(cpu)) {
ret = -EINVAL;
goto out;
}
예전에 CPU3에서만 이상한 동작을 하는 보드에서 위 패치를 적용하고 났더니, 부팅 후 크래시 없이 정상 동작하더라구요.
결국 실장된 보드의 ARM CPU 불량으로 정리되었죠. 비슷한 이슈를 만났을 때 한번 써보세요.
.
'[Debugging] Tips' 카테고리의 다른 글
[Linux][Kernel] ftrace: stack tracer (0) | 2023.05.04 |
---|---|
tombstone 시(시스템 크래시) - 커널 패닉 유발 (0) | 2023.05.04 |
Trace32 - Memory Class 메모리 클래스 (0) | 2023.05.04 |
Trace32 유용한 명령어 - y.b (0) | 2023.05.04 |
커널 오브젝트 Kernel Object - rbtree debugging(child directory) - (1) (0) | 2023.05.04 |