본문 바로가기

CS/[Embedded]Embedded System Software

[Embedded]Initializing an Interrupt Handler

interrupt handler는 보통 device driver에 구현이 되어 있다.

 

그렇다면 이러한 interrupt handler의 등록인 request_irq 함수의 동작은 어떤 시기에 해야 하는 것일까?

 

두가지의 경우가 있을 것이다. 

1. 모듈 init 할 때

2. device open 할 때

 

모듈 init 할 때 request_irq 한다고 가정해보자.

말 그래도 insmod 를 통하여 kerne에 등록하는 경우로 init 함수가 실행 될 때이다.

모듈 init 하는 것이 바로 디바이스 드라이버를 kernel에 등록하는 것이기 때문에 해당 시기에 interrupt handler도 커널에 등록하는 것이 이상적이라고 생각될 수 있다.

 

하지만 그렇지 않다.

만약 initialization에 module이 irq를 request 하게 되면 결국 사용을 하지 않는 경우에도 불구하고 interrupt 자리를 차지하고 있게 되므로, 다른 driver 가 해당 interrupt를 사용 하는 것을 막을 수 있기 때문이다.

 

결국 device open 할 때 request_irq를 통해 interrupt handler를 등록시키는 것이 이상적이다.

 

free_irq도 마찬가지로 device 를 close 할 때 불러주는 것이 이상적일 것이다.