IRQ_THREAD
Posts
4 posts![[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 핸들러인 irq_thread() 함수 분석](https://img.zoomtrend.com/2020/04/25/a0386257_5ea3804a5a10f.png)
[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 핸들러인 irq_thread() 함수 분석
커널에서 지원하는 wake_up_process() 함수를 사용해 커널 스레드를 깨우면 스케줄러에 의해 커널 스레드는 실행을 시작합니다. 이 때 커널 스레드의 스레드 핸들 함수가 호출되며 스레드의 시나리오에 따라 정해진 동작을 수행합니다. 마찬가지로 IRQ 스레드의 스레드 핸들 함수는 irq_thread() 입니다. 따라서 IRQ 스레드가 깨어나면 irq_thread() 함수가 호출됩니다. 이번 시간에는 IRQ 스레드를 깨우면 실행하는 irq_thread() 함수를 살펴보겠습니다. 먼저 IRQ 스레드를 깨우면 실행하는 irq_thread() 함수를 보겠습니다. static int irq_thread(void *data)2 {3struct callback_head on_exit_work;4stru
[리눅스커널][인터럽트후반부] 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
[리눅스커널] 인터럽트 후반부 처리: IRQ 스레드 생성 예제 코드 분석
이번에는 IRQ 스레드를 생성하는 예제 코드를 소개합니다. 실제 request_threaded_irq() 함수를 호출해서 IRQ 스레드를 생성하는 과정을 살펴보겠습니다. 분석할 코드는 다음과 같습니다.[https://elixir.bootlin.com/linux/v4.14.30/source/drivers/usb/dwc3/gadget.c]1 static int dwc3_gadget_start(struct usb_gadget *g,2 struct usb_gadget_driver *driver)3 {4 struct dwc3 *dwc = gadget_to_dwc(g);5 unsigned long flags;6 int ret = 0;7 int irq;89 irq = dwc->irq_gadget;1
![[라즈베리파이][리눅스커널] IRQ Thread는 언제 생성할까?[1] #CS](https://img.zoomtrend.com/2018/06/19/c0246238_5b21141c51694.png)
[라즈베리파이][리눅스커널] IRQ Thread는 언제 생성할까?[1] #CS
# 인터럽트 후반부 처리1 IRQ Thread(threaded IRQ) 란 2. 인터럽트 후반부 처리(Bottom Half) 소개3.IRQ Thread는 언제 생성할까?[1] IRQ Thread를 생성하기 위해서는 request_threaded_irq 을 호출하면 IRQ Thread가 생성된다고 설명해 드렸습니다. 사실 request_threaded_irq을 호출할 때 IRQ Thread가 생성되는 것은 아니고 다음 흐름에서 __kthread_create_on_node 함수가 실행할 때 생성됩니다. 우리는 커널 쓰레드를 생성할 때 kthread_create 함수를 호출한다고 배웠죠. IRQ Thread도 이 kthread_create 함수를 호출해서 생성합니다. 이로 I




