USB OTG를 사용하여 Raspberry Pi에서 HID 및 네트워크 장치를 에뮬레이션하려고 합니다. 요구사항은 다음과 같습니다.
- 네트워킹은 Windows에서 작동해야 합니다.
- HID와 네트워크는 동시에 작동해야 합니다.
많은 게시물을 살펴봤지만 모든 작동 방식을 설명하는 Linux 가젯 관련 문서를 찾을 수 없습니다.
내가 발견하고 실제로 Linux에서 작동하는 것은이 솔루션USB Armory 프로젝트에서. 이 솔루션은 네트워크에 ECM 모드를 사용합니다. Windows가 어떻게든 장치를 인식하지만 올바른 드라이버를 얻을 수 없습니다. 내가 찾을 수 있는 유일한 드라이버는 구매가 필요하고 매우 비쌌습니다. ~에 따르면이 게시물하나의 구성만 사용하면 제대로 작동합니다.
따라서 제가 아는 한 가능한 해결책은 두 가지입니다.
- Windows에서 ECM 모드에 맞는 드라이버를 설치하고 사용하도록 허용
- HID와 함께 작동하도록 RNDIS 모드 가져오기도 활성화됨
나는 두 가지 솔루션을 모두 작동시키려고 노력했습니다. RNDIS가 있는 단일 네트워크가 작동하고(아래 코드 참조) 단일 HID도 작동합니다.
#!/bin/bash -e
modprobe libcomposite
cd /sys/kernel/config/usb_gadget/
mkdir g && cd g
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 0x0100 > bcdDevice # v1.0.0
echo 0x0200 > bcdUSB # USB 2.0
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
mkdir -p strings/0x409
echo "affeaffe" > strings/0x409/serialnumber
echo "myself" > strings/0x409/manufacturer
echo "myproduct" > strings/0x409/product
mkdir -p functions/rndis.usb0 # network
mkdir -p configs/c.1
echo 250 > configs/c.1/MaxPower
ln -s functions/rndis.usb0 configs/c.1/
echo 1 > os_desc/use
echo 0xcd > os_desc/b_vendor_code
echo MSFT100 > os_desc/qw_sign
echo RNDIS > functions/rndis.usb0/os_desc/interface.rndis/compatible_id
echo 5162001 > functions/rndis.usb0/os_desc/interface.rndis/sub_compatible_id
ln -s configs/c.1 os_desc
udevadm settle -t 5 || :
ls /sys/class/udc/ > UDC
ip link set usb0 up