予期しないシリアルポートで奇妙な動作が見られるシステムがあります。以前、usb-to-serialアダプターでこれを時々見ましたが、今では、はるかに高い頻度で、ネイティブシリアルポートでも見ています。
システムは自動テストを実行するように設定されており、ポートを開いていないときにシリアルデバイスから大量のデータを出力するいくつかのタスクを最初に実行します。デバイスも自動的にリセットされます。tx/rx回線のみが接続されています。フロー制御はありません。
これらのタスクが完了すると、テストウェアはシリアルポートを開き、予期しない応答を受け取るため、すぐに失敗します。これを再現すると、ターミナルプログラムでシリアルポートを開くと、数キロバイトの古いデータ(ポートが閉じられたときに送信されたように見える)がすぐにフラッシュされることがわかりました。このプログラムを閉じると、期待どおりにテストを実行できます。
これを引き起こす原因は何ですか?デバイスが閉じている場合、Linuxはシリアルポートのバッファリングをどのように処理しますか?デバイスを開いて出力を送信させてから、読み取らずに閉じた場合、同じ問題が発生しますか?