Steve Robillard가 제공 한 질문과 훌륭한 답변에 따르면 다음과 같습니다.
Raspberry Pi를 하드 리셋하려면 어떻게해야합니까?
Linux 워치 독 데몬 대신 내 프로그램에서 BCM2708의 하드웨어 워치 독으로 하트 비트 신호를 보내려면 어떻게해야합니까? 즉, 전체 시스템이 정지되었을 때뿐만 아니라 내 프로그램이 실행 중이 아닌 경우 (시작시 실행) RPi를 재설정하고 싶습니다.
감사.
Steve Robillard가 제공 한 질문과 훌륭한 답변에 따르면 다음과 같습니다.
Raspberry Pi를 하드 리셋하려면 어떻게해야합니까?
Linux 워치 독 데몬 대신 내 프로그램에서 BCM2708의 하드웨어 워치 독으로 하트 비트 신호를 보내려면 어떻게해야합니까? 즉, 전체 시스템이 정지되었을 때뿐만 아니라 내 프로그램이 실행 중이 아닌 경우 (시작시 실행) RPi를 재설정하고 싶습니다.
감사.
답변:
당신은 할 수 있고 아주 쉽습니다. RPi에는 표준 Linux 워치 독 API를 구현하는 Linux 모듈이 있습니다. 이 문서는 여기에서 찾을 수 있습니다 .
당신이 읽는다면 이제, 당신이라는 특별한 장치 파일이 있음을 알 수 /dev/watchdog
사용하기 위해 그리고 watchdog
이 파일을 열고 (한 바이트 일부 데이터를 작성해야합니다, 그것은 쓰기 'V'가 아닌 다른 I '에 최선 m 나중에 설명). 이 파일에 오랫동안 아무 것도 쓰지 않으면 watchdog
재부팅이 트리거됩니다. 여기 에서 예제 프로그램 (매우 간단)을 찾을 수 있습니다 .
정상적인 상황에서, 당신은 닫으면 것을 참고 /dev/watchdog
, watchdog
비활성화 할 수 있습니다. RPi 드라이버에 의해 구현 된 것으로 보이는 '매직 닫기 기능'이라는 특수 모드가 있지만 AFAIK는 기본 커널 구성에서 활성화되지 않습니다 (CONFIG_WATCHDOG_NOWAYOUT 옵션). 이 경우 /dev/watchdog
앱을 종료하기 직전에 'V'를 쓰지 않으면 닫아도 재부팅이 트리거 됩니다.
실제로 비활성화되어 있는지 테스트해야합니다 (지금 테스트 할 RPi가 없습니다). 그렇지 않으면 좋지 않습니다. 응용 프로그램이 충돌하면 감시 장치 파일이 닫히고 재부팅이 트리거되지 않으므로 원하는 것입니다. 이 상황에서 커널 구성을 변경하고 다시 구성하거나 주 응용 프로그램이 작동하는지 모니터링 할 사용자 지정 응용 프로그램을 작성할 수 있습니다 (예 : 일부 IPC 방법 사용).
또한 ioctl API를 통해 더 많은 작업을 수행 할 수 있습니다 watchdog
. 예를 들어 WDIOC_SETTIMEOUT을 사용하는 IOCTL (RPI 드라이버가 지원하는 것으로 간주)을 다른 시간 초과로 설정하거나 WDIOC_GETTIMEOUT을 사용하여 IOCTL (시간이 초과 된 IOCTL)도 설정할 수 있습니다. 기본 시간 초과 (10 초)를 수정하는 데 사용할 수 있습니다. 그러나 16 초로 제한이 있습니다. 예를 들면 다음과 같습니다.
int timeout = 15;
int fd = open("/dev/watchdog", O_WRONLY);
ioctl(fd, WDIOC_SETTIMEOUT, &timeout);
원하는 경우 문자를 작성하는 대신 WDIOC_KEEPALIVE와 함께 IOCTL을 사용할 수도 있습니다. 두 방법 모두 유효합니다.
0x80045705