mirror of
https://gitee.com/bianbu-linux/usb-gadget
synced 2025-06-27 18:51:24 -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
|
||||
```
|
||||
|
||||
另外最新脚本增加快捷运行 dhcp 服务器功能,依赖 busybox udhcpd,只需要执行
|
||||
|
||||
```
|
||||
gadget-setup.sh dhcp
|
||||
```
|
||||
|
||||
就会自动为网卡配置ip地址,并且支持给PC通过DHCP协议分配IP地址,具体请查看脚本实现。
|
||||
|
||||
### PC端设置
|
||||
|
||||
目前最新版脚本已经支持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
|
||||
gadget-setup.sh 通用脚本集成了 ADB功能。
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
# In busybox ash, should use /bin/sh, but bianbu cannot use /bin/sh
|
||||
|
||||
name=`basename $0`
|
||||
SCRIPT_VERSION="v0.5-SUPPORTROLESW"
|
||||
SCRIPT_VERSION="v0.6-NCMDHCP"
|
||||
CONFIG_FILE=$HOME/.usb_config
|
||||
|
||||
# USB Descriptors
|
||||
|
@ -21,6 +21,10 @@ GFUNC_PATH=$GADGET_PATH/functions
|
|||
GCONFIG=$GADGET_PATH/configs/c.1
|
||||
[ "$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
|
||||
RAMDISK_PATH=/var/sdcard
|
||||
TMPFS_FOUND=`mount | grep tmpfs | grep -v devtmpfs | awk '{print $3}' | grep '/dev/shm' | wc -l`
|
||||
|
@ -40,6 +44,7 @@ MSC_ARG=""
|
|||
ADB=disabled
|
||||
UVC=disabled
|
||||
RNDIS=disabled
|
||||
NCM=disabled
|
||||
FUNCTION_CNT=0
|
||||
DEBUG=
|
||||
|
||||
|
@ -66,6 +71,12 @@ usage()
|
|||
echo -e "\tadb Android Debug Bridge over USB."
|
||||
echo -e "\tuvc Webcam."
|
||||
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 ""
|
||||
}
|
||||
|
@ -475,6 +486,7 @@ rndis_link()
|
|||
IFNAME=`cat $GFUNC_PATH/rndis.0/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 "run $name dhcp to start dhcp server, assign IP to your PC(debug only)"
|
||||
}
|
||||
|
||||
rndis_unlink()
|
||||
|
@ -489,6 +501,51 @@ rndis_clean()
|
|||
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_config()
|
||||
|
@ -556,6 +613,9 @@ echo_udc()
|
|||
|
||||
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."
|
||||
mountpoint -q /sys/kernel/config || mount -t configfs none /sys/kernel/config
|
||||
[ -e $GADGET_PATH ] && die "ERROR: gadget already configured, should run stop first"
|
||||
|
@ -572,6 +632,7 @@ gconfig()
|
|||
mkdir $GCONFIG/strings/0x409
|
||||
# Windows rndis driver requires rndis to be the first interface
|
||||
[ $RNDIS = okay ] && rndis_config
|
||||
[ $NCM = okay ] && ncm_config
|
||||
[ $MSC = okay ] && msc_config
|
||||
[ $UAS = okay ] && uas_config
|
||||
[ $ADB = okay ] && adb_config
|
||||
|
@ -584,6 +645,7 @@ gclean()
|
|||
msc_clean
|
||||
uas_clean
|
||||
rndis_clean
|
||||
ncm_clean
|
||||
adb_clean
|
||||
uvc_clean
|
||||
# Remove string in gadget
|
||||
|
@ -597,6 +659,7 @@ gclean()
|
|||
glink()
|
||||
{
|
||||
[ $RNDIS = okay ] && rndis_link
|
||||
[ $NCM = okay ] && ncm_link
|
||||
[ $MSC = okay ] && msc_link
|
||||
[ $UAS = okay ] && uas_link
|
||||
[ $ADB = okay ] && adb_link
|
||||
|
@ -607,6 +670,7 @@ gunlink()
|
|||
{
|
||||
[ -e $GADGET_PATH/UDC ] || die "gadget not configured yet"
|
||||
rndis_unlink
|
||||
ncm_unlink
|
||||
msc_unlink
|
||||
uas_unlink
|
||||
adb_unlink
|
||||
|
@ -649,6 +713,9 @@ select_one()
|
|||
"rndis"|"network"|"net"|"if")
|
||||
RNDIS=okay
|
||||
;;
|
||||
"ncm"|"cdc_ncm")
|
||||
NCM=okay
|
||||
;;
|
||||
"mtp")
|
||||
MTP=okay
|
||||
;;
|
||||
|
@ -690,6 +757,10 @@ gstart()
|
|||
glink
|
||||
[ $FUNCTION_CNT -lt 1 ] && die "No function selected, will not pullup."
|
||||
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()
|
||||
|
@ -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()
|
||||
{
|
||||
echo "SpacemiT gadget-setup tool $SCRIPT_VERSION"
|
||||
|
@ -841,6 +938,9 @@ case "$1" in
|
|||
shift
|
||||
set_role "$@"
|
||||
;;
|
||||
dhcp)
|
||||
config_dhcp
|
||||
;;
|
||||
[a-z]*)
|
||||
handle_select $1
|
||||
gstart $2
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue