This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] J784S4XEVM:UVC 小工具、无法找到可用的 UDC 或 IT's 忙

Guru**** 1558020 points
Other Parts Discussed in Thread: J784S4XEVM
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1358417/j784s4xevm-uvc-gadget-couldn-t-find-an-available-udc-or-it-s-busy

器件型号:J784S4XEVM

与这个较早的线程相关、我也在尝试让 uvc-gadget 正常工作、这次是在 J784S4XEVM 上。 下面列出了我的脚本。

#! /bin/sh

GADGET_DIR="/sys/kernel/config/usb_gadget"
GADGET_NAME="uvc_gadget"
LANGUAGE=0x409
VENDOR_ID=0x1d6b #Linux Foundation
PRODUCT_ID=0x0104 #Multifunction composite gadget
SERIAL="0123456789"
MANUFACTURER="Acme"
PRODUCT="Testing123"
CONFIGNAME="c"
CONFIGNUM=1
CONFIGURATION="UVC"
MAXPOWER=500
FUNCTION="uvc"
FUNCTION_ID="usb0"
MAX_SPEED="high-speed"

create_frame() {
        # Example usage:
        # create_frame <width> <height> <group> <format name>

        WIDTH=$1
        HEIGHT=$2
        FORMAT=$3
        NAME=$4

        wdir=$GADGET_DIR/$GADGET_NAME/functions/$FUNCTION.$FUNCTION_ID/streaming/$FORMAT/$NAME/${HEIGHT}p

        mkdir -p $wdir
        echo $WIDTH > $wdir/wWidth
        echo $HEIGHT > $wdir/wHeight
        echo $(( $WIDTH * $HEIGHT * 2 )) > $wdir/dwMaxVideoFrameBufferSize
        cat <<EOF > $wdir/dwFrameInterval
666666
100000
5000000
EOF
}


modprobe libcomposite

mkdir $GADGET_DIR/$GADGET_NAME
cd $GADGET_DIR/$GADGET_NAME

echo $VENDOR_ID > idVendor
echo $PRODUCT_ID > idProduct
echo $MAX_SPEED > max_speed

mkdir strings/$LANGUAGE
echo $MANUFACTURER > strings/$LANGUAGE/manufacturer
echo $SERIAL > strings/$LANGUAGE/serialnumber
echo $PRODUCT > strings/$LANGUAGE/product

mkdir configs/$CONFIGNAME.$CONFIGNUM
mkdir configs/$CONFIGNAME.$CONFIGNUM/strings/$LANGUAGE

echo $MAXPOWER > configs/$CONFIGNAME.$CONFIGNUM/MaxPower
echo $CONFIGURATION > configs/$CONFIGNAME.$CONFIGNUM/strings/$LANGUAGE/configuration

mkdir $GADGET_DIR/$GADGET_NAME/functions/uvc.usb0
mkdir $GADGET_DIR/$GADGET_NAME/functions/acm.usb0

mkdir functions/uvc.usb0/control/header/h
ln -s functions/uvc.usb0/control/header/h functions/uvc.usb0/control/class/fs/h

create_frame 1280 720 mjpeg mjpeg
create_frame 1920 1080 mjpeg mjpeg

mkdir functions/uvc.usb0/streaming/header/h

cd $GADGET_DIR/$GADGET_NAME/functions/uvc.usb0/streaming/header/h
ln -s ../../mjpeg/mjpeg

cd ../../class/fs
ln -s ../../header/h

cd ../../class/hs
ln -s ../../header/h

cd $GADGET_DIR/$GADGET_NAME
ln -s functions/uvc.usb0 configs/c.1
ln -s functions/acm.usb0 configs/c.1


ls /sys/class/udc  > $GADGET_DIR/$GADGET_NAME/UDC

当我尝试在 configfs 中将 UDC 器件链接到 uvc_gadget 时、我遇到以下错误:

[   53.427774] udc 6000000.usb: binding gadget driver [uvc_gadget]
[   53.433747] configfs-gadget.uvc_gadget gadget.0: adding 'uvc'/000000003ec1e969 to config 'c'/00000000dbcd99c2
[   53.443652] configfs-gadget.uvc_gadget gadget.0: uvc: uvc_function_bind()
[   53.450441] configfs-gadget.uvc_gadget gadget.0: adding 'uvc'/000000003ec1e969 --> -19
[   53.458351] udc 6000000.usb: failed to start uvc_gadget: -19
[   53.464051] UDC core: uvc_gadget: couldn't find an available UDC or it's busy
ls: write error: Device or resource busy

我将使用 SDK 09.01、此时 USB 驱动程序是否完全支持 UDC?

