USB接続でAndroidのリモートデバッグとNAT接続

USBガジェットのRNDIS/Ethernet接続でAndroidのリモートデバッグを試した。ついでに、NATでAndroidからネット接続してみた。

AngstromのカーネルはUSBガジェットRNDIS設定済みなので、おもむろにZaurusとPCをUSBで接続。

$ lsusb
Bus 001 Device 004: ID 0525:a4a2 Netchip Technology, Inc.

VIDは0x0525らしいので、/etc/udev/rules.d/50-android.rulesをエディタで開いて

SUBSYSTEM=="usb", SYSFS{idVendor}=="0525", MODE="0666"

として保存。パーミッションは0644でもいいみたい。んでUSBケーブルを一旦抜いて再接続。

$ lsmod 
Module                  Size  Used by 
cdc_ether               7168  0 
usbnet                 20232  1 cdc_ether 
mii                     6400  1 usbnet 

認識された。ifconfig usb0をみると(当然)IPアドレスが当たってないので適当に設定。Zaurus側も同じサブネットで適当に。ping打ってみたら返事が来る。ので、あとはLAN経由デバッグと同じようにadb。

$ export set ADBHOST=192.168.0.101
$ android-sdk/tools/adb kill-server 
$ android-sdk/tools/adb start-server 
$ android-sdk/tools/adb devices 

Zaurus側は/etc/network/interfacesにusb0のエントリを作っておけばUSB接続時にちゃんと設定される。

auto usb0
iface usb0 inet static
        broadcast 192.168.0.255
        netmask 255.255.255.0
        address 192.168.0.100
        gateway 192.168.0.101

PC側はUbuntuVMWare Player上で動かしているんだけど、どうも自動接続というわけにはいかない。しょうがないのでUSB接続ごとに手動設定。ちょっと面倒。けど、VMWareの仮想USBで動くのはうれしい。ホストのWindowsがUSBをつかんじゃったらVMPlayerのメニューのDevicesから「Netchip RNDIS/Ethernet Gadget」にconnectすればOK。VMWareすごい。


USBガジェット接続といっても、単なるネットワークデバイスなので、sshなんかも通る。ので、UbuntuにNAT設定してみた。WAN側はUbuntuのeth1、LAN側はusb0。全部マスカレードして素通し。

iptables -F
iptables -A INPUT -j ACCEPT
iptables -A OUTPUT -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -i usb0 -j ACCEPT

あと、/etc/sysctl.confのnet.ipv4.ip_forward=1のコメント外しておく。AndroidWebブラウザを開いて適当に飛んでみる。使える。LANカード(10BASE-T)に比べても、sshでちょっともたつく感はあるくらいで、特に問題はなし。使える。