Watchdog Timer anchor.png

組み込み制御を行うシステムには,なんかあった時のためにWatchdog Timer(ウォッチドッグタイマー)を必ず組み込む。

通常はハードウェアで実装している(ソフトウェアで実装する場合は,そのソフトウェアの問題からは回避できないからである。)当たり前の機能ではあるが,Raspberry PiのSoCにもハードウェアのものとソフトウェアのもののWatchdog Timerが利用できるようだ。

何かあった時に自動で再起動するように出来るので有用ではあると思う。確認も兼ねて,この機能を使用するようにしてみた。

Page Top

カーネルモジュールをロードする anchor.png

/dev/watchdogデバイスを確認する。

# ls -al /dev/watchdog*

見つからない・・・

  • Raspbian Jessieの場合
    /etc/modulesに以下を追加して,カーネルモジュールをロードするようにする。
    # echo "bcm2835_wdt" >> /etc/modules
    その後,watchdog用のカーネルモジュールをロードします。
    # modprobe bcm2835_wdt
    正常にカーネルモジュールをロードできたか確認する。
    # lsmod | grep bcm2835_wdt
    --
    bcm2835_wdt             4133  0
    --
    0なので,まだこのカーネルモジュールを使用していないことになる。
  • Raspbian Stretchの場合
    /boot/config.txtに,以下を追加する。
    # activating the hardware watchdog
    dtparam=watchdog=on
    一旦,リブートする。

/dev/watchdogデバイスを確認する。

# ls -al /dev/watchdog*
crw------- 1 root root  10, 130 May 19 07:09 /dev/watchdog
crw------- 1 root root 253,   0 May 19 07:09 /dev/watchdog0

今度は,デバイスファイルが見つかった。

Page Top

watchdogデーモンのインストール anchor.png

  • Raspbian Jessieの場合
    watchdog(ソフトウェアでのwatchdog)をインストールする。
    # apt-get install watchdog
  • Raspbian Stretchの場合
    特に必要ないみたい?
Page Top

watchdog.serviceファイルの編集 anchor.png

/lib/systemd/system/watchdog.serviceファイルを編集します。
[Install]の下に"WantedBy=multi-user.target"を追加する。

/lib/systemd/system/watchdog.service

....
[Install]
WantedBy=multi-user.target

Raspberry Pi起動時に,watchdogデーモンが動くようにする。

# systemctl enable watchdog
Page Top

watchdog.confの編集 anchor.png

/etc/watchdog.confを編集する。

/etc/watchdog.confの,

max-load-1 = 24          <-- コメントを外す。
watchdog-device = /dev/watchdog   <-- コメントを外す
waatchdog-timeout = 10       <-- 追加
Page Top

watchdogデーモンを起動してみる anchor.png

# systemctl start watchdog.service
Page Top

カーネルモジュールを使用しているかの確認 anchor.png

# lsmod | grep bcm2835_wdt
--
bcm2835_wdt             4133  1

1となっているので使用しているようだ。

あとは,Raspberry Piを再起動する。

Page Top

動作テスト anchor.png

どのような方法でwatchdogを叩きに行っているかはわかっていない・・・

まあ,とりあえずwatchdogにより再起動するか確認してみる。

無理やりシステムを停止するようなコマンドを実行してみる。
このような時には,shell入力に「:(){ :|:& };:」*1と入力すると,なぜかシステムを停止することができちゃう :p

$ :(){ :|:& };:

しばらくして,自動的にRaspberry Piが再起動すれば,Watchdog Timerが正常に動作していることになる。

これで,なんか外部のハード要因等でRaspberr Piがフリーズした時に,自動的に再起動するようになるので,利用する価値は高いと思う。

どんなことでwatchdogを叩いているかは調べとかないと行けないなぁ。


*1 Fork爆弾

新しくコメントをつける

題名
ゲスト名
投稿本文
より詳細なコメント入力フォームへ

Front page   Freeze Diff Backup Copy Rename Reload   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)
Counter: 1249, today: 1, yesterday: 1
Last-modified: 2020-12-26 (Sat) 16:07:42 (JST) (816d) by yuji