KERNEL

포스트: 183|조회수: 0|PERSON
Items

Posts

183 posts

[Linux][Kernel] data abort @tty_wakeup - 리눅스 커널

Guillermo Austin Kim|2018년 1월 9일

USB와 TTY Driver 관련한 커널 패닉 디버깅 정보를 좀 공유하고자 해요. 아래 Signature로 커널 패닉이 발생했는데요. __irq_usr -> gic_handle_irq 코드 흐름으로 보아 유저 공간에서 실행 중인 프로세스로 IRQ가 Trigger되었다는 정보를 확인할 수 있어요.바꾸어 말하면 아래 콜스택은 IRQ Context라고 할 수 있죠. 문제가 발생한 보드는 Mediatek MT6755랍니다.[ ] do_page_fault+0x338/0x3f8 [ ] do_DataAbort+0x38/0x98 [ ] __dabt_svc+0x38/0x60 [ ] tty_wakeup+0xc/0

[ARM64]signal - sa_handler signal handler 실행 (code walk-through)

Guillermo Austin Kim|2017년 12월 30일

signal에 대해서는 리눅스 시스템 프로그램에서 많이 들어본 적이 있을 꺼에요.쓰레드에 특정 시그날이 전달되면 해당 시그널 핸들러 함수가 호출된다는 내용이죠. 아래 시스템 프로그램의 경우에는 SIGINT 시그널을 전달 받으면 sig_handler 함수가 호출되겠지오.#include #include #include void sig_handler(int signo){ if (signo == SIGINT) printf("received SIGINT\n");} int main(void){ if (signal(SIGINT, sig_handler) == SIG_ERR) printf("\ncan't catch SIGINT\

Reboot - Kernel Rebooting(커널 리부팅) Sequence

Guillermo Austin Kim|2017년 12월 29일

보통 시스템이 리부팅될 때 동작에 대해 상세히 다룬 글이 없는 것 같아요.그래서 유저 스페이스에서 reboot 시스템 콜을 수행하면 어떤 흐름으로 시스템이 리셋되는지 살펴볼께요. 가끔 시스템이 리부팅하는 과정에서 락업이나 커널 크래시가 발생하거든요. 이럴 때 어떤 흐름으로 리부팅 되는지에 대한 정보를 알면 어느 포인트에서 디버깅을 해야 할 지 빨리 파악할 수 있어요. sys_reboot이란 함수는 아래 코드로 정의되어 있구요. kernel_restart() 함수가 호출되요. SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, void __user *, arg){ struct pid_namespace *pid_ns = task_act

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