Guillermo Austin Kim
Posts
998 postsIRQ Stack(ARM64) - Debugging(디버깅)
아래 블로그에서 IRQ Stack(ARM64)에 대해 소개를 했는데요. 이번에는 직접 코어 덤프에서 IRQ Stack 덤프를 살펴볼께요. IRQ Stack Feature를 지원하는 프로세스의 콜스택을 Trace32로 잡아서 확인해 보았어요. 참고로, 아래는 CPU0에서 idle process가 돌아가 갑자기 IRQ가 Trigger되었을 시의 동작이에요. -000|gic_handle_irq(?) -001|el1_irq(asm) -->|exception -002|lpm_cpuidle_enter(dev = 0x0, ?, idx = 0) -003|cpuidle_enter_state(dev = 0xFFFFFFE57E2A33D8, drv = 0xFFFFFFE4F2E14C00, index = 0) -004|c
Kernel][Panic] 메모리 불량 커널 크래시@find_vma_links - 1
특정 디바이스가 부팅 후 5분 이내에 커널 패닉이 발생하는 현상을 리포트 받았는데요.참 신기하죠? 특정 디바이스만 커널 패닉이라. 이럴 때 너무 긴장할 필요 없어요. 논리적인 오류로 발생한 커널 패닉인지 정확히 분석한 후,논리적인 문제가 아니라면 하드웨어 담당자에게 메모리 불량이 아닌 지 테스트(보통 정상 메모리와 스왑하죠)을 요청하면 되요. 커널 패닉 시 로그는 아래와 같아요.CPU5에서 돌던 find_vma_links() 함수의 find_vma_links+0x1c 코드에서 데이터 오버트가(Data Abort) 발생했네요. 프로세스 이름은 "sensorservice" 이구요.[ 2107.239317 / 01-01 11:11:03.809][5] Unable to handle kernel NULL po
MODULE_INIT("GPL") 분석 - "module license 'unspecified' tainting kernel"
MODULE_INIT("GPL") - "module license 'unspecified' tainting kernel" 모듈 타입 드라이버를 짤 때 주의해야 할 포인트를 공유드리고자 해요. 예전에 제가 처음 리눅스 드라이버를 처음 접할 때,아래와 같은 모듈 드라이버를 짠 다음에 컴파일 후 보드에 올려 봤어요.#include int init_module(void){ printk(" init_module() \n"); return 0; } void cleanup_module(void){ printk(" cleanup_module() \n");} insmod로 드라이버를 실행했는데요. 동작을 안해요. 커널 로그가 안 찍히구요.뭐가 문제일까요? 우선 커널 로그를
[Kernel][crash]뮤텍스 데드락(Mutex Deadlock) 락업(lockup) - "simpleperf" 디버깅
특정 시점부터 갑자기 디바이스가 락업되는 현상이 리포트가 되었거든요. 엄청 락업된 디바이스가 쏟아 졌었는데요. 이번 시간에는 그 때 어떻게 디버깅을 해서 문제를 해결했는지 업데이트하고자 해요. 락업이 된 상태에서 디바이스를 받아 강제로 코어 덤프를 뜬 다음에 콜 트레이스를 봤는데요. 아래 콜 스택이 확인되었어요. 프로세스 이름은 "atd" 이에요. reboot 시스템콜을 trigger한 다음에 각 종 시스템 드라이버를 종료하는 과정에서 mutex lock을 계속 기다리는 현상이 확인되네요. -000|context_switch(inline) -000|__schedule() -001|schedule_preempt_disabled() -002|spin_lock(inline) -002|
arm instruction(명령어) - strleb
strleb란 명령어를 본 적이 있나요? 전 잘 몰라서요, 이 명령어가 어떻게 동작하는지 테스트를 해봤거든요.그 내용을 정리해서 업데이트할께요. 제가 만난 명령어는 아래와 같거든요.cmp r3, #2 @ 1 //<<--[1]strleb r2, [r0], #1 @ 1 해석을 하면 아래와 같아요."R3이 0x2보다 같거나 작을 경우[1], r2의 하위 2바이트를 r0가 가리키는 주소에 있는 값에 저장한 후 r2를 1만큼 증가시킴" "strltb" 명령어는 아래 단어를 줄인 것 같은데요.Str(Store)|le(Signed less than OR equal) | b(Byte) 이 내용이 머리에 잘 안 들어와서 실제 Trace32로 이 명
![[Spoiler] 점프 신작 '공주님 고문 시간입니다' 원작자에 '우공못' 작가 그림. '시간정지용사' 또다른 플레이어? '다음에 오는 만화 대상' 운영 잡지 폐간](https://img.zoomtrend.com/2026/06/07/1780881297-ECA090ED948426-28EC95A0EB8B88EBA980EC8B9CEAB7B8EB8490.jpeg)

