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側はUbuntuをVMWare 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のコメント外しておく。AndroidのWebブラウザを開いて適当に飛んでみる。使える。LANカード(10BASE-T)に比べても、sshでちょっともたつく感はあるくらいで、特に問題はなし。使える。