modprobe g_serial
composite
/ 메소드를 통해 내 프로젝트에 가젯 직렬 인터페이스를 추가 하려고 합니다 configfs
.
MacOS 또는 Linux 호스트와 통신할 때 완벽하게 작동하는 작은 스크립트(아래 표시)가 있습니다. Windows 호스트와 통신할 때도 작동하지만 이름만 항상 잘못됩니다.
Windows 호스트에 연결되면 내 가젯은 항상 장치 관리자에 다음과 같이 나타납니다."USB 직렬 장치(COM)"올바른 제품 이름을 표시하는 대신. Windows는 또한 장치 제조업체를 다음과 같이 나열합니다.마이크로소프트, 내가 무엇을 설정하든 상관 없습니다 strings/0x409/manufacturer
. 그리고 기기의 일련번호는 어디에도 없습니다.
이 동작을 어떻게 바꿀 수 있나요? Windows에서 , 및 필드를 올바르게 /sys/kernel/config/usb_gadget/usb_gadget/g1/os_desc
선택 하도록 마법을 사용할 수 있습니까 ? 아니면 Windows에서 일종의 .inf 마법을 수행해야 합니까?manufacturer
product
serialnumber
g_serial
처음에는 다음 명령을 사용해 보았습니다 .
modprobe g_serial \
idVendor="0x4075" \
idProduct="0x0001" \
iSerialNumber="0123456789" \
iManufacturer="Magic Manufacturing" \
iProduct="Gizmomatic Machine"
이름을 올바르게 표시할 수 없을 때 configfs/gadget-serial 방법을 시도했습니다.
#!/bin/bash
set -euo pipefail
mkdir /sys/kernel/config/usb_gadget/g1
cd /sys/kernel/config/usb_gadget/g1
echo 0xEF > bDeviceClass
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
echo "0x4075" > idVendor
echo "0x0001" > idProduct
mkdir strings/0x409
echo "0123456789" > strings/0x409/serialnumber
echo "Magic Manufacturing" > strings/0x409/manufacturer
echo "Gizmomatic Machine" > strings/0x409/product
mkdir configs/c.1
mkdir configs/c.1/strings/0x409
echo "acm" > configs/c.1/strings/0x409/configuration
mkdir functions/acm.usb0
ln -s functions/acm.usb0 configs/c.1
echo "ci_hdrc.0" > UDC
두 변종 모두 Windows에서 유효한 COM 포트를 생성한다는 점에서 "작동"합니다. 그러나 정확한 일련번호, 제조업체 또는 제품 이름을 보고한 사람은 아무도 없었습니다. 누군가 여기에 지혜가 있다면 그것은 나에게 큰 도움이 될 것입니다. 중요한 경우 4.19.35 커널을 사용하고 있습니다.