上野家のホームページ
ナーマル,マリン,ココ
[
新規
|
一覧
|
検索
|
最新
|
ヘルプ
]
PC/RaspberryPi/Watchdog Timer
をテンプレートにして作成
資料室
PC/RaspberryPi/Watchdog Timer をテンプレートにして作成
[
差分
|
バックアップ
|
リロード
]
[ ]
開始行:
* Watchdog Timer
組み込み制御を行うシステムには,なんかあった時のために[[W...
通常はハードウェアで実装している(ソフトウェアで実装する...
何かあった時に自動で再起動するように出来るので有用ではあ...
** デバイスドライバーのロード
/dev/watchdogデバイスを確認する。
# ls -al /dev/watchdog*
見つからない・・・
- ''Raspbian Jessieの場合'',~
-- 設定ファイルの編集・作成~
''/etc/watchdog.conf''を編集する。
max-load-1 = 24 <-- コメントを外す。
watchdog-device = /dev/watchdog <-- コメントを外す
waatchdog-timeout = 10 <-- 追加
-- カーネルモジュールのロード~
''/etc/modules''に以下を追加して,カーネルモジュールをロ...
# echo "bcm2835_wdt" >> /etc/modules
その後,watchdog用のカーネルモジュールをロードします。
# modprobe bcm2835_wdt
正常にカーネルモジュールをロードできたか確認する。
# lsmod | grep bcm2835_wdt
--
bcm2835_wdt 4133 0
--
0なので,まだこのカーネルモジュールを使用していないことに...
-''Raspbian Stretchの場合'',~
-- 設定ファイルの編集・作成~
''/etc/modprobe.d/bcm2835-wdt.conf''を作成する。~
options bcm2835_wdt heartbeat=14 nowayout=0
-- watchdogを有効にする~
/boot/config.txtに,以下を追加する。~
# activating the hardware watchdog
dtparam=watchdog=on
この後,リブートする。~
これでDevice Treeでデバイスドライバーがロードされる。~
/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/watchd...
今度は,デバイスファイルが見つかった。
Watchdog Timerをバックグラウンドでカウントアップしていき...
*** デバイスドライバーの確認
- Raspbian Jessieの場合~
# lsmod | grep bcm2835_wdt
--
bcm2835_wdt 4133 1
1となっているのでモジュールがロードされ,使用しているよう...
- Raspbian Stretchの場合~
Kernel起動時にロードされるようだ。~
# dmesg | grep bcm2835-wdt
[ 1.066065] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835...
** watchdog resetデーモンの用意
watchdog resetを行うプログラムを用意する。~
これにより定期的にwatchdog timerをリセットしてカウンター...
システムが正常な場合このプログラムも正常に動作し続けるた...
今回はバックグラウンドで動いているプログラムによりwatchdo...
- ''Raspbian Jessieの場合''~
watchdog resetデーモンをインストールする。パッケージ管理...
# apt-get install watchdog
-- watchdog.serviceファイルの編集~
''/lib/systemd/system/watchdog.service''ファイルを編集す...
[Install]の下に,WantedBy=multi-user.targetを追加する。~
....
[Install]
WantedBy=multi-user.target
-- 起動時にwatchdog resetデーモンが自動起動するように設定...
# systemctl enable watchdog
# systemctl start watchdog
- ''Raspbian Stretchの場合''~
systemdにより14秒以内の間隔でハートビートを行うように設定...
特にデーモンを自動起動させるための設定は必要はないようだ...
-- 設定ファイルの編集~
''/etc/systemd/system.conf''ファイルを編集する。~
#RuntimeWatchdogSec=0
を,
RuntimeWatchdogSec=14
に変更する。~
* Watchdog Timerの動作テスト
とりあえずWatchdog timerにより再起動(リセット)するかど...
これには,無理やりシステムを停止するようなコマンドを実行...
Bashの入力プロンプトで,「:(){ :|:& };:」と入力する((フォ...
$ :(){ :|:& };:
なぜかシステムを停止することができちゃう :p
'':''という関数(引数なし)を定義することを宣言している。~
続く''{ :|:& };''がその本体で,自分自身を2つ起動してパイ...
最後の'':''が,その関数の実行開始を意味している。~
この文字列は,関数名を'':''としていることがわかりにくくし...
forkbomb(){ forkbomb|forkbomb & } ; forkbomb
同じ機能をCの場合は,
#include <unistd.h>
int main()
{
while(1)
fork();
return 0;
}
でプログラムできる。
Pythonだと,
import os
while True:
os.fork()
になるのかな。
終了行:
* Watchdog Timer
組み込み制御を行うシステムには,なんかあった時のために[[W...
通常はハードウェアで実装している(ソフトウェアで実装する...
何かあった時に自動で再起動するように出来るので有用ではあ...
** デバイスドライバーのロード
/dev/watchdogデバイスを確認する。
# ls -al /dev/watchdog*
見つからない・・・
- ''Raspbian Jessieの場合'',~
-- 設定ファイルの編集・作成~
''/etc/watchdog.conf''を編集する。
max-load-1 = 24 <-- コメントを外す。
watchdog-device = /dev/watchdog <-- コメントを外す
waatchdog-timeout = 10 <-- 追加
-- カーネルモジュールのロード~
''/etc/modules''に以下を追加して,カーネルモジュールをロ...
# echo "bcm2835_wdt" >> /etc/modules
その後,watchdog用のカーネルモジュールをロードします。
# modprobe bcm2835_wdt
正常にカーネルモジュールをロードできたか確認する。
# lsmod | grep bcm2835_wdt
--
bcm2835_wdt 4133 0
--
0なので,まだこのカーネルモジュールを使用していないことに...
-''Raspbian Stretchの場合'',~
-- 設定ファイルの編集・作成~
''/etc/modprobe.d/bcm2835-wdt.conf''を作成する。~
options bcm2835_wdt heartbeat=14 nowayout=0
-- watchdogを有効にする~
/boot/config.txtに,以下を追加する。~
# activating the hardware watchdog
dtparam=watchdog=on
この後,リブートする。~
これでDevice Treeでデバイスドライバーがロードされる。~
/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/watchd...
今度は,デバイスファイルが見つかった。
Watchdog Timerをバックグラウンドでカウントアップしていき...
*** デバイスドライバーの確認
- Raspbian Jessieの場合~
# lsmod | grep bcm2835_wdt
--
bcm2835_wdt 4133 1
1となっているのでモジュールがロードされ,使用しているよう...
- Raspbian Stretchの場合~
Kernel起動時にロードされるようだ。~
# dmesg | grep bcm2835-wdt
[ 1.066065] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835...
** watchdog resetデーモンの用意
watchdog resetを行うプログラムを用意する。~
これにより定期的にwatchdog timerをリセットしてカウンター...
システムが正常な場合このプログラムも正常に動作し続けるた...
今回はバックグラウンドで動いているプログラムによりwatchdo...
- ''Raspbian Jessieの場合''~
watchdog resetデーモンをインストールする。パッケージ管理...
# apt-get install watchdog
-- watchdog.serviceファイルの編集~
''/lib/systemd/system/watchdog.service''ファイルを編集す...
[Install]の下に,WantedBy=multi-user.targetを追加する。~
....
[Install]
WantedBy=multi-user.target
-- 起動時にwatchdog resetデーモンが自動起動するように設定...
# systemctl enable watchdog
# systemctl start watchdog
- ''Raspbian Stretchの場合''~
systemdにより14秒以内の間隔でハートビートを行うように設定...
特にデーモンを自動起動させるための設定は必要はないようだ...
-- 設定ファイルの編集~
''/etc/systemd/system.conf''ファイルを編集する。~
#RuntimeWatchdogSec=0
を,
RuntimeWatchdogSec=14
に変更する。~
* Watchdog Timerの動作テスト
とりあえずWatchdog timerにより再起動(リセット)するかど...
これには,無理やりシステムを停止するようなコマンドを実行...
Bashの入力プロンプトで,「:(){ :|:& };:」と入力する((フォ...
$ :(){ :|:& };:
なぜかシステムを停止することができちゃう :p
'':''という関数(引数なし)を定義することを宣言している。~
続く''{ :|:& };''がその本体で,自分自身を2つ起動してパイ...
最後の'':''が,その関数の実行開始を意味している。~
この文字列は,関数名を'':''としていることがわかりにくくし...
forkbomb(){ forkbomb|forkbomb & } ; forkbomb
同じ機能をCの場合は,
#include <unistd.h>
int main()
{
while(1)
fork();
return 0;
}
でプログラムできる。
Pythonだと,
import os
while True:
os.fork()
になるのかな。
ページ名:
Counter: 0, today: 0, yesterday: 0
Copyright©2008 Yuji Ueno All Rights Reserved.
ログイン
ユーザ名:
パスワード:
IDとパスワードを記憶
パスワード紛失
メインメニュー
ホーム
でぶlog
資料室
最新ページ一覧
全ページ一覧
ヘルプ
フォーラム
お問い合わせ