我正在尝试在设备模式下为单个usb设备控制器端口添加uvc和大容量存储。我正在使用configfs来完成任务。
有人能告诉我怎么做吗。
当做,
吉拉达尔

最佳答案

你在做一个既能做相机又能做拇指驱动的设备?也许是一个你可以上传视频然后在Skype上播放的加密狗?不管怎样,这对configfs来说都是一个很好的练习。
在较高层次上,步骤是:
让大容量存储自行工作。
让UVC自己工作(将图像流到主机)。
将两者合并成一个脚本。
过早地跳到步骤3会使诊断问题变得更加困难。例如,如果用户空间uvc gadget程序有可能阻止两个gadget枚举的问题。
作为根用户,您可以运行以下脚本,该脚本已验证为使用Raspbian 9枚举并流式处理Raspberry Pi Zero 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
############################################################

(作为参考,这里是带补丁的myuvc-gadget repo。)
简单地指向/dev/mmcblk0p1处的引导分区是测试Pi的SD卡的大容量存储的一种快速而肮脏的方法。运行sudo fdisk -l以查找可以在特定系统上使用的内容。
由于Pi Zero是一个USB 2.0设备,我不需要包括任何class/ss(超速)。我还故意省略了MaxPower、serialnumber和manufacturer等字段,您可以在其他示例中找到这些字段。此脚本旨在显示启动和运行所需的最低要求。
你已经在其他渠道发帖询问了从NXP到t I的平台,我无法预测会出现什么问题。不过,我看到有人建议尝试内核版本4.11-rc3中引入的与UVC相关的修复。鉴于Raspbian目前在版本4.9中,也许这些更改是不必要的。

关于linux - USB:小工具:设备模式:configfs:uvc和大容量存储是否在单个配置上?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42895950/

10-12 17:24