LINUX
Posts
477 posts[Linux][Kernel] 타이머(Timer) Overview
리눅스 커널에서 아주 중요한 Subsystem 중 하나인 타이머에 대해서 간단히 짚어 볼께요. init_timer아래 함수 콜로 do_init_timer() 함수에서 struct timer_list *timer 초기화를 수행해요.__init_timer((timer), 0)init_timer_key((_timer), (_flags), #_timer, &__key);do_init_timer(timer, flags, name, key); MIPS 아키텍쳐에서 아래와 같이 타이머를 세팅하는 코드가 있네요.static inline void ip32_power_button(void){// .. 생략.. blink_timer.data = POWERDOWN_FREQ; blink_timeout(POWERDOWN_
[Linux][Kernel] 인터럽트(Interrupt) - request_threaded_irq 디버깅
irq_thread, request_threaded_irq 관련 데이터 구조와 코드에 대해서 이제 디버깅 좀 해볼까요? 실제 IRQ Descriptor 멤버들에 어떤 값들이 실려 있고 각 값들이 어떤 의미인지 정밀하게 파악하는 게 중요해요.이 값들로 며칠 야근할 껄 하루 몇 시간 디버깅으로 마무리할 수 있거든요. [1]: irq번호가 328[2]: 하드웨어적인 핀먹스 값이 13인가 보네요[3]. irq_data.state_use_accessors 값이 0x4002이네요 아주 중요한 정보를 담고 있으니 이 놈은 따로 분석 좀 해야 겠네요.[4]: kstat_irqs는 각 per-cpu 별로 얼마나 IRQ가 Trigger되었는지 카운트 값을 알 수 있어요.[5]: thread_fn으로 touch
[Linux][Kernel] 인터럽트 - request_threaded_irq 기초
개요 하드웨어 관점에서 인터럽트는 인터럽트 콘트롤러에 의해 인가되는 전기신호 인데요. 이 신호는 인터럽트 컨트롤러 입력 핀으로 전달됩니다. 각각 보드마다 인터럽트 컨트롤러는 연결된 여러 개의 인터럽트 배선을 하나의 배선에 묶어서 프로세서에 전달해준다. 인터럽트를 받으면 인터럽트 콘트롤러는 프로세서에 신호를 보낸다. 신호를 감지하면 프로세서는 인터럽트를 처리하기 위해 현재 실행하던 일을 잠시 중단한다. 그다음 프로세서는 커널에 인터럽트가 일어났다는 것을 알리고, 커널은 상황에 맞게 인터럽트를 처리한다. 위에서 설명한 인터럽트가 처리되는 과정은 어느 플렛폼이나 거의 유사하다. 주의해야 할 점 인터럽트가 올라오면 인터럽트 서비스 루틴(ISR)이 호출이 된다. 이 때 프로세서는 기존에 하던 일을 잠시
[Linux][Kernel] 인터럽트(Interrupt) - request_threaded_irq overview(1)
리눅스 커널 인터럽트 개념 중에 top/bottom half란 용어를 많이 들어봤죠? 하드웨어적으로 인터럽트가 처리될 때는 되도록 실시간으로 처리할 데이터만 빨리 처리하고,빨리 처리해도 안되는 동작은 쓰레드 레벨로 수행한다는 거죠. 수 없이 이런 글을 읽어봤는데, 사실 인터럽트 서비스 루틴에서 발생하는 수 많은 이슈를 대응하기 전까지는 개념이머리 속에 잘 들어오지 않더라구요. 그래서 이번 시간에 좀 좀 정리를 해보려고 해요. 리눅스 커널에서 bottom half로 처리되는 루틴은 크게 세 가지가 있어요.1> softirq2> workqueue3> irq_thread 이번 시간에는 irq_thread에 대해서 touch 드라이버를 예를 들어서 분석을 해보려구요.touch의 IRQ 관련


![[웹툰단행본] 『통제구역관리부』 1권 후기 : 이상한 변칙과 기이한 일들이 일어나는 공간에 대하여](https://img.zoomtrend.com/2026/06/09/1780996474-SE-5eda86fa-0d63-4afd-b8dd-b801879fed52.jpg)
