Linuxでは、ハブとシリアルデバイスドライバはどこにありますか?シリアルTTLアダプタが一定時間後にデータを壊すのを見たことがありますか?

Linuxでは、ハブとシリアルデバイスドライバはどこにありますか?シリアルTTLアダプタが一定時間後にデータを壊すのを見たことがありますか?

この質問は完全に説明するのが難しいです。事前にお詫び申し上げます。完全な説明を読んでください。ありがとうございます。

注:主に文書化するためにこの記事を公開しており、この問題を解決するために更新する必要があるLinuxイメージの一部を識別する方法について提案を求めています。たぶん誰かがそれを見て解決策を見つけるかもしれません。 30年以上にわたってシリアルTTL通信を使用してきましたが、この問題は一度も経験したことがありません。

セキュリティ/帯域幅の問題により簡単に更新できない内蔵ボードがあります。小さなアップデートは可能ですが、目標ではありません。問題を解決することに加えて、システムのどの部分に教育用にこれらのドライバが含まれているかを知りたいです。私は問題を解決したいのではなく、問題を理解したい。

ボードにはさまざまなデバイスを接続できるUSBコネクタがあり、通常は機能します。キーボード、Wi-Fiアダプタなど

外部シリアルデバイス(Arduinoや他のデバイスなど)と通信しようとしたときによく使用されるデバイスの1つは、シリアルTTLアダプタです。

このアダプタをUSBポートに直接接続すると、完全に機能します。私は通常CP210x、最も一般的にはCP2102/2104を使用していますが、CH340、FTDIなども使用しました。問題ありません。

最近、2つのUSBデバイスを同時に接続する必要があるアプリケーションがあり、小さなUSBハブを追加しました。 HUBを介してシリアルTTLアダプタを接続した後、約678uS以降に送信されるデータがすべて失われることがわかりました。 (!?)

たとえば、オシロスコープトレースのスクリーンショットセットは、シリアルTTLアダプタに直接接続したときに灰色のトレースを示し、ハブを介して接続したときに青いトレースを示します。

問題を示す範囲追跡スクリーンショット

ここに画像の説明を入力してください。

ご覧のとおり、データの中間バイトが切り捨てられています。後で測定した結果、データ長や伝送速度に関係なく、時間が約20uS程度一貫したことがわかりました。

これは x3 ハブと x3 アダプタで発生します。

ハブに電源を供給してみました。 1つは独自のアダプタに付属し、もう1つは標準的な電源接続を持ち、3つ目はベンチ電源に接続する電源ピンを持っています。違いはありません。

これはRS232ではないため、チャージポンプの故障はありません。チップの電源を監視しましたが、停電が発生しませんでした。

同じハブとアダプタは、PC x2 OS(Ubuntu 20.04、Windows 11)に接続すると完全に機能します。

私の仮説は、埋め込み画像のUSBドライバに問題があるということです。繰り返しますが、小規模以外には更新できませんが、とにかく私の本当の目標は問題を理解することです。

  • 実際の質問は、Linuxスタックのどの部分がそれを制御するのかということです。
  • ボーナスポイント:そのセクションのみをどのように更新しますか?
  • ボーナス追加クレジット:以前に見たことがありますか?

ベストアンサー1

Linuxカーネルの問題が何であるかを把握するために必要な作業量は膨大です。これが見つかったら、修正するにはカーネルを再コンパイルする必要があります。現在、組み込みデバイスとそのビルド環境(コンパイラなど)にあるソースの正確なバージョンが必要です。 [これはYoctoがこのタイプのハードウェアとして人気を集める理由の1つです。これは、何かを再構築するために必要なすべてのもののスナップショットを維持できるからです。

進む最も理想的な方法は、マザーボードやPCで問題を再現することです。ここでは、問題のある最も近い2つのバージョンとそうでないバージョンが見つかるまで簡単にダウンロードして、さまざまなカーネルバージョンを試すことができます。その後、カーネルのソースコードの違いを見て、修正されたものについての手がかりを見つけることができます。

ソースを参照して問題を特定するには、次の場所でホストハブドライバを見つけます。 ehci-hcd.c USB2の場合 xhci-hub.c USB3の場合。一般的な外部ハブドライバは次の場所にあります。 ハブc。 USBシリアルアダプタ(例: ch341.c。上記のURLを使用すると、異なるバージョンのカーネルに変更できます。以前のバージョンのカーネルに戻ると、ファイル名が変更されたことを確認できます。 USBコードに関する文書があります。ここ

たとえば、githubで同じファイルを見つけることができます ch341.c、クリックすると責めるボタンを押すと、各行の現在の内容の理由を説明するコメント付きのリストが表示されます。これ歴史ボタンは変更のリストを提供します。このカーネルツリーをローカルにダウンロードし、gitツールを使用してコミットのgit変更を検索し、特定のバージョンのソースコードを抽出できます。

おすすめ記事