谢谢。

西蒙

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Simon  

    您在这里的最终目标是什么您想从 USB 相机获得帧?

    此致
    迪瓦卡尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diwakar:

    我希望 EVM 板在连接到 PC 时显示为 USB 器件、并能够将连接到 EVM 的 CSI 摄像头中的视频共享到 PC。

    如需更多信息、我将 J784S4XEVM SW2.3 = 0、SW2.4 = 1、我认为应该将 USB-C 端口置为 DRD 模式。 是这样正确的。

    6000000.usb 出现在/sys/class/udc 中、但是当我尝试把它分配给 USB-gadget 时、它失败、错误代码为-19。

    非常感谢、

    西蒙

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是通过 USB-C - C 线缆将该板连接到我的 Linux 笔记本电脑后/sys/class/udc/6000000.udc 的内容。

    root@j784s4-evm:/sys/class/udc/6000000.usb# grep . *
    a_alt_hnp_support:0
    a_hnp_support:0
    b_hnp_enable:0
    current_speed:UNKNOWN
    is_a_peripheral:0
    is_otg:0
    is_selfpowered:0
    maximum_speed:super-speed
    grep: soft_connect: Permission denied
    grep: srp: Permission denied
    state:not attached
    uevent:USB_UDC_NAME=usb-ss-gadget

    我假设要作为器件正常工作、IS_A_PERIOD 应为1?

    西蒙

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Simon  

    您只是在电路板上运行脚本、没有其他内容?

    我假设您使用的是预编译映像。

    此致
    迪瓦卡尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我还尝试加载 g_webcam 模块、但得到了相同的结果:

    modprobe g_webcam
    [  106.609240] udc 6000000.usb: binding gadget driver [g_webcam]
    [  106.623989] g_webcam gadget.0: adding config #1 'Video'/000000001c36ca41
    [  106.630698] g_webcam gadget.0: added config 'Video'/1 --> -2
    [  106.636365] udc 6000000.usb: failed to start g_webcam: -2
    [  106.641758] g_webcam: probe of gadget.0 failed with error -2
    [  106.647450] UDC core: g_webcam: couldn't find an available UDC
    root@j784s4-evm:~#

    USB-C 端口在主机模式下工作。

    USB@6000000:dr_mode = OTG

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Simon、

    让我们  首先尝试加载简单的 USB 小工具驱动程序 g_serial、查看是否正常工作。

    使用 SDK 中的预编译映像

    按照 SDK 文档中的说明创建 SD 卡。 一旦 SD 卡准备好启动、然后在 Linux 中运行以下命令  
    调制探针 g_串行   并查看是否仍然出现错误。  

    此致
    迪瓦卡尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diwakar:

    我使用当前映像尝试了 g_serial、结果有效。 我可以在 Linux 笔记本电脑上的/dev/ttyACM0上接收文本、这些文本被发送到我开发板上的/dev/ttyGS0。

    此致!

    西蒙

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Simon  

    我使用8.6 SDK 进行了测试、没有遇到任何问题、 您能 用它进行测试吗、看看配置中是否有任何变化  

    test.sh 与您在上面分享的是相同的  

    与这个较早的线程相关、我也在尝试让 uvc-gadget 正常工作、这次是在 J784S4XEVM 上。 下面列出了我的脚本。

    [/报价]

    此致
    迪瓦卡尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diwakar:

    我对使用 SDK 8.6解决问题并不感兴趣、毕竟我们不会使用较旧的 SDK 构建我们的应用。 我有兴趣让它与最新的 SDK 协同工作。

    此致、

    西蒙

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、 Simon、

    我们建议在两个版本之间的配置中查看增量,我们需要一些时间来检查如何在最新的 SDK 上启用此功能。

    此致
    迪瓦卡尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diwakar:

    我尝试了针对 SDK 8.6的预编译 rootfs、g_webcam 可以正常工作、但我的测试脚本不能。

    此致!

    西蒙

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Simon  

    测试脚本出现了什么错误?

    此致
    迪瓦卡尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Diwakar:

    我修改了我的脚本、现在 uvc 函数将加载 SDK 9.2、更新后的脚本如下:

    #! /bin/sh
    
    GADGET_DIR="/sys/kernel/config/usb_gadget"
    GADGET_NAME="uvc_gadget"
    LANGUAGE=0x409
    VENDOR_ID=0x1d6b #Linux Foundation
    PRODUCT_ID=0x0102 #Multifunction composite gadget
    DEVICE_CLASS=0xEF
    DEVICE_SUB_CLASS=0x02
    DEVICE_PROTOCOL=0x01
    SERIAL=""
    MANUFACTURER="Linux Foundation"
    PRODUCT="Webcam Gadget"
    CONFIGNAME="c"
    CONFIGNUM=1
    CONFIGURATION="UVC Gadget"
    MAXPOWER=0
    ATTRIBUTES=0xc0		##Self powered
    FUNCTION="uvc"
    FUNCTION_ID="usb0"
    MAX_SPEED="super-speed"
    MAX_PACKET=2048
    
    create_frame() {
            # Example usage:
            # create_frame <width> <height> <group> <format name>
    
            WIDTH=$1
            HEIGHT=$2
            FORMAT=$3
            NAME=$4
    
            wdir=$GADGET_DIR/$GADGET_NAME/functions/$FUNCTION.$FUNCTION_ID/streaming/$FORMAT/$NAME/${HEIGHT}p
    
            mkdir -p $wdir
            echo $WIDTH > $wdir/wWidth
            echo $HEIGHT > $wdir/wHeight
            echo $(( $WIDTH * $HEIGHT * 2 )) > $wdir/dwMaxVideoFrameBufferSize
            cat <<EOF > $wdir/dwFrameInterval
    666666
    100000
    5000000
    EOF
    }
    
    
    ##Begin script
    
    modprobe libcomposite
    
    ## Make top level directory
    mkdir $GADGET_DIR/$GADGET_NAME
    cd $GADGET_DIR/$GADGET_NAME
    
    ## Top level properties
    echo $VENDOR_ID > idVendor
    echo $PRODUCT_ID > idProduct
    echo $MAX_SPEED > max_speed
    echo $DEVICE_CLASS > bDeviceClass
    echo $DEVICE_SUB_CLASS > bDeviceSubClass
    echo $DEVICE_PROTOCOL > bDeviceProtocol
    
    ## Strings
    mkdir strings/$LANGUAGE
    echo $MANUFACTURER > strings/$LANGUAGE/manufacturer
    echo $SERIAL > strings/$LANGUAGE/serialnumber
    echo $PRODUCT > strings/$LANGUAGE/product
    
    ## Make config dir
    mkdir configs/$CONFIGNAME.$CONFIGNUM
    mkdir configs/$CONFIGNAME.$CONFIGNUM/strings/$LANGUAGE
    
    ## Config parameters
    echo $MAXPOWER > configs/$CONFIGNAME.$CONFIGNUM/MaxPower
    echo $ATTRIBUTES > configs/$CONFIGNAME.$CONFIGNUM/bmAttributes
    echo $CONFIGURATION > configs/$CONFIGNAME.$CONFIGNUM/strings/$LANGUAGE/configuration
    
    ##Make function dir
    mkdir $GADGET_DIR/$GADGET_NAME/functions/$FUNCTION.$FUNCTION_ID
    mkdir -p $GADGET_DIR/$GADGET_NAME/functions/$FUNCTION.$FUNCTION_ID/control/header/h
    cd $GADGET_DIR/$GADGET_NAME/functions/$FUNCTION.$FUNCTION_ID/control
    echo $MAX_PACKET > $GADGET_DIR/$GADGET_NAME/functions/$FUNCTION.$FUNCTION_ID/streaming_maxpacket
    
    ln -s header/h class/fs
    ln -s header/h class/ss
    
    #create_frame 1280 720 mjpeg mjpeg
    #create_frame 1920 1080 mjpeg mjpeg
    create_frame 2560 1440 mjpeg mjpeg
    #create_frame 1280 720 uncompressed u
    #create_frame 1920 1080 uncompressed u
    create_frame 2560 1440 uncompressed u
    
    mkdir $GADGET_DIR/$GADGET_NAME/functions/$FUNCTION.$FUNCTION_ID/streaming/header/h
    cd $GADGET_DIR/$GADGET_NAME/functions/$FUNCTION.$FUNCTION_ID/streaming/header/h
    
    ln -s ../../uncompressed/u
    ln -s ../../mjpeg/mjpeg
    
    cd ../../class/fs
    ln -s ../../header/h
    
    cd ../../class/hs
    ln -s ../../header/h
    
    cd ../../class/ss
    ln -s ../../header/h
    
    cd $GADGET_DIR/$GADGET_NAME
    ln -s functions/uvc.usb0 configs/c.1
    
    udevadm settle -t 5 || :
    
    ##Start the gadget
    echo "Starting gadget"
    ls /sys/class/udc  > UDC

    我没有任何视频输出到目前为止,但 uvc 小工具问题似乎解决了。

    非常感谢您的支持、

    西蒙