INTERRUPT
Posts
25 posts[리눅스커널][인터럽트후반부] IRQ 스레드 생성 실습하기
IRQ 스레드 생성 실습하기 이번에는 IRQ 스레드를 직접 생성하는 실습을 하겠습니다. 직접 손으로 코드를 작성하고 로그로 동작을 확인하면 배운 내용을 더 오랫동안 기억할 수 있습니다. 다른 리눅스 시스템보다 라즈베리파이는 IRQ 스레드 개수가 많지 않습니다. 아래와 같이 “ps –ely” 을 입력하면 92번 mmc1 인터럽트를 처리하는 IRQ 스레드가 1개만 보입니다.root@raspberrypi:/home/pi/dev_raspberrian# ps -elyS UID PID PPID C PRI NI RSS SZ WCHAN TTY TIME CMDS 0 1 0 0 80 0 6012 6750 SyS_ep ? 00:00:02 s
[리눅스커널][인터럽트후반부] IRQ 스레드 동작 확인하기
IRQ 스레드 동작 확인하기 이제 실제 라즈베리안에서 IRQ Thread가 어떻게 수행되는지 ftrace 로그로 분석할 시간입니다. 이를 위해 다음과 같이 ftrace 로그를 설정해야 합니다. #!/bin/sh echo 0 > /sys/kernel/debug/tracing/tracing_onsleep 1echo "tracing_off" echo 0 > /sys/kernel/debug/tracing/events/enablesleep 1echo "events disabled" echo secondary_start_kernel > /sys/kernel/debug/tracing/set_ftrace_filter sleep 1echo "set_ftrace_filter init" echo f
[리눅스커널][인터럽트후반부] IRQ 스레드 핸들 irq_thread() 함수 분석
IRQ 스레드 핸들 irq_thread() 함수 분석 이번에는 IRQ 스레드 핸들 함수가 어떤 과정으로 실행하는지 점검해 보겠습니다. 커널 쓰레드가 생성되면 무한 루프를 돌면서 쓰레드 상태에서 따라 정해진 동작을 수행하는 스레드 핸들 함수가 실행합니다. IRQ 스레드는 irq_thread() 함수가 이 역할을 수행합니다. 먼저 IRQ 스레드를 깨우면 실행하는 irq_thread() 함수를 소개합니다.1 static int irq_thread(void *data)2 {3 struct callback_head on_exit_work;4 struct irqaction *action = data; 5 struct irq_desc *desc = irq_to_desc(action->irq);6 irq
[리눅스커널][SoftIRQ] Soft IRQ 서비스란
Soft IRQ를 설명하면서 낯선 용어를 설명했는데, 이제부터 그 의미를 하나하나씩 살펴 보겠습니다. Soft IRQ 서비스란 용어를 소개합니다. Soft IRQ 서비스를 빨리 이해하려면 코드를 먼저 봐야 합니다. Soft IRQ 서비스는 아래 enum으로 정의한 코드와 같습니다.[include/linux/interrupt.h]enum{ HI_SOFTIRQ=0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ, BLOCK_SOFTIRQ, IRQ_POLL_SOFTIRQ, TASKLET_SOFTIRQ, SCHED_SOFTIRQ, HRTIMER_SOFTIRQ, RCU_SOFTIRQ, NR_SOFTIRQS}; const char * const softirq_to_name[

