Androidを載せたbeagleboard-xmをWiFi APにするまで(其の七)
BeagleBorad-xm上でDHCPサーバとDNSサーバを動かしてWiFi APとRouter機能を持たせる予定だったが、ひとまずはRouter機能はやめて有線側とBridgeさせるだけにしてみた。
Bridgeはbrctlコマンドを使って有線側インターフェスen0とWiFi側インタフェースath0をブリッジさせることで実現する。
brctlはbusyboxに入っているものを使う。
Kernelの再ビルド
brctlを使ってみたところ、Kernelが対応していない旨のエラーが出た。ので、ビルドオプションを変更してKernelをリビルドする。
make ARCH=arm CROSS_COMPILE=<top-dir>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- menuconfig
menuconfigで下記のオプションを有効にする。今後Router機能を使いたくなるかもしれないので、NATやMASQUERADEのオプションもついでに有効にしておいた。ブリッジさせるだけなら802.1d Ethernet Bridgingだけでいいと思う。
Networking Support ---> Networking options [*] 802.1d Ethernet Bridging Network packet filtering framework (Netfilter) ---> Core Netfilter Configuration ---> <*> Netfilter connection tracking support [*] Connection tracking flow accounting [*] Connection mark tracking support [*] Connection tracking events IP: Netfilter Configuration ---> <*> IPv4 connection tracking support (required for NAT) <*> IP tables support (required for filtering/masq/NAT) <*> Packet filtering <*> REJECT target support <*> LOG target support <*> Packet Mangling
いつも通りKernelをビルドして、出来上がったuImageをSDカードに書き込む。
make ARCH=arm CROSS_COMPILE=<top-dir>/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi- uImage
brctlでブリッジ接続
busyboxのbrctlコマンドをつかってブリッジ接続を有効にする。
今までやってきた設定もまとめて一つのシェルスクリプトにした。
MacBook AirやiPhoneからつないで接続OK。IPやDNSサーバの情報は上位のルータからもらえていることも確認した。ここまでで、WiFi APとして使えるようになった。
あとは、起動時に自動でWiFi AP機能を有効にすることと、せっかくAndroid上で動いているのでアプリでWiFi AP設定用のUIを作ってみる。シリアル経由でつながっていなくてもWiFi APのOFF/ON、設定と電源ON/OFFが簡単にできるようにする。