私は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
予想されるAT応答を受け取りましたOK
。その後、しばらくPPPを実行し(ponを呼び出す)、PPPを停止して(poffを呼び出して)モデムを再起動してから同じATコマンドを再送信しようとすると、端末は私がモデムに送信したものをエコーするように見えます。応答がありませんOK
。その結果、GPS tty ポートで NMEA メッセージの受信が中断されるため、GPS は機能しません。 PPP はすべてのシリアルポートを設定し、出力を他の場所にリダイレクトするのとほぼ同じです。それでもモデムが再起動した後、PPPは完全に機能しました。ログによると、チャットスクリプトはATコマンドを幸せに送信し、期待した応答を受け取りました。
この問題の原因は何ですか?
答え1
PPPであることが判明しました。はいこれは、独自のシリアルポートに影響を与え、これがGPSを設定するために使用されるシリアルポートであるため、これが問題の原因です。
stty -F /dev/ttyUSB3
PPPの実行前後の結果を比較すると、PPPがシリアルポートをrawモードに設定することは明らかです。これは、PPPを使用してGPSポートを設定できないことを意味します。興味深いことに、これらの設定は、モデムのリセットによってttyUSBxデバイスノードが削除され再生成される場合でも持続します。
単純にデフォルト設定で復元を実行して、stty sane -F /dev/ttyUSB3
問題なくGPSポートを設定できました。