Bạn có thể và nó khá dễ dàng. RPi có một mô-đun Linux thực hiện API theo dõi Linux tiêu chuẩn. Bạn có thể tìm thấy tài liệu này ở đây .
Bây giờ, nếu bạn đọc nó, bạn sẽ biết rằng có một tệp thiết bị đặc biệt được gọi /dev/watchdog
và để sử dụng, watchdog
bạn phải mở tệp này và viết một số dữ liệu (một byte, tốt nhất là viết một cái gì đó ngoài 'V' mà tôi ' m giải thích sau) cho nó theo thời gian. Nếu bạn không viết bất cứ điều gì vào tập tin này đủ lâu, watchdog
sẽ kích hoạt khởi động lại. Bạn có thể tìm thấy một chương trình ví dụ (rất đơn giản) ở đây .
Lưu ý rằng trong một tình huống bình thường, nếu bạn đóng /dev/watchdog
, watchdog
có thể bị vô hiệu hóa. Có một chế độ đặc biệt gọi là 'Tính năng đóng ma thuật' dường như được trình điều khiển RPi triển khai nhưng AFAIK không được bật trong cấu hình kernel mặc định (tùy chọn CONFIG_WATCHDOG_NOWAYOUT). Trong trường hợp này, khởi động lại sẽ được kích hoạt ngay cả khi bạn đóng /dev/watchdog
trừ khi bạn viết 'V' cho nó ngay trước khi thoát ứng dụng.
Bạn nên tự kiểm tra xem nó có thực sự bị vô hiệu hóa không (tôi không có RPi ở đây ngay bây giờ để kiểm tra), nhưng nếu không, điều đó không tốt cho bạn. Nếu ứng dụng của bạn gặp sự cố, tệp thiết bị theo dõi sẽ bị đóng và khởi động lại sẽ không được kích hoạt và đây là lý do bạn muốn nó. Trong tình huống này, bạn có thể thay đổi cấu hình kernel và xây dựng lại hoặc viết một ứng dụng tùy chỉnh sẽ theo dõi nếu ứng dụng chính của bạn đang hoạt động (ví dụ sử dụng một số phương thức IPC).
Ngoài ra còn có API ioctl cho phép bạn làm thêm một số thứ với watchdog
. Ví dụ: bạn có thể đặt thời gian chờ khác - IOCTL với WDIOC_SETTIMEOUT (dường như được trình điều khiển RPI hỗ trợ) hoặc hết thời gian chờ - IOCTL với WDIOC_GettIMEOUT (dường như cũng được hỗ trợ). Bạn có thể muốn sử dụng nó để sửa đổi thời gian chờ mặc định (10 giây). Có giới hạn cứng đến 16 giây tuy nhiên. Đây là một ví dụ:
int timeout = 15;
int fd = open("/dev/watchdog", O_WRONLY);
ioctl(fd, WDIOC_SETTIMEOUT, &timeout);
Bạn cũng có thể sử dụng IOCTL với WDIOC_KEEPALIVE thay vì viết một ký tự nếu bạn muốn. Cả hai phương pháp đều hợp lệ.