与这个较早的线程相关、我也在尝试让 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?
谢谢。
西蒙