ns_ooya
2018年12月21日 15時21分
3G-recoverの実装について
お世話になっております。
現在当社では、3g-recover機能をLinux Daemonではなくアプリ側への実装を検討しております。
3g-recover機能の内容を確認したところ、GPIOによる3Gモジュールのリセット後及び復帰動作の中で、
それぞれの確認処理が実装されております。
実装内容から無限ループの可能性を懸念しますが、本実装において無限ループとなる可能性は
ございませんでしょうか。
無限ループとなる場合、ループを終了する適切なタイミングをご教授願います。
■3g-recover-daemon
------------
※リセット後の確認処理
echo ${RESET_ASSERT} > /sys/class/gpio/RESET_N_3G/value
while [ -c /dev/ttyATCMD ]; do
sleep 1
done
------------
------------
※スリープ後の復帰処理
usleep 40000 # 3g_mod_rst_hold_time
echo ${RESET_NEGATE} > /sys/class/gpio/RESET_N_3G/value
while [ ! -c /dev/ttyATCMD ]; do
sleep 1
done
------------
当社の動作環境は以下の通りとなっております。
Armadillo-IoT ゲートウェイ G2
型番: AG421
3G モジュール:RHL85xx.5.5.16.0.201505261641.x6250_2
ブートローダー:loader-armadillo-iotg-std-ne-v3.10.0-ne2.bin
Linuxカーネル:linux-3.14-at10-ne2.tar.gz
ユーザーランド:atmark-dist-20151218-ne2.tar.gz
at_koseki
2018年12月21日 16時17分
古関です。
> 実装内容から無限ループの可能性を懸念しますが、本実装において無限ループとなる可能性は
> ございませんでしょうか。
> 無限ループとなる場合、ループを終了する適切なタイミングをご教授願います。
モジュール(/dev/ttyATCMD)が認識されない場合、またはdiconnectされない場合に無限ループになりますね。
モジュールの起動時間やシャットダウン時間が明記されていないため、
待ちループのタイムアウト時間の明言は難しいです。
参考値として、少なくとも通常かかる認識時間の3倍以上は待ったほうがいいと思います。
60秒程度待っても変ではないかと。
ただ、そもそもモジュールが認識されないと、3Gによる通信もできませんので、
フェイルセーフを考えるとタイムアウト後に更にリセットのリトライをするなり、
ある程度リトライしてダメな場合、システムを再起動するなりしたほうがベターかもしれません。