1

私はラズベリーパイゼロOTGとUSB周辺機器のプロトコルをサポートしていることを知っているし、ここに示されている周辺機器に組み込まれたクールなのがたくさんあります:https://learn.adafruit.com/turning-your-raspberry-pi-zero-into-a-usb-gadget?view=all#other-modulesラズベリーパイゼロUSBデバイスエミュレーション

問題は、私はUSBをエミュレートする必要があるということですこのリストに表示されない周辺機器。私はデバイスのベンダーIDと製品IDを持っており、これをどうやって行うのかを正確に把握しようとしています。 RaspbianカーネルのOTG USBドライバを変更する必要がありますか?自分のカーネルを完全にビルドする必要がありますか?それとも私が気づいていないより良い選択肢がありますか?

ありがとうございます!

答えて

1

RaspbianカーネルでOTG USBドライバを変更する必要はありますか?

あなたの最初の質問への答えは「それが依存」ではありませんが、お使いのデバイス があまりにも珍しい何もしないならば、これは可能性がありませ:あなたはカーネルモジュールやカーネルのソースコードを変更しないで 必要です。

RaspbianがConfigFSをサポートする最新のカーネルをサポートしていることは幸いです。あなたがdtoverlay=dwc2で設定されたら、あなたはそうのようなルートとしてFunctionFSバルクエンドポイントを開くことができます:あなたがより密接に他のデバイスをエミュレートする必要がある場合は

modprobe libcomposite 
modprobe usb_f_fs 
cd /sys/kernel/config/usb_gadget 
mkdir -p myperipheral; cd myperipheral 
echo 0x1234 > idVendor # put actual vendor ID here 
echo 0xabcd > idProduct # put actual product ID here 
mkdir configs/c.1 
mkdir configs/c.1/strings/0x409 
echo "My Peripheral" > configs/c.1/strings/0x409/configuration 
mkdir functions/ffs.my_func_name 
ln -s functions/ffs.my_func_name configs/c.1/ 
mkdir -p /tmp/mount_point 
mount my_func_name -t functionfs /tmp/mount_point 
# compile ffs-test from source, then copy and run it from /tmp/mount_point 
ls /sys/class/udc > UDC 

、それはbcdDevicebcdUSB、シリアルを設定するのはあなた次第です数字、製造元、製品文字列、最大電力、os_desc、およびおそらく他のフィールド。

AFAIK FunctionFSは、アイソクロナスエンドポイント、割り込み転送、または通常とは異なる制御転送をサポートしていません。これが必要な場合は、ソースコードhereを使用して既存のガジェットモジュールを拡張する必要があります。

更新:これをテストするために家に帰ったとき、私はRaspbianと深刻な警告を受けました。 usb_f_fsはデフォルトでは有効になっていないため、最初はffs.my_func_nameの作成に失敗します。カーネルモジュールを変更する必要はありませんが、別の設定でrecompileにする必要があります。 USBドライバー - > USBサポート - > USBガジェットサポート - > configfs/Functionファイルシステム(FunctionFS)を介して設定可能なUSB機能+テストするいくつかの他のモジュール。新しいカーネル/モジュールをアップロードした後、上記のスクリプトをRaspbian 8でテストしました。ConfigFSの代わりにより簡単なg_ffsレガシーモジュールを使用する場合は、USB Gadget Drivers/Function Filesystemを(M)に設定することをお勧めします。