linux通过configfs方式开启uvc、uac、adb等功能

linux通过configfs方式开启uvc、uac、adb等功能

IamGroot2023

已于 2023-03-22 13:02:02 修改

阅读量3.1k

收藏 20

点赞数 3

文章标签: adb linux android

Powered by 金山文档

版权

setusbconfig uvc:开启uvc功能。

切换到usb device模式:

cat /sys/devices/platform/soc/usbc0/usb_device

#!/bin/sh

name=`basename $0`

usage() {

echo "$name Usage:"

echo ""

echo "$name [function]"

echo "function: mtp, support MTP function"

echo " adb, support adb function"

echo " uvc, support uvc function"

echo " uvc,uac1 support uvc and uac1 function"

echo "example:"

echo "$name uvc"

echo ""

}

enable_hid() {

#keyboard

mkdir -p /sys/kernel/config/usb_gadget/g1/functions/hid.usb0

echo 2 > /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/protocol

echo 1 > /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/subclass

echo 3 > /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_length

'05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 03 05 01 09 30 09 31 15 81 25 7f 75 08 95 02 81 06 c0 c0'

cat ./report_desc.bin > /sys/kernel/config/usb_gadget/g1/functions/hid.usb0/report_desc

ln -s /sys/kernel/config/usb_gadget/g1/functions/hid.usb0 /sys/kernel/config/usb_gadget/g1/configs/c.1/hid.usb0

}

enable_adb() {

-d /sys/kernel/config/usb_gadget/g1/functions/ffs.adb \] \|\| { mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb } echo "Tina ADB" \> /sys/kernel/config/usb_gadget/g1/strings/0x409/product ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb \[ -d /dev/usb-ffs/adb \] \|\| { mkdir -p /dev/usb-ffs mkdir /dev/usb-ffs/adb mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/ } } enable_mtp() { mtp_name=mtp.gs0 mtp_ffs=false kv=\`uname -r\` kv=${kv:0:1} if \[ "x$kv" = "x5" \]; then mtp_ffs=true mtp_name=ffs.mtp fi \[ -d /sys/kernel/config/usb_gadget/g1/functions/$mtp_name \] \|\| { mkdir /sys/kernel/config/usb_gadget/g1/functions/$mtp_name } if \[ "x$mtp_ffs" = "xtrue" \]; then \[ -d /dev/usb-ffs/mtp \] \|\| { mkdir -p /dev/usb-ffs mkdir /dev/usb-ffs/mtp mount -o rmode=0770,fmode=0660,uid=1024,gid=1024,no_disconnect=1 -t functionfs mtp /dev/usb-ffs/mtp/ } fi echo "Tina MTP" \> /sys/kernel/config/usb_gadget/g1/strings/0x409/product echo 1 \> /sys/kernel/config/usb_gadget/g1/os_desc/use ln -s /sys/kernel/config/usb_gadget/g1/functions/$mtp_name/ /sys/kernel/config/usb_gadget/g1/configs/c.1/$mtp_name if \[ "x$mtp_ffs" = "xtrue" \]; then MtpTools -f connect sleep .500 fi } uvc_create_format_frame() { format=$1 name=$2 width=$3 height=$4 fps=$5 frame_index=$6 dir=/sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/$format/$name/${height}p mkdir -p $dir echo $width \> $dir/wWidth echo $height \> $dir/wHeight echo $(($width \* $height \* 2 )) \> $dir/dwMaxVideoFrameBufferSize #30fps 333333 interval=$((10000000/$fps)) echo $interval \> $dir/dwFrameInterval echo $interval \> $dir/dwDefaultFrameInterval echo $(($width \* $height \* 2 \* $fps \* 8)) \> $dir/dwMinBitRate echo $(($width \* $height \* 2 \* $fps \* 8)) \> $dir/dwMaxBitRate echo $frame_index \> $dir/bFrameIndex } enable_uvc() { mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0 if \[ -f "/tmp/set_uvc_function.sh" \]; then echo "/tmp/set_uvc_function.sh exist!!!" chmod a+x /tmp/set_uvc_function.sh /tmp/set_uvc_function.sh return fi cd /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0 uvc_create_format_frame mjpeg m 1920 1080 30 1 uvc_create_format_frame mjpeg m 1280 720 30 2 uvc_create_format_frame mjpeg m 640 480 30 3 uvc_create_format_frame mjpeg m 640 360 30 4 uvc_create_format_frame uncompressed u 1280 720 10 1 uvc_create_format_frame uncompressed u 640 480 30 2 uvc_create_format_frame uncompressed u 640 360 30 3 uvc_create_format_frame h264 h 1920 1080 30 1 uvc_create_format_frame h264 h 1280 720 30 2 uvc_create_format_frame h264 h 640 480 30 3 uvc_create_format_frame h264 h 640 360 30 4 uvc_create_format_frame nv12 n 1280 720 10 1 uvc_create_format_frame nv12 n 640 480 30 2 uvc_create_format_frame nv12 n 640 360 30 3 mkdir -p streaming/header/h ln -s streaming/mjpeg/m/ streaming/header/h/ ln -s streaming/uncompressed/u/ streaming/header/h/ ln -s streaming/h264/h/ streaming/header/h/ ln -s streaming/nv12/n/ streaming/header/h/ ln -s streaming/header/h/ streaming/class/fs ln -s streaming/header/h/ streaming/class/hs mkdir -p control/header/h ln -s control/header/h/ control/class/fs/ ln -s control/header/h/ control/class/ss/ #echo 3072 \> streaming_maxpacket ln -s /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ } enable_uac1() { mkdir -p /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0 if \[ -f "/tmp/set_uac_function.sh" \]; then echo "/tmp/set_uac_function.sh exist!!!" chmod a+x /tmp/set_uac_function.sh /tmp/set_uac_function.sh return fi uac_func="both" if \[ $# -lt 1 \];then uac_func="both" else uac_func=$1 fi if \[ "$uac_func" == "mic" \];then echo 0x1 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_chmask echo 0x0 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_chmask echo 16000 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_srate echo 0 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_srate echo 2 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_ssize echo 0 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_ssize fi if \[ "$uac_func" == "spk" \];then echo 0x0 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_chmask echo 0x1 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_chmask echo 0 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_srate echo 16000 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_srate echo 0 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_ssize echo 2 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_ssize fi if \[ "$uac_func" == "both" \];then echo 0x1 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_chmask echo 0x1 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_chmask echo 16000 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_srate echo 16000 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_srate echo 2 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/c_ssize echo 2 \> /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/p_ssize fi echo "Tina UAC1" \> /sys/kernel/config/usb_gadget/g1/strings/0x409/product ln -s /sys/kernel/config/usb_gadget/g1/functions/uac1.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/uac1.usb0 } udc_controller=\`ls /sys/class/udc\` set_usb_function() { # 1:function # 2:idVendor # 3:idProduct # \[ -e /sys/kernel/config/usb_gadget/g1/UDC \] \&\& echo "none" \> /sys/kernel/config/usb_gadget/g1/UDC;sleep 1 \[ -d /sys/kernel/config/usb_gadget \] \|\| { mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/usb_gadget/g1 mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409 echo "Allwinner Technology Inc." \> /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer echo "Tina" \> /sys/kernel/config/usb_gadget/g1/strings/0x409/product } \[ -d /sys/kernel/config/usb_gadget/g1/configs/c.1 \] \|\| { 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 mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409 } rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.mtp rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/mtp.gs0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/f1 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/rndis.usb0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/uac1.usb0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/accessory.usb0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/hid.usb0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/hid.usb1 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/loopback.usb0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/gser.usb0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/printer.usb0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/uvc.usb0 rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/mass_storage.usb0 rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/header/h/ rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/class/fs rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/class/hs rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/class/fs/ rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/class/ss/ rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/ rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/mjpeg/ rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/uncompressed/ rm -rf /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/streaming/nv12/ echo $2 \> /sys/kernel/config/usb_gadget/g1/idVendor echo $3 \> /sys/kernel/config/usb_gadget/g1/idProduct if \[ $1 == "none" \]; then return elif \[ $1 == "mtp" \]; then enable_mtp elif \[ $1 == "adb" \]; then enable_adb elif \[ $1 == "mass_storage" \]; then \[ -d /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 \] \|\| { mkdir /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0 echo Tina \> /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/inquiry_string } ln -s /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/ /sys/kernel/config/usb_gadget/g1/configs/c.1/f1 echo "/dev/by-name/UDISK" \> /sys/kernel/config/usb_gadget/g1/functions/mass_storage.usb0/lun.0/file elif \[ $1 == "uac1" \]; then echo 0xef \> /sys/kernel/config/usb_gadget/g1/bDeviceClass echo 0x02 \> /sys/kernel/config/usb_gadget/g1/bDeviceSubClass echo 0x01 \> /sys/kernel/config/usb_gadget/g1/bDeviceProtocol echo "Tina UAC" \> /sys/kernel/config/usb_gadget/g1/strings/0x409/product #echo 0x013A \> /sys/kernel/config/usb_gadget/g1/idProduct #enable_uac1 mic #echo 0x014A \> /sys/kernel/config/usb_gadget/g1/idProduct #enable_uac1 spk #echo 0x012A \> /sys/kernel/config/usb_gadget/g1/idProduct enable_uac1 both elif \[ $1 == "uvc" \]; then \[ "$4" == "bulk" \] \&\& { echo Y \> /sys/module/usb_f_uvc/parameters/bulk_streaming_ep } echo 0xef \> /sys/kernel/config/usb_gadget/g1/bDeviceClass echo 0x02 \> /sys/kernel/config/usb_gadget/g1/bDeviceSubClass echo 0x01 \> /sys/kernel/config/usb_gadget/g1/bDeviceProtocol echo "Tina UVC" \> /sys/kernel/config/usb_gadget/g1/strings/0x409/product #echo 0x150 \> /sys/kernel/config/usb_gadget/g1/functions/uvc.usb0/control/header/h/bcdUVC enable_uvc elif \[ $1 == "uvc,uac1" \]; then echo N \> /sys/module/usb_f_uvc/parameters/bulk_streaming_ep echo 0xef \> /sys/kernel/config/usb_gadget/g1/bDeviceClass echo 0x02 \> /sys/kernel/config/usb_gadget/g1/bDeviceSubClass echo 0x01 \> /sys/kernel/config/usb_gadget/g1/bDeviceProtocol echo "Tina UVC-UAC" \> /sys/kernel/config/usb_gadget/g1/strings/0x409/product enable_uvc #echo 0x003A \> /sys/kernel/config/usb_gadget/g1/idProduct #enable_uac1 mic #echo 0x004A \> /sys/kernel/config/usb_gadget/g1/idProduct #enable_uac1 spk #echo 0x002A \> /sys/kernel/config/usb_gadget/g1/idProduct enable_uac1 both fi echo $udc_controller \> /sys/kernel/config/usb_gadget/g1/UDC } if \[ $# -lt 1 \]; then echo "Lack of arg!" usage exit fi # idVendor, idProduct only for test if \[ $1 == "none" \]; then set_usb_function none 0x1f3a 0x1001 return fi if \[ $1 == "adb" \]; then set_usb_function adb 0x18d1 0xD002 return fi if \[ $1 == "mtp" \]; then set_usb_function mtp 0x045E 0x00C9 return fi if \[ $1 == "uac1" \]; then if \[ $# == 3 \]; then set_usb_function uac1 $2 $3 else set_usb_function uac1 0x1d61 0x0101 fi return fi if \[ $1 == "mass_storage" \]; then set_usb_function mass_storage 0x1f3a 0x1000 return fi if \[ $1 == "uvc" \]; then if \[ "$2" == "bulk" \]; then set_usb_function uvc 0x09a1 0x0026 bulk else set_usb_function uvc 0x09a1 0x0026 fi return fi if \[ $1 == "uac1,uvc" -o $1 == "uvc,uac1" \]; then #set_usb_function uvc,uac1 0x1943 0x2263 #set_usb_function uvc,uac1 0x09a1 0x0026 if \[ $# == 3 \]; then set_usb_function uvc,uac1 $2 $3 else set_usb_function uvc,uac1 0x09a1 0x002A fi return fi ------------------------------------------------ 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.csdn.net/u013905694/article/details/129707112

相关推荐
运维行者_3 分钟前
稳健型微服务性能监控的基本指标
运维·服务器·网络·数据库·系统架构·自动化·存储
fen_fen2 小时前
用户信息表建表及批量插入 100 条数据(MySQL/Oracle)
数据库·mysql·oracle
马克Markorg8 小时前
常见的向量数据库和具有向量数据库能力的数据库
数据库
Coder_Boy_10 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy11 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
数据知道12 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_124987075312 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha12 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_12 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Gain_chance13 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习