2013-04-24 3 views
1

나는 인터럽트 처리기를 사용하여 작업을 수행하는 Linux 장치 드라이버가 있습니다.인터럽트 처리기 예약

X 밀리 초 (인터럽트 회선이 끊어짐)마다 호출되도록 인터럽트 처리기를 예약 할 수 있습니까?

답변

2

인터럽트 라인을 수정하기 전까지 디버깅 목적으로 만이를 수행한다고 가정하면 timer_interrupt 안에 arch/*/kernel/time.c의 ISR (컨텍스트 절약 코드 빼기)을 호출하여 해당 코드가 인터럽트를 다시 활성화 할 수 있습니다. 진드기보다 느린 속도가 필요한 경우 Y 진드기 중 하나만 발사하도록 코드를 추가해야합니다.

인터럽트 컨텍스트에서 ISR을 실행하는 것이 목적이 아니며 주기적으로 실행되도록 하단 절반 드라이버 코드를 얻으려면 timer_interrupt을 해킹하는 대신 타이머 API를 사용할 수 있습니다. 이 경우 인터럽트 컨텍스트에서 ISR 코드가 실행되지 않습니다.

틱 소스보다 빠른 속도가 필요한 경우 하이어 타이머를 사용해야 할 수도 있습니다. 여기서도 인터럽트 컨텍스트에서 실제로 실행되지는 않습니다.

좋은 소개 타이머와 타이머 API는 here입니다. timer_create() man page에는 예제 사용자 공간 타이머가 있습니다. 커널 공간 타이머의 경우 hrtimer_init()hrtimer_start()이 필요합니다. 예 hrtimer here이 있습니다. 이것을 주기적으로 작동 시키려면 타이머가 작동 할 때마다 타이머를 재설정하거나 hrtimer_forward() 솔루션을 사용하십시오.이 SE post.

+0

어떻게 타이머 API를 사용하여 ISR이 매 1 밀리 초마다 실행되도록 예약 할 수 있습니까 ('timer_list'에서'add_timer()'를 호출한다고 가정)? 그건 당신에게 한 번의 호출 만하는 것 같습니다. –

+1

@IsaacKleinman : 내 대답을 편집하여 내 의견에 답변했습니다. –