Raspberry Pi」カテゴリーアーカイブ

WDT WatchDogTimer 調査・設定準備 Raspberry Pi Zero WH(stretch lite版)

WDT WatchDogTimer 調査・設定準備 Raspberry Pi Zero WH(stretch lite版)

★ $ vcgencmd version #ファームウエアのバージョン確認
Jan 22 2019 16:54:23
★ $ cat /proc/cpuinfo #リビジョン確認
★ $ uname -a #オペレーティング・システムの情報確認(カーネル kernelなど)
Linux 000011 4.14.94+
★ $ lsb_release -a #オペレーティング・システムの情報確認(OSバージョン コードネーム Codenameなど)
Description: Raspbian GNU/Linux 9.6 (stretch)

★ $ ls -al /dev/watchdog*
crw——- 1 root root 10, 130 Feb 6 04:48 /dev/watchdog
crw——- 1 root root 252, 0 Feb 6 04:48 /dev/watchdog0
★ $ dmesg | grep bcm2835-wdt
[ 0.906432] bcm2835-wdt 20100000.watchdog: Broadcom BCM2835 watchdog timer
★ /etc/systemd/system.conf
#RuntimeWatchdogSec=0
#ShutdownWatchdogSec=10min

★ 推定・調査
多くのマイクロコントローラーは、watchdogtimer(タイムアウト秒数設定), watchdogon(ON), watchdogoff(OFF), watchdogclear(タイマークリア)の機能があるとして、省略できるとすると、ONとOFFは秒数設定の特定値で代替できる。タイムアウト秒数が固定だとすると、タイマークリアに秒数設定ができれば良い、それをどこで実行するかの設定も必要だけれど、ファームウエアによってクリティカルな場所は決まるので考慮済みで既に設定されているはず(割り込みルーチン内や周期タイマー内には入れない、理由はメインルーチンが暴走してもこれらはしぶとく動作していることが多いから)。#ShutdownWatchdogSec=10min は例外条件だとして、#RuntimeWatchdogSec=0 の値での挙動を調査。
RuntimeWatchdogSec=1 #SSHでアクセスできず
RuntimeWatchdogSec=4, =16, =28, =30 #通常動作
RuntimeWatchdogSec=32, =35, =40 #再起動繰り返す
★ 実験.1
RuntimeWatchdogSec=16(単に動作範囲の中間値) に設定後、watchdog が有効に動作するかどうかの実験
$ :(){ :|:& };: #処理オーバーを発生させる #コマンド後にしばらくしてリセット発生、動作OK

★ 実験.2
RuntimeWatchdogSec=0 に設定後、watchdog が動作するかどうかの実験
$ :(){ :|:& };: #処理オーバーを発生させる #コマンド後、暴走
SSHは受け付けない
この状態で、GPIO3/SCL/WUP – GND にしても無反応
この状態で、RUN/WUP – GND にするとリセットされ、正常起動する(SSHも受け付ける)

GPIO 出力ポートの状態を読み込む Raspberry Pi Zero WH

GPIO 出力ポートの状態を読み込む Raspberry Pi Zero WH
出力設定値 or 出力ピン状態 のどちらが読み込まれるのか不明、ハードウエアマニュアルを読むか、出力ピンに適当な値の抵抗を接続し強制的に01にするかして調べる

GPIO を共有し別々のPythonプログラム(例 1.py 2.py)から制御する、動作OK
GPIO.setmode(GPIO.BCM) #(1.py 2.py)単なる記述形式指定
GPIO.setup(17, GPIO.OUT) #(1.py 2.py)ピン入出力設定、それぞれの.pyに同じ内容を記述する
GPIO.output(17, 0) #(1.py)に記載
print(GPIO.input(17)) #(2.py)に記載

Swapメモリー容量確認と変更 Raspberry Pi Zero WH & 3A+

Swapメモリー容量確認と変更 Raspberry Pi Zero WH & 3A+ スワップ
$ free -h #確認 Swapメモリー容量 デフォルト=100(100Mバイト)
/etc/dphys-swapfile #このファイルを変更する
CONF_SWAPSIZE=512 #100→512に変更、要再起動

$ sudo dphys-swapfile swapoff #一時的に停止するだけ、設定ファイルは無影響