USB tethering not working
-
I tried to use USB tethering on my OP6: not working at all (interface stays in MTP mode).
I found that RNDIS mode was just not implemented in
/usr/share/usbinit/setupusb
... snif...So I modified (with success)
/usr/share/usbinit/setupusb
:#!/bin/sh CONFIG_FS=/sys/kernel/config CONFIG_DIR=$CONFIG_FS/usb_gadget/ GADGET_DIR=$CONFIG_DIR/g1 CONFIG_NAME="c.1" SERIALNUMBER=`getprop ro.serialno` # e.g. "0123456789ABCDEF" MANUFACTURER=`getprop ro.product.vendor.manufacturer` # e.g. "Volla" PRODUCT=`getprop ro.product.vendor.model` # e.g. "Phone" CONTROLLER=`getprop sys.usb.controller` # e.g. "musb-hdrc" write() { test -w "$1" || return printf "$2" > "$1" } symlink() { ln -s "$1" "$2" } reset_usb() { rm -f $GADGET_DIR/configs/$CONFIG_NAME/mtp.gs0 rm -f $GADGET_DIR/configs/$CONFIG_NAME/ffs.adb rm -f $GADGET_DIR/configs/$CONFIG_NAME/rndis.usb0 } setup_rndis() { reset_usb write $GADGET_DIR/configs/$CONFIG_NAME/strings/0x409/configuration "rndis" symlink $GADGET_DIR/functions/rndis.usb0 $GADGET_DIR/configs/$CONFIG_NAME/ write $GADGET_DIR/UDC $CONTROLLER setprop sys.usb.state rndis } setup_mtp() { reset_usb write $GADGET_DIR/functions/mtp.gs0/os_desc/interface.MTP/compatible_id "mtp" write $GADGET_DIR/configs/$CONFIG_NAME/strings/0x409/configuration "mtp" symlink $GADGET_DIR/functions/mtp.gs0 $GADGET_DIR/configs/$CONFIG_NAME/ write $GADGET_DIR/UDC $CONTROLLER setprop sys.usb.state mtp } setup_mtp_adb() { reset_usb write $GADGET_DIR/functions/mtp.gs0/os_desc/interface.MTP/compatible_id "mtp_adb" write $GADGET_DIR/configs/$CONFIG_NAME/strings/0x409/configuration "mtp_adb" symlink $GADGET_DIR/functions/mtp.gs0 $GADGET_DIR/configs/$CONFIG_NAME/ symlink $GADGET_DIR/functions/ffs.adb $GADGET_DIR/configs/$CONFIG_NAME/ start android-tools-adbd sleep 2 write $GADGET_DIR/UDC $CONTROLLER setprop sys.usb.state mtp,adb } setup_boot() { if [ -e $GADGET_DIR/functions/mtp.gs0 ]; then echo "Boot setup done" return fi if ! mount | grep -q "$CONFIG_FS"; then mount -t configfs none $CONFIG_FS mkdir -p $GADGET_DIR/strings/0x409 mkdir -p $GADGET_DIR/functions/rndis.usb0 mkdir -p $GADGET_DIR/configs/$CONFIG_NAME/strings/0x409 fi write $GADGET_DIR/idVendor 0x18D1 write $GADGET_DIR/bcdDevice 0x0223 write $GADGET_DIR/bcdUSB 0x0200 write $GADGET_DIR/os_desc/use 1 write $GADGET_DIR/os_desc/b_vendor_code 0x1 write $GADGET_DIR/os_desc/qw_sign "MSFT100" write $GADGET_DIR/strings/0x409/serialnumber $SERIALNUMBER write $GADGET_DIR/strings/0x409/manufacturer $MANUFACTURER write $GADGET_DIR/strings/0x409/product $PRODUCT mkdir -p $GADGET_DIR/functions/mtp.gs0 mkdir -p $GADGET_DIR/functions/ffs.adb symlink $GADGET_DIR/configs/$CONFIG_NAME $GADGET_DIR/os_desc/$CONFIG_NAME mkdir -p /dev/usb-ffs/adb mount -t functionfs -o uid=32011,gid=32011 adb /dev/usb-ffs/adb chown root:plugdev /dev/usb-ffs chmod 775 /dev/usb-ffs chown root:plugdev /dev/usb-ffs/adb chmod 775 /dev/usb-ffs/adb chown root:plugdev /dev/mtp_usb chmod 660 /dev/mtp_usb } setup_boot if [ "$1" = "rndis" ]; then setup_rndis elif [ "$1" = "mtp" ]; then setup_mtp elif [ "$1" = "mtp_adb" ]; then setup_mtp_adb else echo "No configuration selected." fi exit 0
and
/usr/bin/tethering
:#! /bin/sh NMCONF=/etc/NetworkManager/system-connections/tethering init_interface(){ bash /usr/share/usbinit/setupusb reset bash /usr/share/usbinit/setupusb rndis ifconfig rndis0 up } enable(){ MAC="$(ip -o link show rndis0 |sed -e 's/^.*ether //'|cut -d' ' -f1)" UUID=ca16a21d-7d8b-4b49-926e-"$(echo $MAC|sed -e 's/://g')" STAMP=$(date +%s) if [ ! -e $NMCONF ];then cat << EOF >$NMCONF [802-3-ethernet] duplex=full mac-address=$MAC [connection] id=tethering uuid=$UUID type=802-3-ethernet timestamp=$STAMP [ipv6] method=auto [ipv4] method=shared may-fail=false EOF else sed -i s/^mac-address=.*/mac-address=${MAC}/ $NMCONF sed -i s/^uuid=.*/uuid=${UUID}/ $NMCONF sed -i s/^timestamp=.*/timestamp=${STAMP}/ $NMCONF fi chmod 0600 $NMCONF sleep 2 nmcli c reload nmcli c up id tethering } disable(){ nmcli c down id tethering || true rm $NMCONF || true initctl start mtp-state } case $1 in enable) init_interface enable ;; disable) disable ;; *) echo "need an argument (enable|disable)" exit 0 ;; esac
RNDIS is now fully usable with
/usr/bin/tethering enable/disable
and with UT Tweak Tool.
Enjoy! -
Ubuntu Touch hasn't USB Tethering. Yes, there is RNDIS option in UT Tweak Tool but it used for USB debugging when ADB was unavailable.