そもそもUSB Ether Gadget とはなんぞや
これは、Linuxが乗っかってるボードやらデバイスについているUSB Deviceポートにお手軽になんらかの機能を追加するフレームワークの一つです。
参考→ http://www.linux-usb.org/gadget/
Gadgetはファイルストレージやらカメラやら色々ありますが、Ether Gadgetは、あるデバイスについてるUSB Deviceをイーサネットに見立てて、ホストとTCP/IP通信などをしましょうというやつです。
TCP/IP通信が出来るようになるということは、ホスト側がデバイスと通信するためにわざわざドライバを作るという手間が省けます。
さらに、デバイス側にftpd等がある場合は、ファイルのやりとりをするコードを書かなくてもよくなりますし、TCP/IP通信ができると何かと便利です。
以下の手順で簡単にUSB Etherが使用可能になります。
(注:当たり前ですが、カーネルにドライバが無いとだめです)
$ modprobe g_ether
g_ether gadget: using random self ethernet address
g_ether gadget: using random host ethernet address
usb0: MAC 22:02:25:6c:25:47
usb0: HOST MAC 46:01:8e:9f:b4:f2
g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
g_ether gadget: g_ether ready
fsl-usb2-udc: bind to driver g_ether
と出てきて、さらにこの状態から
$ ifconfig usb0 up
とすると、一応USB-LANが使用可能になります。
WindowsがホストPCな場合のドライバの入れ方
USB Gadgetが接続されているPCがWindowsな場合、modprobeした時点でドライバの検索を開始してしまいます。
よくあるのが、これ→
https://code.google.com/p/beagleboard/downloads/detail?name=linux.inf&can=2&q=
みたいな、お手製の[linux.inf]を取ってきてやる方法もあります。
ですが、もう一個方法があって、デバイスマネージャを開いて、ドライバのインストールで「自分で探す」を選択して、
"ネットワーク アダプダ" → "Microsoft Corporation" → "Remote NDIS Compatible Device"
を選択して入れてあげると良い感じに動きます。
参考:https://github.com/mindboards/ev3dev/wiki/Setting-Up-Windows-USB-Ethernet-Networking
(Windows8ではmlinux.infを使うやり方は入れることができません。Windwos8は認証が無いドライバを許して無いので…。Remote NDIS Compatible Deviceのほうは試してないですが、認識させられるかもしれません)
Gadget側のMACアドレスの設定方法
得に指定しなくてもランダムで決定されますし、問題はないと思いますが、次のようにやると設定できます。
$ modprobe g_ether host_addr=ホストのMAC dev_addr=デバイス側MACアドレス
IPアドレス設定のコツ
相手がWindowsの場合は、ネットワークを認識した時点でAPIPA(Automatic Private IP Addressing:DHCPなどではなく自動的にIPが割り振られるシステム)が働きます。
なので、Gadget側をあらかじめ[169.254.1.0]~[169.254.254.254]の値を設定しておくと、Windwos側でIPアドレスの設定をしなくても通信ができるのでお得です。
IPアドレスの設定は、ifconfig時にやります。
$ ifconfig usb0 169.254.10.10 up
とかやるとよいですね。