期待しないシリアルポートで奇妙な動作が見られるシステムがあります。私はこれまで、USBシリアルアダプターを使ってこれを見たことがありますが、今ではそれをネイティブのシリアルポートでも見ています。デバイスを開くときにLinuxのシリアルポートバッファが空でない
システムは自動テストを実行するように設定されており、ポートが開いていない間にシリアルデバイスから大量のデータが出力されるようなタスクを最初に実行します。また、デバイス自体もリセットされます。 tx/rx回線のみが接続されています。フロー制御はありません。
これらのタスクが完了すると、テストウェアはシリアルポートを開き、予期しない応答が発生するため、直ちに失敗します。これを再現すると、ターミナルプログラムでシリアルポートを開くと、ポートが閉じられたときに送信された数キロバイトの古いデータがすぐにフラッシュされることがわかりました。このプログラムを閉じると、テストを期待どおりに実行できます。
何が起こる可能性がありますか?デバイスが閉じられたときに、Linuxはシリアルポートのバッファリングをどのように処理しますか?デバイスを開いて、出力を送信させてから、それを読み取らずに閉じた場合、同じ問題が発生しますか?
。だから、なぜ私はこの行動を時間の中でしか見ないのだろうか?私はテストのためにpyserialを使用しています。また、付属のminiterm.pyスクリプトを対話型端末として使用しています。この問題が発生しているのはシリアルポートだけではありません。それは交互に見える。すべてのシリアルポートは、データが閉じられているときにデータを受信しますが、開かれた時点で1つだけバッファリングされます。おそらく、ボーレートはその上に正しく設定されたままになっているだけでしょうか? – djs
@ djs:ポートスピードは私の頭に浮かぶ最初のものです。また、 'gpsd'や' logind'がGPSデバイスやログイン接続を探しているクローズドポートにアクセスしており、ポート速度を推測的に変更している可能性もあります。 – wallyk
いずれのサービスも実行されていません。 sttyは私がチェックする前に115200番のすべてのポートを報告し、そのうちの1人だけがバッファを保有していることを発見しました。これはボーレートを確認するのに適したツールですか? – djs