基板間距離測定 HAT基板 Raspberry Pi Zero WH

基板間距離測定 HAT基板 Raspberry Pi Zero WH
4xM2.5 Pi.PCB.bottom – (1.2mm) – Pi.PCB.top – (11.1mm = connector.male – connector.female ) – Hat.PCB.bottom – Hat.PCB.top
4xM2.0 PiCam.PCB.bottom – (0.8mm) – PiCam.PCB.top – (3mm) – Hat.PCB.bottom – Hat.PCB.top
PiCam=genuine&non-

Segmentation faultを誘発させる Raspberry Pi Zero WH

Segmentation faultを誘発させる Raspberry Pi Zero WH
★ 実験 1
環境 swap=0
$ grep ‘watch’ -rl ‘/’
Segmentation fault

ssh はこの時点では動作する
$ sudo reboot
リブート後はsshを受け付けない、フリーズ?している状態
RUN-GND端子をショートする→緑LEDは点滅し、sshを受け付けない
★ 実験 2
環境 swap=0
$ sudo grep ‘Watch’ -rl ‘/sys’
Segmentation fault #この時点ではSSH動作OK
$ sudo reboot #コマンド発行しても実際にはreboot処理をしていない
 
この状態で、GPIO3/SCL/WUP – GND にしても無反応
この状態で、RUN/WUP – GND にするとリセットされ、正常起動する
★ 実験 3
環境 swap=0, wdt=16
Pythonプログラム稼働中、SSH接続中

$ sudo grep ‘Watch’ -rl ‘/sys’
Segmentation fault #この時点ではSSH動作OK
$ sudo reboot #コマンド発行しても実際にはreboot処理をしていない
SSHアクセスは受け付けない
Watchdog でリセットはされない→WDT関連は動作している
Pythonプログラムは停止している
この状態で、GPIO3/SCL/WUP – GND にしても無反応
この状態で、RUN/WUP – GND にするとリセットされ、正常起動する

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も受け付ける)