USBストレージデバイスの接続を制御するためのプログラムを書いています(これは古典的なテーマです)。私のプログラムでは問題ありませんが、今、いくつかのテストを記述したいと思います。そのためには、USB接続をシミュレートする方法が必要だと気づきました。
接続だけでなく、デバイスのプロパティ(容量、フォーマットなど)を設定できるようにする必要があります。
私はここで解決策を見つけました: SBエミュレーション
3.11 USBエミュレーション
QEMUはPCI UHCI USBコントローラーをエミュレートします。仮想USBデバイスまたは実際のホストUSBデバイスを仮想的に接続できます(試験的、Linuxホストでのみ機能します)。 QEMUは、必要に応じて仮想USBハブを自動的に作成して接続し、複数のUSBデバイスを接続します。
3.11.1 USBデバイスの接続
USBデバイスは、-usbdeviceコマンドラインオプションまたはusb_add monitorコマンドを使用して接続できます。利用可能なデバイスは次のとおりです。
mouse
仮想マウス。有効にすると、PS/2マウスエミュレーションが無効になります。
tablet
絶対座標を使用するポインターデバイス(タッチスクリーンなど)。これは、QEMUがマウスをつかむことなくマウスの位置を報告できることを意味します。アクティブにすると、PS/2マウスエミュレーションもオーバーライドします。
disk:file
ファイルに基づく大容量記憶装置(disk_imagesを参照)
Host:bus.addr
bus.addrで識別されたホストデバイスを通過させる(Linuxのみ)
Host:vendor_id:product_id
vendor_id:product_id(Linuxのみ)で識別されるホストデバイスを通過させる
wacom-tablet
仮想Wacom PenPartnerタブレット。このデバイスは上記のタブレットに似ていますが、タッチ座標に加えてタッチ圧力を報告するため、tslibライブラリで使用できます。
keyboard
標準USBキーボード。 PS/2キーボードをオーバーライドします(存在する場合)。
serial:[vendorid=vendor_id][,product_id=product_id]:dev
シリアルコンバータ。これは、ホストキャラクターデバイスdevに接続されたFTDI FT232BMチップをエミュレートします。使用可能なキャラクターデバイスは、-serialオプションと同じです。 vendoridおよびproductidオプションを使用して、デフォルトの0403:6001を上書きできます。例えば、
usb_add serial:productid=FA00:tcp:192.168.0.2:4444
は、ip 192.168.0.2のtcpポート4444に接続し、仮想シリアルコンバーターに接続します。これにより、Matrix Orbital LCD Display(USB ID 0403:FA00)を偽装します。
braille
点字デバイス。これは、BrlAPIを使用して、実際のデバイスまたは偽のデバイスに点字出力を表示します。
net:options
CDCイーサネットおよびRNDISプロトコルをサポートするネットワークアダプター。 optionsは、NIC -net nic、optionsと同様のオプション(説明を参照)を指定します。たとえば、ユーザーモードネットワークは、
qemu-system-i386 [...OPTIONS...] -Net User,vlan=0 -usbdevice net:vlan=0
現在、これはPCI NICをサポートするマシンでは使用できません。
bt[:hci-type]
Bluetoothドングルのタイプが-bt hciオプションと同じ形式で指定されています。許可されているHCIタイプを参照してください。タイプが指定されていない場合、HCIロジックは-bt hci、vlan = 0に対応します。このUSBデバイスは、HCIのUSBトランスポート層を実装しています。使用例:
qemu-system-i386
[...オプション...] -usbdevice bt:hci、vlan = 3 -bt device:keyboard、vlan = 3