Android USB Tethering

Android USB Tethering

Tethering means sharing the Internet connection of an Internet-capable mobile phone with other devices. This sharing can be offered over a wireless LAN (Wi-Fi), or over Bluetooth, or by physical connection using a cable (Tethering).

Our focus in this article will be the USB tethering.
Your Android mobile phone can behave as an external network interface usbN, connected via the USB infrastructure. The usbN interface is in turn connected to the mobile phone LAN, providing dhcp server, DNS server, gateway and so on.
That's how your mobile phone can provide an Internet connection to another device.

Android phones are already equipped to provide this functionality. Simply connect the USB cable and go to Settings -> Wireless settings -> Tethering -> Tethering USB.

What you need is some kernel and network configuration on the other side (e.g. your laptop).

Contents

Kernel configuration

KERNEL .config 3.0.6-gentoo
 
 
General setup  --->
    [*] Prompt for development and/or incomplete code/drivers
Device Drivers --->
    [*] Network device support --->
        USB Network Adapters --->
            [*] Multi-purpose USB Networking Framework
                <M> CDC Ethernet support
                <M> CDC EEM support
                <M> Simple USB Network Links (CDC Ethernet subset)
                <M>   Host for RNDIS and ActiveSync devices
            [*] Embedded ARM Linux links
KERNEL .config 3.12.21-gentoo-r1
 
 
Device Drivers --->
    [*] Network device support --->
        USB Network Adapters --->
            [M] Multi-purpose USB Networking Framework
                <M> CDC Ethernet support
                <M> CDC EEM support
                [M] Simple USB Network Links (CDC Ethernet subset)
                    [*] Embedded ARM Linux links

You can either build the options in the kernel or leave them as module.

Note
The RNDIS option seems to be needed in some situation only. See this thread to learn more.

Tested Devices

  • Google Nexus One (Android 2.3.6 build GRK39F)
  • Google Nexus 4 (Android 4.3 build JWR66Y - uses rndis_host)
  • HTC One M7 (Sense 5.5, Android 4.3, Software number 3.62.401.1,HTC SDK API level 5.65 - I used rndis_host, cdc_ether and usbnet modules ONLY to get it to work)
  • LG P350 (Android 2.2.1 build FRG83)
  • LG E400 (Android 2.3.6 build GRK39F)
  • LG L7 P705 (Android 4.1.2 build JZO54K)
  • Motorola Defy (Android 2.3.7 Cyanogenmod 7)
  • Motorola Moto G 4G 2013 (1st Gen) (Android 5.1) -- needed rndis_host module -- User:mercuriete
  • Samsung Galaxy S i9000
  • Samsung Galaxy Nexus i9250 (Android 4.0.1 ITL41D)
  • Samsung Galaxy S2
  • Samsung Galaxy S3 (GT-I9300 Android 4.3 Stock Rom)
  • Sony Xperia Go (St27i Android 4.1.2 Stock Rom build no 6.2.A.1.100 -- needed rndis_host module for me - User:LordVan )
  • HTC Desire HD (Android 2.3.6 Stock Rom build and Android 4.4.4 (unofficial CyanogenMod 11) -- needed rndis_host module for both Roms)
  • Huawei Honor 4x (unofficial CyanogenMod 11 / Android 4.4.4, works great) -- needed rndis_host module AleiPhoenix (talk) 13:57, 3 July 2015 (UTC)
  • Samsung Galaxy S4 Mini Duos (GT-I9192, unofficial CyanogenMod 12.1 / Android 5.1) -- needed rndis_host module

Testing

root # dmesg
usb 1-7: New USB device found, idVendor=18d1, idProduct=4e13
usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 1-7: Product: Nexus One
usb 1-7: Manufacturer: Google, Inc.
usb 1-7: SerialNumber: HT9CSP803294
usb 1-7: usb_probe_device
usb 1-7: configuration #1 chosen from 1 choice
usb 1-7: adding 1-7:1.0 (config #1, interface 0)
rndis_host 1-7:1.0: usb_probe_interface
rndis_host 1-7:1.0: usb_probe_interface - got id
rndis_host 1-7:1.0: usb0: register 'rndis_host' at usb-0000:00:1d.7-7, RNDIS device, ea:61:37:88:a2:e5
usb 1-7: adding 1-7:1.1 (config #1, interface 1)
drivers/usb/core/inode.c: creating file '004'
hub 1-0:1.0: state 7 ports 8 chg 0000 evt fe80
uhci_hcd 0000:00:1d.0: reserve dev 2 ep81-INT, period 8, phase 4, 93 us
usb 1-7: link qh32-0001/ffff88021aa4bc80 start 1 [1/0 us]
usb0: no IPv6 routers present
root # ifconfig -a

If you see usb0 (or whatever number you'll get) you are all set.

Connecting

Since the mobile phone LAN changes its addresses, you need a DHCP client to configure the usbN device.

If you are on a laptop, you probably have a DHCP client. If not, emerge net-misc/dhcpcd.

root # emerge --ask net-misc/dhcpcd

Manually

Simply run dhcpcd after plug/mobile activation.

root # dhcpcd usb0

Permanent configuration

Edit your /etc/conf.d/net to have a permanent, automatic activation of the interface.

root # echo "config_usb0=\"dhcp\"" >> /etc/conf.d/net

Once plugged in and activated on the mobile phone side, the usb0 will be up and configured.

Checks

Run the usual checks to verify your connection.

root # ifconfig usb0
root # route
root # cat /etc/resolv.conf

Advanced network settings

The DHCP is very quick, but the default settings don't give you as much freedom as you may want.

A possible scenario is that you are in a corporate, protected LAN context that doesn't give you the Internet connection but where you need to stay connected to have access to some Intranet resource.
Or maybe you have a free but limited connection (a public wifi allowing http only, an evil firewall, etc.). Since mobile connections could be expensive, you could want to save your money up using the tethering only when needed.
Here is a handful of examples about the DHCP usage.

If you want to limit the information set by DHPC, you can fine-tune its behaviour.

E.g.:

root # dhcpcd --nogateway --nohook resolv.conf --nohook hostname usb0

This will let your default gateway, resolv.conf and hostname as they are, letting you provide extra info by hand.

E.g.:

root # route add -host my_sshd_remote_host_IP dev usb0

Finally, you can permanently configure your USB network interface.
E.g.

FILE /etc/conf.d/net
 
 
config_usb0="dhcp"
dhcpcd_usb0="--nogateway --nohook resolv.conf --nohook hostname"
# Special hosts
postup()
{
    if [[ "usb0" == ${IFACE} ]]; then
        route add -host my_sshd_remote_host_IP dev usb0
    fi
}

Generally, you can avoid every DHCP setting (see the man page) but gather them with

root # dhcpcd -U usb0

Then you can set what you want in the postup hook.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值