web-dev-qa-db-ja.com

デバイスが作成されるとどうなりますか?また、自分で動作をエミュレートするにはどうすればよいですか?

私が質問する理由は、物理デバイスを接続せずに、デバイスをエミュレートするか、ディスク上にデバイス(具体的にはUSBデバイス)を作成したいからです。

lsusb出力に表示されるようなデバイスを作成したいと思います。

これまでに試したのは、ddでファイルを作成し、losetupを使用して、作成したファイルをループデバイス(/ dev/loop *)に接続することです。ただし、dmesgではメッセージは作成されません。

編集:

リクエストに応じて、私のジレンマに関する詳細情報をここに示します。 USBスティックの実行(.exe)をUSBスティックに制限している言語トレーナーと一緒に、かなり前にUSBスティックを購入しました。 wineはUSBデバイスデータをexeに転送しないため、VMで使用することを余儀なくされました。私はVMでスティックを使用しているので、ホストでスティックをエミュレートして完全に仮想化できると思いました。物理的なUSBスティックは必要ありません。

2
UncleJack

あなたが探しているものは、仮想USBデバイスと呼ばれます。標準のカーネルにはそのようなものは含まれていないと思います。

一部の仮想マシンは、ゲストのUSBデバイスをエミュレートできます(ホストに接続されたハードウェアUSBデバイスにデータを中継するのとは対照的です)。たとえば、 [〜#〜] kvm [〜#〜] は、USBストレージとヒューマンインターフェイスデバイスをエミュレートできます。

gadget フレームワークは、LinuxデバイスがUSB周辺機器として機能するための方法です(USBは非常に非対称です。デバイスとホストは異なることを行います)。イーサネット経由でUSB接続を中継するための sbnet ドライバーもあります。これを使用して、イーサネットプロトコルを話すプログラムを書くことができます。

これらの間接的な方法を使用することは、独自のUSBドライバーを実装するよりも必ずしも簡単ではありません。そのルートを選択した場合、 Linux Device Drivers(3rd ed。) が読むべき本です。

あなたが求めていることは簡単ではないでしょう。根本的な問題が何であるかを説明すると、誰かがより良い解決策を提案できる可能性があります。