LoginSignup
5
3

More than 1 year has passed since last update.

RaspberryPiでWatchdogTimerを構成する方法

Last updated at Posted at 2022-12-16

目次

1.概要
2.手順
3.参考

1. 概要

2. 手順

2.1. 使っているラズパイの種類やバージョンを調べる

$ cat /proc/cpuinfo
processor       : 0
BogoMIPS        : 38.40
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 1
BogoMIPS        : 38.40
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 2
BogoMIPS        : 38.40
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

processor       : 3
BogoMIPS        : 38.40
Features        : fp asimd evtstrm crc32 cpuid
CPU implementer : 0x41
CPU architecture: 8
CPU variant     : 0x0
CPU part        : 0xd03
CPU revision    : 4

Hardware        : BCM2835
Revision        : a22082
Serial          : 00000000059fb933
Model           : Raspberry Pi 3 Model B Rev 1.2

2.2. WDTがカーネルにコンパイルされていることを調べる

$ cat /lib/modules/$(uname -r)/modules.builtin | grep wdt
kernel/drivers/watchdog/bcm2835_wdt.ko

$ sudo cat /var/log/kern.log* | grep watchdog
Dec 14 21:03:51 raspberrypi kernel: [    3.029813] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer

2.3. Watchdogを動かすカーネルモジュールの設定

モジュールの設定

  1. /etc/modprobe.d/bcm2835-wdt.confというパスにファイルを作成
  2. 作成したら1行追加
  • 15秒のハートビートをWatchdogが期待する
options bcm2835_wdt heartbeat=15 nowayout=0
Parameter Role
heartbeat 秒単位の初期Watch Dog heartbeat(タイムアウトするまでの時間)
nowayout 一度起動した後に、Watch Dogを停止可能かどうかのフラグ

2.4. Watchdogマネージャーを構成する

systemdに組み込まれたものを使用する場合

  • /etc/systemd/system.conf.d/main.conf というファイルを作成
    • /etc/systemd/system.conf をいじっても良いのですが、/etc/systemd/system.conf.d/*.conf を使用することが推奨されているので今回はこちらを使用します。
    • ファイル名は任意なので main.conf でなくても大丈夫です。ただし拡張子は .conf としてください。
  • systemdにX秒間隔でHeartbeatを実施させる
[Manager]
RuntimeWatchdogSec=10

参考

Watchdogパッケージを使用する場合

インストールする

$ sudo apt install watchdog

自動起動設定

  • update-rc.dを使用(もしかしたら不要?watchdogをインストールしただけで自動起動するかも)
$ sudo update-rc.d watchdog enable
$  update-rc.d -h
usage: update-rc.d [-f] <basename> remove
       update-rc.d [-f] <basename> defaults
       update-rc.d [-f] <basename> defaults-disabled
       update-rc.d <basename> disable|enable [S|2|3|4|5]
                -f: force

参考

2.5. WDTを有効にする

  • /boot/config.txtに1行追加
dtparam=watchdog=on
  • ウォッチドッグで再起動ループに陥った場合、WindowsPCなどでドライブを読み込み、boot/config.txtdtparam=watchdog=offと編集する
  • Watchdogマネージャーを構成せずに、WDTだけを有効にした場合、/dev/watchdogに1を書き込む( echo 1 | sudo tee /dev/watchdog )とWDのタイマカウントが始まり、再度書き込まなければ、15秒で再起動が始まるらしい
    • ハードウェア デバイスは、/dev/watchdog への最初の書き込みが発生するまでカウント ダウンを開始しない

2.6. 再起動

設定を反映させるために再起動

$ sudo reboot

2.7. 動作確認

ウォッチドッグタイマ有効化の確認

  • bcm2835-wdtが見つかればWDTが有効化されている
$ dmesg | grep  bcm2835-wdt
[    3.029263] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
  • /dev/watchdogおよび/dev/watchdog0が追加されていれば有効化されている
$ ls /dev/ | grep watchdog
watchdog
watchdog0
$ :(){ :|:& };:
$ sudo bash -c ':(){ :|:& };:'
$ python -c "import os, itertools; [os.fork() for i in itertools.count()]"

参考

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3