私たちのほとんどは、USBデバイスについてあまり考えません。プラグを差し込むだけで、忘れてしまいます。しかし、USBがどのように機能するかについてもっと知りたいと思っている好奇心旺盛なタイプの場合はどうでしょうか?今日のスーパーユーザーのQ&A投稿には、好奇心旺盛な読者の質問に対する回答があります。
今日の質疑応答セッションは、コミュニティ主導のQ&AWebサイトのグループであるStackExchangeの下位区分であるSuperUserの好意で行われます。
写真提供: Evilelka Kowalski(Flickr) 。
質問
スーパーユーザーリーダーsmeebは、実際のUSB通信プロトコルが実際に存在するかどうかを知りたいと考えています。
ウィキペディアによると、 USB :
- コンピュータと電子デバイス間の接続、通信、および電源供給のためにバスで使用されるケーブル、コネクタ、および通信プロトコルを定義します。
しかし、実際にはありますか USB通信プロトコル ?私の理解はそれです:
- USBデバイスをマシン(Ubuntuやあらゆる種類のLinuxなど)に接続します。
- Linuxはどういうわけかそのデバイスのデバイスドライバーを見つけます( あなたが知っているならボーナス! )そしてそれをロードします。
- これで、デバイスは / dev / theDevice 。
- ユーザースペースアプリが読み取りと書き込みができるようになりました / dev / theDevice ドライバーは、基盤となるデバイス/ハードウェアへの低レベルの入力と出力を処理します。
私の知る限り、 USB通信プロトコル このフローのどこにも表示されません。私の理解が正しければ、USBはPCとデバイス間のケーブルと電気接続にすぎません。
私はここで間違っていますか? USBは実際に、上記のフローを強調するある種の低レベルプロトコルを実装していますか?もしそうなら、それは何ですか、そしてそれは30,000フィートのビューでどのように機能しますか?
実際のUSB通信プロトコルはありますか?
答え
スーパーユーザーの寄稿者であるRedGrittyBrickとprojectdpが答えを持っています。まず、RedGrittyBrick:
はい ( USBプロトコルを参照してください )。
私が理解しているように、USB仕様は、階層化されたプロトコルとデバイスプロファイルの複雑なセットを定義しています。
たとえば、USBデバイスは、大容量記憶装置、キーボード、ヒューマンインターフェイスデバイスなどの高レベルのテンプレートに準拠し、汎用デバイスドライバーによって管理できます。一部のUSBデバイスは、オペレーティングシステムの低レベルのUSBサポートがデバイス固有の高レベルのドライバーが必要であることを認識できるように、低レベルで通信できます。
projectdpからの回答が続きます:
質問
低レベルのUSB通信プロトコルが動作していますか?それは何ですか?
回答
はいあります。 USB仕様には、バスがビットレベルで使用される方法を定義するUSBプロトコルが含まれています。これは、高レベルのプロトコル(つまり、大容量記憶装置、HIDなど)の基礎となる低レベルのプロトコルになります。
USBプロトコルの仕組みの詳細については、これ OSDev wiki 役に立ちます。ここに別のものがあります 興味深い説明 シーケンス図を使用して、USBプロトコルごとのさまざまなデータトランザクションを記述します。
ボーナス質問
Linuxはどのようにしてそのデバイスのデバイスドライバーを見つけてロードしますか?
ボーナスアンサー
LinuxでUSB対応カーネルを使用している場合、USB仕様により、動作中のUSBデバイスがハードウェアとカーネルを介して検出されます。ハードウェア側では、検出はUSBホストコントローラーによって行われます。次に、カーネルでホストコントローラードライバーが引き継ぎ、ワイヤー上の低レベルビットをUSBプロトコル形式の情報に変換します。次に、この情報はカーネルのusbcoreドライバーに入力されます。
私はこの優れたものから言い換えました Opensourceforuの記事 、Linuxのコンテキストでの質問について、より詳細で明確になっています。
以下に共有されているスレッドリンクを介して、活発な議論の残りの部分をチェックしてください!
説明に追加するものがありますか?コメントで音を立ててください。他の技術に精通したStackExchangeユーザーからの回答をもっと読みたいですか? ここで完全なディスカッションスレッドをチェックしてください 。