我正在尝试在设备模式下为单个 USB 设备控制器端口添加 uvc 和大容量存储。我正在使用 configfs 来完成工作。
任何人都可以告诉如何做到这一点。
问候, GBiradar
我正在尝试在设备模式下为单个 USB 设备控制器端口添加 uvc 和大容量存储。我正在使用 configfs 来完成工作。
任何人都可以告诉如何做到这一点。
问候, GBiradar
您正在制造一种既可用作相机又可用作拇指驱动器的设备?也许是一个加密狗,您可以在其中上传视频然后在 Skype 中播放它们?无论哪种方式,这听起来都是 configfs 的一个很好的练习。
概括地说,这些步骤是:
过早跳到第 3 步会使诊断问题变得更加困难。例如,如果用户空间 uvc-gadget 程序存在可能阻止两个小工具枚举的问题。
以 root 身份,您可以运行以下经过验证的脚本,以使用 Raspbian 9 在 Raspberry Pi 零 W 上进行枚举和流式传输。对于第 1 步,您可以删除特定于 UVC 的部分,然后在第 2 步中同样使用大容量存储线。
#!/bin/bash -xe
modprobe libcomposite
cd /sys/kernel/config/usb_gadget/
mkdir -p stackoverflow
cd stackoverflow
echo 0x1d6b > idVendor # Linux Foundation
echo 0x0104 > idProduct # Multifunction Composite Gadget
echo 239 > bDeviceClass # USB_CLASS_MISC
echo 0x02 > bDeviceSubClass
echo 0x01 > bDeviceProtocol
mkdir -p strings/0x409
mkdir -p configs/c.1/strings/0x409
echo "My Composite Gadget" > strings/0x409/product
###################### mass storage ########################
mkdir -p functions/mass_storage.usb0
echo /dev/mmcblk0p1 > functions/mass_storage.usb0/lun.0/file
ln -s functions/mass_storage.usb0 configs/c.1/
############################################################
########################## UVC #############################
mkdir -p functions/uvc.usb1/control/header/h
cd functions/uvc.usb1/control/
ln -s header/h class/fs
cd ../../../
mkdir -p functions/uvc.usb1/streaming/uncompressed/u/360p
cat <<EOF > functions/uvc.usb1/streaming/uncompressed/u/360p/dwFrameInterval
666666
1000000
5000000
EOF
mkdir functions/uvc.usb1/streaming/header/h
cd functions/uvc.usb1/streaming/header/h
ln -s ../../uncompressed/u
cd ../../class/fs
ln -s ../../header/h
cd ../../class/hs
ln -s ../../header/h
cd ../../../../..
ln -s functions/uvc.usb1 configs/c.1/
############################################################
ls /sys/class/udc > UDC
######################## UVC part 2 ########################
sleep 1 # workaround: if gadget activated too soon, may hit a dmesg error with usb_function_activate [libcomposite]
./uvc-gadget -d
############################################################
(作为参考,这是我的带有补丁的uvc-gadget 存储库。)
简单地指向引导分区/dev/mmcblk0p1
是测试 Pi 的 SD 卡上的大容量存储的一种快速而肮脏的方法。运行sudo fdisk -l
以查找可以在特定系统上使用的内容。
由于 Pi Zero 是 USB 2.0 设备,因此我不需要包含任何设备class/ss
(超高速)。我还故意省略了您可能在其他示例中找到的字段,例如 MaxPower、序列号和制造商。此脚本旨在显示启动和运行的最低要求。
您已经在其他频道上发帖询问从 NXP 到 TI 的平台上的这个问题,我无法预测那里可能会出现什么问题。但是,我看到建议尝试内核版本 4.11-rc3 中引入的与 UVC 相关的修复。鉴于 Raspbian 目前在 4.9 版上,也许这些更改不是必需的。