2013-03-25 3 views
3

나는 리눅스에서 타이머 인터럽트를 사용하여 소프트웨어 wathdog 타이머를하고 싶다. 어떻게 리눅스에서 타이머 인터럽트를 생성 할 수 있습니까?.리눅스에서 WatchDog 타이머

답변

8

타이머 인터럽트를 사용하려면 신호를 사용하고 특히 SIGALRM을 사용하십시오. alarm() 함수를 사용하여 시간 초과를 요청할 수 있습니다. 당신이 쓸모가 있다면 ualarm()을 사용할 수 있습니다. 제한 시간에 도달하면 이전에 정의한 콜백 함수가 호출됩니다. 당신은 감시 구현하기위한 몇 가지 다른 옵션이

#include <signal.h> 

void watchdog(int sig) 
{ 
    printf("Pet the dog\r\n"); 
    /* reset the timer so we get called again in 5 seconds */ 
    alarm(5); 
} 


/* start the timer - we want to wake up in 5 seconds */ 
int main() 
{ 
    /* set up our signal handler to catch SIGALRM */ 
    signal(SIGALRM, watchdog); 
    alarm(5); 
    while (true) 
    ; 
} 

: 여기

는 예제 코드입니다

  1. 쓰기/실제로 하드 리셋을 적용, 감시로 작동하는 커널 드라이버를 사용하여 개가 애완 동물이 아니거나 (걷어차는)
  2. 소프트웨어 감시 장치 데몬의 흥미로운 구현 인 watchdog을 사용하십시오.
+0

감사합니다. 정확한 밀리 초 지연 구현 싶어요. 그게 어떻게 가능해? – VigneshK

+0

문제는 없지만 필자는 대답을 편집 할 것입니다. – stdcall

1

인터럽트는 응용 프로그램 수준에 없습니다 (커널 만 커널을 관리하며 실제로 많은 타이머 인터럽트가 발생 함). 신호, 타이머 및 지연 시스템 호출 (특히 poll 또는 nanosleep)을 가질 수 있습니다. Advanced Linux Programming을 읽으십시오.

먼저 time(7) 매뉴얼 페이지를 읽으십시오. 그리고 일부 커널은 또한 워치 독 타이머를 구성 할 수 있습니다

timer_create(2), poll(2), timerfd_create(2), setitimer(2), sigaction(2), nanosleep(2), clock_gettime(2) ... ... 여러분의 소중한 답변