硬件:T113开发板;
目标:想要在otg-usb口上模拟出uvc 摄像头设备;
测试:
-
1,系统默认otg-usb是ADB devce,在内核和tina linux上关闭了adb相关,otg-usb给Gadget uvc;
-
2,参考如下官方资料
#!/bin/sh
mount -t configfs none /sys/kernel/config
mkdir /sys/kernel/config/usb_gadget/g1
echo "0x1f3a" > /sys/kernel/config/usb_gadget/g1/idVendor
echo "0x100d" > /sys/kernel/config/usb_gadget/g1/idProduct
#添加设备字符串
mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409
echo "Tina" > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer
echo "UVC Cam" > /sys/kernel/config/usb_gadget/g1/strings/0x409/product
echo "0123456789" > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
#添加 UVC function(最小化配置)
mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0
#添加最简单的一组 MJPEG 配置(测试用)
mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p
echo 1280 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wWidth
echo 720 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/wHeight
echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwFrameInterval
echo 333333 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwDefaultFrameInterval
echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMinBitRate
echo 442368000 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxBitRate
echo 1843200 > /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/720p/dwMaxVideoFrameBufferSize
mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h
ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/m/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/
ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/class/fs
ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/class/hs
mkdir /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h
ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/class/fs/
ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/ /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/class/ss/
mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1
echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes
echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower
echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes
echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower
mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409
echo "UVC Config" > /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409/configuration
ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/
ls /sys/class/udc/ | xargs echo > /sys/kernel/config/usb_gadget/g1/UDC
- 4,在T113开发板上执行如上脚本,没有任何报错,但是pc上看不到设备枚举动作;
root@TinaLinux:/opt# ./uvc.sh
[INFO] Mounting configfs...
[INFO] Creating gadget...
[INFO] Setting device descriptors...
[INFO] Creating UVC function...
[INFO] Setting MJPEG 720p...
[INFO] Creating headers...
[INFO] Linking UVC function to configuration...
[INFO] Enabling gadget...
[ 53.291067] configfs-gadget gadget: uvc: uvc_function_bind()
[OK] UVC gadget created and enabled successfully!
敬请指点。
另外,参考小机做HID的例子,可以成功的枚举出hid keyboard 设备;用类似的方法做uvc却不行,为什么?
有参考过如下帖子,没有找到答案....,先谢过,折腾了好久没有解决,期待指点迷津....
链接文本