3Gモデム(Cinterion PH8-P)とPPPを使用してインターネットに接続するBuildrootベースの組み込みシステムがあります。 3Gモデムは、4つのttyUSBポートを提供するUSBデバイスです。これらの1つはPPPに使用され、もう1つはGPSに使用されます。
場合によっては、3Gモデムが機能しなくなり、再起動する必要があります。これを行うには、最初にPPPデーモンとGPSdデーモンを停止し、次にモデムを再起動してから、デーモンを再起動します。残念ながら、PPPを事前に実行すると、シリアルポートに何らかの影響を及ぼし、他のプログラムが使用できなくなるようです。
たとえば、PPPがまだ実行されていない、新しく起動したシステムで次を実行すると、次のようになります。
cat /dev/ttyUSB3&
echo "AT" > /dev/ttyUSB3
期待されるOK
AT応答が返されます。次にPPPを少し実行して(ponを呼び出して)停止し、モデムを再起動して同じATコマンドを再度送信しようとすると、端末はエコーしているように見えますモデムに送信したものを正確に戻しますが、OK
応答がありません。その結果、GPS ttyポートからのNMEAメッセージの受信を停止したため、GPSが機能しません。 PPPがすべてのシリアルポートを構成して、出力を別の場所にリダイレクトしているのとほぼ同じです。それにもかかわらず、PPPは、モデムの再起動後に再起動してもまったく問題ありません。ログによると、チャットスクリプトはATコマンドを喜んで送信し、期待される応答を返します。
この問題の原因は何ですか?
結局のところ、PPP isそれ自体のシリアルポートに影響を与えています。それがGPSの構成に使用されているため、問題の原因となっています。
PPPの実行前後のstty -F /dev/ttyUSB3
の結果を比較すると、PPPがシリアルポートをrawモードで構成しているため、それを使用して構成することができなかったことが明らかになりました。 GPSポート興味深いのは、モデムがリセットされたためにttyUSBxデバイスノードが削除されて再作成された後も、これらの設定が維持されたことです。
stty sane -F /dev/ttyUSB3
を実行してデフォルト設定に戻すだけで、問題なくGPSポートを構成できました。