Linuxのアップグレード後にシリアルポートでバイトが失われるのはなぜですか?

Linuxのアップグレード後にシリアルポートでバイトが失われるのはなぜですか?

私はYoctoを使って構築された組み込みLinuxシステムを持っています。最近、Dunfell(カーネル5.4)からKirkstone(カーネル5.15)にアップグレードしましたが、シリアルポートの問題が発生し始めました。時々、転送中に大量のバイトが失われます。ある時は1Mのデータをバイト損失なしで送ることができ、ある時はその量のデータを送るために300バイトだけ送ります。

以前はこのシステムに問題があり、同様の症状がありました。 TXで数バイトが失われるため、安定性を得るには転送速度を大幅に短縮する必要があります。その後、問題はimx_sdmaモジュールが実行されていないことです。これを含めると、より高い転送速度ですべてがうまく機能しました。

そのため、この問題が発生したときに最初に確認したのはモジュールがロードされたことを確認しましたが、実際にはロードされました。また、伝送速度を下げてもバイト損失に顕著な影響がないことも発見した。だから違うようです。

アップグレード前にハードウェアの問題は発生せず、他のシステムでも発生したため、ハードウェアの問題を排除できます。

これらの転送中に過度の処理負荷は発生しません。現在のプロセッサ使用率は0%です。

このシステムにはハードウェアまたはソフトウェアフロー制御がないことに注意してください。実際にはTX専用パスです。この場合、一部のデータが失われたり破損したりする可能性がありますが、これは事実ではなく、以前はうまくいきました。

私が見つけなければならない理由や解決策を知っている人はいますか?

編集:受信側に少し奇妙な点があります。デバイス (/dev/ttymxc1) が非ブロック状態です。バイトをストリーミングできますが、cat /dev/ttymxc1またはdd if=/dev/ttymxc1を実行すると、そのポートに大量のバイトが入ってもデータなしですぐに返されます。これにより、受信に問題がある可能性があると考えられます。

関連情報