LINUX

포스트: 487|아이템:LINUX(477)
Tags

Posts

487 posts

ARM64 - Data Abort Exception(익셉션) Vector 실행

Guillermo Austin Kim|2017년 12월 29일

이번 시간에는 Abort 즉 프로그램에 문제가 생겨서 Exception이 생겼을 때 동작 흐름에 대해점검해보고자 해요. ARM에 대한 자료와 세미나를 통해 Exception에 대해서 엄청나게 많이 들었잖아요.뭐, data abort, prefetch abort, undefined abort 등등이죠. 이제 ARM64 아키텍처에서는 이 Abort를 어떻게 처리하고 있는 지 살펴보도록 할께요 우선 아래 코드와 같이 익셉션 벡터가 정의되어 있구요.그런데 abort가 발생할 때는 el1_sync 벡터로 프로그램 카운터가 이동하게 되어 있어요./* * Exception vectors. */ .align 11ENTRY(vectors) ventry el1_sync_invalid // Synchronous E

IRQ Stack(ARM64) - Debugging(디버깅)

Guillermo Austin Kim|2017년 12월 28일

아래 블로그에서 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

Guillermo Austin Kim|2017년 12월 28일

특정 디바이스가 부팅 후 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"

Guillermo Austin Kim|2017년 12월 28일

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로 드라이버를 실행했는데요. 동작을 안해요. 커널 로그가 안 찍히구요.뭐가 문제일까요? 우선 커널 로그를