【问题标题】:USB : gadget : device mode : configfs: uvc and mass storage on single configuration?USB:小工具:设备模式:configfs:uvc和单一配置的大容量存储?
【发布时间】:2017-03-20 04:40:28
【问题描述】:

我正在尝试在设备模式下为单个 USB 设备控制器端口添加 uvc 和大容量存储。我正在使用 configfs 来完成工作。

谁能告诉我怎么做。

问候, GBiradar

【问题讨论】:

    标签: linux linux-kernel embedded-linux uvc


    【解决方案1】:

    您正在制造一种既可用作相机又可用作拇指驱动器的设备?也许是一个加密狗,您可以在其中上传视频然后在 Skype 中播放它们?无论哪种方式,这听起来都是 configfs 的一个很好的练习。

    概括地说,步骤是:

    1. 让大容量存储自行工作。
    2. 让 UVC 自行工作(将图像流式传输到主机)。
    3. 将两者组合成一个脚本。

    过早跳到第 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 版,也许这些更改不是必需的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-10
      • 2018-08-14
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多