【发布时间】:2017-03-20 04:40:28
【问题描述】:
我正在尝试在设备模式下为单个 USB 设备控制器端口添加 uvc 和大容量存储。我正在使用 configfs 来完成工作。
谁能告诉我怎么做。
问候, GBiradar
【问题讨论】:
标签: linux linux-kernel embedded-linux uvc
我正在尝试在设备模式下为单个 USB 设备控制器端口添加 uvc 和大容量存储。我正在使用 configfs 来完成工作。
谁能告诉我怎么做。
问候, GBiradar
【问题讨论】:
标签: linux linux-kernel embedded-linux uvc
您正在制造一种既可用作相机又可用作拇指驱动器的设备?也许是一个加密狗,您可以在其中上传视频然后在 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 repo 补丁。)
简单地指向位于/dev/mmcblk0p1 的引导分区是测试 Pi 的 SD 卡上的大容量存储的一种快速而简单的方法。运行 sudo fdisk -l 以查找可以在特定系统上使用的内容。
由于 Pi Zero 是 USB 2.0 设备,我不需要包含任何 class/ss(超高速)。我还故意省略了您可能在其他示例中找到的字段,例如 MaxPower、序列号和制造商。该脚本旨在显示启动和运行所需的最低要求。
您在其他频道上发帖询问从 NXP 到 TI 的平台上的这个问题,我无法预测那里可能会出现什么问题。但是,我看到建议尝试内核版本 4.11-rc3 中引入的与 UVC 相关的修复。鉴于 Raspbian 目前是 4.9 版,也许这些更改不是必需的。
【讨论】: