mirror of
https://gitee.com/bianbu-linux/usb-gadget
synced 2025-06-28 11:05:52 -04:00
Update for v2.1
This commit is contained in:
parent
1ac1c1bcf0
commit
b6a183ba87
2 changed files with 125 additions and 1 deletions
24
README.md
24
README.md
|
@ -48,6 +48,14 @@ $ uvc-gadget-new
|
||||||
gadget-setup.sh rndis
|
gadget-setup.sh rndis
|
||||||
```
|
```
|
||||||
|
|
||||||
|
另外最新脚本增加快捷运行 dhcp 服务器功能,依赖 busybox udhcpd,只需要执行
|
||||||
|
|
||||||
|
```
|
||||||
|
gadget-setup.sh dhcp
|
||||||
|
```
|
||||||
|
|
||||||
|
就会自动为网卡配置ip地址,并且支持给PC通过DHCP协议分配IP地址,具体请查看脚本实现。
|
||||||
|
|
||||||
### PC端设置
|
### PC端设置
|
||||||
|
|
||||||
目前最新版脚本已经支持Linux、Windows10下自动识别RNDIS设备驱动,无需手动安装。
|
目前最新版脚本已经支持Linux、Windows10下自动识别RNDIS设备驱动,无需手动安装。
|
||||||
|
@ -55,6 +63,22 @@ gadget-setup.sh rndis
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
## NCM
|
||||||
|
|
||||||
|
不同于RNDIS由微软维护,NCM是USB-IF维护网络协议,主流操作系统(Linux,Windows 11,macOS等)具备支持。
|
||||||
|
注:目前Windows 10的ncm驱动实现和Linux 6.6中ncm gadget兼容性不是最佳,微软在Windows 11才进行修复。
|
||||||
|
```
|
||||||
|
gadget-setup.sh ncm
|
||||||
|
```
|
||||||
|
|
||||||
|
另外最新脚本增加快捷运行 dhcp 服务器功能,依赖 busybox udhcpd,只需要执行
|
||||||
|
|
||||||
|
```
|
||||||
|
gadget-setup.sh dhcp
|
||||||
|
```
|
||||||
|
|
||||||
|
就会自动为网卡配置ip地址,并且支持给PC通过DHCP协议分配IP地址,具体请查看脚本实现。
|
||||||
|
|
||||||
## ADB
|
## ADB
|
||||||
gadget-setup.sh 通用脚本集成了 ADB功能。
|
gadget-setup.sh 通用脚本集成了 ADB功能。
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
# In busybox ash, should use /bin/sh, but bianbu cannot use /bin/sh
|
# In busybox ash, should use /bin/sh, but bianbu cannot use /bin/sh
|
||||||
|
|
||||||
name=`basename $0`
|
name=`basename $0`
|
||||||
SCRIPT_VERSION="v0.5-SUPPORTROLESW"
|
SCRIPT_VERSION="v0.6-NCMDHCP"
|
||||||
CONFIG_FILE=$HOME/.usb_config
|
CONFIG_FILE=$HOME/.usb_config
|
||||||
|
|
||||||
# USB Descriptors
|
# USB Descriptors
|
||||||
|
@ -21,6 +21,10 @@ GFUNC_PATH=$GADGET_PATH/functions
|
||||||
GCONFIG=$GADGET_PATH/configs/c.1
|
GCONFIG=$GADGET_PATH/configs/c.1
|
||||||
[ "$USB_UDC" ] || USB_UDC=$(ls /sys/class/udc | awk "NR==1{print}")
|
[ "$USB_UDC" ] || USB_UDC=$(ls /sys/class/udc | awk "NR==1{print}")
|
||||||
|
|
||||||
|
# DHCP
|
||||||
|
MYNETMASK="255.255.255.0"
|
||||||
|
MYIP="192.168.36.101"
|
||||||
|
YOURIP="192.168.36.102"
|
||||||
# MSC Debug Ramdisk
|
# MSC Debug Ramdisk
|
||||||
RAMDISK_PATH=/var/sdcard
|
RAMDISK_PATH=/var/sdcard
|
||||||
TMPFS_FOUND=`mount | grep tmpfs | grep -v devtmpfs | awk '{print $3}' | grep '/dev/shm' | wc -l`
|
TMPFS_FOUND=`mount | grep tmpfs | grep -v devtmpfs | awk '{print $3}' | grep '/dev/shm' | wc -l`
|
||||||
|
@ -40,6 +44,7 @@ MSC_ARG=""
|
||||||
ADB=disabled
|
ADB=disabled
|
||||||
UVC=disabled
|
UVC=disabled
|
||||||
RNDIS=disabled
|
RNDIS=disabled
|
||||||
|
NCM=disabled
|
||||||
FUNCTION_CNT=0
|
FUNCTION_CNT=0
|
||||||
DEBUG=
|
DEBUG=
|
||||||
|
|
||||||
|
@ -66,6 +71,12 @@ usage()
|
||||||
echo -e "\tadb Android Debug Bridge over USB."
|
echo -e "\tadb Android Debug Bridge over USB."
|
||||||
echo -e "\tuvc Webcam."
|
echo -e "\tuvc Webcam."
|
||||||
echo -e "\trndis RNDIS NIC function."
|
echo -e "\trndis RNDIS NIC function."
|
||||||
|
echo -e "\tncm NCM NIC function."
|
||||||
|
echo ""
|
||||||
|
echo -e "\tdhcp config busybox.udhcpd for NIC"
|
||||||
|
echo -e "\t func on usb0, NIC func need"
|
||||||
|
echo -e "\t to be configured first!"
|
||||||
|
echo ""
|
||||||
echo -e "\nSpacemiT gadget-setup tool $SCRIPT_VERSION"
|
echo -e "\nSpacemiT gadget-setup tool $SCRIPT_VERSION"
|
||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
@ -475,6 +486,7 @@ rndis_link()
|
||||||
IFNAME=`cat $GFUNC_PATH/rndis.0/ifname`
|
IFNAME=`cat $GFUNC_PATH/rndis.0/ifname`
|
||||||
gadget_info "rndis function enabled, mac(h): $HOST_ADDR, mac(g): $DEV_ADDR, ifname: $IFNAME."
|
gadget_info "rndis function enabled, mac(h): $HOST_ADDR, mac(g): $DEV_ADDR, ifname: $IFNAME."
|
||||||
gadget_info "execute ifconfig $IFNAME up to enable rndis iface."
|
gadget_info "execute ifconfig $IFNAME up to enable rndis iface."
|
||||||
|
gadget_info "run $name dhcp to start dhcp server, assign IP to your PC(debug only)"
|
||||||
}
|
}
|
||||||
|
|
||||||
rndis_unlink()
|
rndis_unlink()
|
||||||
|
@ -489,6 +501,51 @@ rndis_clean()
|
||||||
g_remove $GFUNC_PATH/rndis.0
|
g_remove $GFUNC_PATH/rndis.0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
## NCM
|
||||||
|
|
||||||
|
ncm_config()
|
||||||
|
{
|
||||||
|
OVERRIDE_VENDOR_FOR_WINDOWS=$1
|
||||||
|
# create function instance
|
||||||
|
# functions/<f_function allowed>.<instance name>
|
||||||
|
# f_function allowed: ncm
|
||||||
|
mkdir -p $GFUNC_PATH/ncm.0
|
||||||
|
}
|
||||||
|
|
||||||
|
ncm_link()
|
||||||
|
{
|
||||||
|
echo 0xEF > $GADGET_PATH/bDeviceClass
|
||||||
|
echo 0x02 > $GADGET_PATH/bDeviceSubClass
|
||||||
|
echo 0x01 > $GADGET_PATH/bDeviceProtocol
|
||||||
|
echo 1 > $GADGET_PATH/os_desc/use
|
||||||
|
echo 0x1 > $GADGET_PATH/os_desc/b_vendor_code
|
||||||
|
echo "MSFT100" > $GADGET_PATH/os_desc/qw_sign
|
||||||
|
mkdir -p $GFUNC_PATH/ncm.0/os_desc/interface.ncm
|
||||||
|
echo WINNCM > $GFUNC_PATH/ncm.0/os_desc/interface.ncm/compatible_id
|
||||||
|
# echo 5162001 > $GFUNC_PATH/ncm.0/os_desc/interface.ncm/sub_compatible_id
|
||||||
|
echo 10 > $GFUNC_PATH/ncm.0/qmult
|
||||||
|
ln -s $GADGET_PATH/configs/c.1 $GADGET_PATH/os_desc/c.1
|
||||||
|
ln -s $GFUNC_PATH/ncm.0 $GCONFIG
|
||||||
|
HOST_ADDR=`cat $GFUNC_PATH/ncm.0/host_addr`
|
||||||
|
DEV_ADDR=`cat $GFUNC_PATH/ncm.0/dev_addr`
|
||||||
|
IFNAME=`cat $GFUNC_PATH/ncm.0/ifname`
|
||||||
|
gadget_info "ncm function enabled, mac(h): $HOST_ADDR, mac(g): $DEV_ADDR, ifname: $IFNAME."
|
||||||
|
gadget_info "execute ifconfig $IFNAME up to enable ncm iface."
|
||||||
|
gadget_info "run $name dhcp to start dhcp server, assign IP to PC(debug only)"
|
||||||
|
}
|
||||||
|
|
||||||
|
ncm_unlink()
|
||||||
|
{
|
||||||
|
[ -e $GFUNC_PATH/ncm.0/ifname ] && ifconfig `cat $GFUNC_PATH/ncm.0/ifname` down
|
||||||
|
g_remove $GADGET_PATH/os_desc/c.1
|
||||||
|
g_remove $GCONFIG/ncm.0
|
||||||
|
}
|
||||||
|
|
||||||
|
ncm_clean()
|
||||||
|
{
|
||||||
|
g_remove $GFUNC_PATH/ncm.0
|
||||||
|
}
|
||||||
|
|
||||||
## MTP
|
## MTP
|
||||||
|
|
||||||
mtp_config()
|
mtp_config()
|
||||||
|
@ -556,6 +613,9 @@ echo_udc()
|
||||||
|
|
||||||
gconfig()
|
gconfig()
|
||||||
{
|
{
|
||||||
|
# Override PID for function need driver install, windows sometimes cache vid/pid
|
||||||
|
[ $RNDIS = okay ] && PRODUC_ID=0x0020
|
||||||
|
[ $NCM = okay ] && PRODUC_ID=0x0019
|
||||||
gadget_info "config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
|
gadget_info "config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
|
||||||
mountpoint -q /sys/kernel/config || mount -t configfs none /sys/kernel/config
|
mountpoint -q /sys/kernel/config || mount -t configfs none /sys/kernel/config
|
||||||
[ -e $GADGET_PATH ] && die "ERROR: gadget already configured, should run stop first"
|
[ -e $GADGET_PATH ] && die "ERROR: gadget already configured, should run stop first"
|
||||||
|
@ -572,6 +632,7 @@ gconfig()
|
||||||
mkdir $GCONFIG/strings/0x409
|
mkdir $GCONFIG/strings/0x409
|
||||||
# Windows rndis driver requires rndis to be the first interface
|
# Windows rndis driver requires rndis to be the first interface
|
||||||
[ $RNDIS = okay ] && rndis_config
|
[ $RNDIS = okay ] && rndis_config
|
||||||
|
[ $NCM = okay ] && ncm_config
|
||||||
[ $MSC = okay ] && msc_config
|
[ $MSC = okay ] && msc_config
|
||||||
[ $UAS = okay ] && uas_config
|
[ $UAS = okay ] && uas_config
|
||||||
[ $ADB = okay ] && adb_config
|
[ $ADB = okay ] && adb_config
|
||||||
|
@ -584,6 +645,7 @@ gclean()
|
||||||
msc_clean
|
msc_clean
|
||||||
uas_clean
|
uas_clean
|
||||||
rndis_clean
|
rndis_clean
|
||||||
|
ncm_clean
|
||||||
adb_clean
|
adb_clean
|
||||||
uvc_clean
|
uvc_clean
|
||||||
# Remove string in gadget
|
# Remove string in gadget
|
||||||
|
@ -597,6 +659,7 @@ gclean()
|
||||||
glink()
|
glink()
|
||||||
{
|
{
|
||||||
[ $RNDIS = okay ] && rndis_link
|
[ $RNDIS = okay ] && rndis_link
|
||||||
|
[ $NCM = okay ] && ncm_link
|
||||||
[ $MSC = okay ] && msc_link
|
[ $MSC = okay ] && msc_link
|
||||||
[ $UAS = okay ] && uas_link
|
[ $UAS = okay ] && uas_link
|
||||||
[ $ADB = okay ] && adb_link
|
[ $ADB = okay ] && adb_link
|
||||||
|
@ -607,6 +670,7 @@ gunlink()
|
||||||
{
|
{
|
||||||
[ -e $GADGET_PATH/UDC ] || die "gadget not configured yet"
|
[ -e $GADGET_PATH/UDC ] || die "gadget not configured yet"
|
||||||
rndis_unlink
|
rndis_unlink
|
||||||
|
ncm_unlink
|
||||||
msc_unlink
|
msc_unlink
|
||||||
uas_unlink
|
uas_unlink
|
||||||
adb_unlink
|
adb_unlink
|
||||||
|
@ -649,6 +713,9 @@ select_one()
|
||||||
"rndis"|"network"|"net"|"if")
|
"rndis"|"network"|"net"|"if")
|
||||||
RNDIS=okay
|
RNDIS=okay
|
||||||
;;
|
;;
|
||||||
|
"ncm"|"cdc_ncm")
|
||||||
|
NCM=okay
|
||||||
|
;;
|
||||||
"mtp")
|
"mtp")
|
||||||
MTP=okay
|
MTP=okay
|
||||||
;;
|
;;
|
||||||
|
@ -690,6 +757,10 @@ gstart()
|
||||||
glink
|
glink
|
||||||
[ $FUNCTION_CNT -lt 1 ] && die "No function selected, will not pullup."
|
[ $FUNCTION_CNT -lt 1 ] && die "No function selected, will not pullup."
|
||||||
echo_udc $1
|
echo_udc $1
|
||||||
|
## improve u_ether(rndis/ncm) performance
|
||||||
|
# echo "now enable usb0 rps, set rps_cpus to:"
|
||||||
|
# echo 70 > /sys/class/net/usb0/queues/rx-0/rps_cpus
|
||||||
|
# cat /sys/class/net/usb0/queues/rx-0/rps_cpus
|
||||||
}
|
}
|
||||||
|
|
||||||
gstop()
|
gstop()
|
||||||
|
@ -790,6 +861,32 @@ set_role() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
config_dhcp()
|
||||||
|
{
|
||||||
|
rm -f /var/lib/misc/udhcpd.leases
|
||||||
|
gadget_info "old lease file destroyed (/var/lib/misc/udhcpd.leases)"
|
||||||
|
gadget_info "overriding /etc/udhcpd.conf..."
|
||||||
|
echo "start $YOURIP" > /etc/udhcpd.conf
|
||||||
|
echo "end $YOURIP" >> /etc/udhcpd.conf
|
||||||
|
echo "interface usb0" >> /etc/udhcpd.conf
|
||||||
|
echo "max_leases 1" >> /etc/udhcpd.conf
|
||||||
|
echo "pidfile /var/run/udhcpd.pid" >> /etc/udhcpd.conf
|
||||||
|
echo "lease_file /var/lib/misc/udhcpd.leases" >> /etc/udhcpd.conf
|
||||||
|
echo "opt router $MYIP" >> /etc/udhcpd.conf
|
||||||
|
echo "option subnet $MYNETMASK" >> /etc/udhcpd.conf
|
||||||
|
echo "option domain local" >> /etc/udhcpd.conf
|
||||||
|
echo "option lease 864000" >> /etc/udhcpd.conf
|
||||||
|
ifconfig usb0 down
|
||||||
|
ifconfig usb0 $MYIP netmask $MYNETMASK up
|
||||||
|
sleep 1
|
||||||
|
busybox udhcpd /etc/udhcpd.conf
|
||||||
|
gadget_info "udhcpcd now running..."
|
||||||
|
ps | grep udhcpd | grep -v grep
|
||||||
|
gadget_info "Configure your usb host ncm interface to dhcp mode"
|
||||||
|
gadget_info "The IP of USB host ncm iface: $YOURIP"
|
||||||
|
gadget_info "Our IP as router: $MYIP"
|
||||||
|
}
|
||||||
|
|
||||||
print_info()
|
print_info()
|
||||||
{
|
{
|
||||||
echo "SpacemiT gadget-setup tool $SCRIPT_VERSION"
|
echo "SpacemiT gadget-setup tool $SCRIPT_VERSION"
|
||||||
|
@ -841,6 +938,9 @@ case "$1" in
|
||||||
shift
|
shift
|
||||||
set_role "$@"
|
set_role "$@"
|
||||||
;;
|
;;
|
||||||
|
dhcp)
|
||||||
|
config_dhcp
|
||||||
|
;;
|
||||||
[a-z]*)
|
[a-z]*)
|
||||||
handle_select $1
|
handle_select $1
|
||||||
gstart $2
|
gstart $2
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue