AtmelのSoC評価基板、SAMA5D3 Xplained (以下SAXと略す)にUSB無線LANアダプタを装着して動作するようにしました。
手抜きをして他の方の設定結果をほとんど丸写ししたのですが、そのため罰が当たって何時間も苦しむことになりましたのでその辺の勘所も紹介します。
環境
ハードウェアは以下の通りです。
- SAX基板
- USB無線LANアダプタ BUFFALO WLI-UC-GNM2 (発熱が大きいので別製品がいいかもしれない)
無線LANアダプタはそこそこ枯れたものを探しました。十分に枯れたUSB無線LANアダプタならばUSBポートに挿すだけで認識されるはずです。不安な方はBeagleboneやRapsberry Piで使用実績のあるものにすればいいでしょう。
SAXのFlash ROMに焼いているイメージはbitbake atmel-demo-image で作ったものです。これまでの投稿ではcore-image-minimalを使っていましたが、USBポート越しのシリアル接続が出来ず不便なので、こちらを使っています。
unameの実行結果はこんな感じです。
root@sama5d3-xplained:~# uname -a
Linux sama5d3-xplained 3.18.0-linux4sam_5.0-alpha5-00009-g23d9de4 #1 Sat Sep 5 20:23:36 JST 2015 armv7l GNU/Linux
root@sama5d3-xplained:~#
パスフレーズを生成する
アクセスポイントに接続するためには、SSIDと暗号の設定をしなければなりません。我が家ではWPA2を使用していますので、これにあわせたパスフレーズを生成しました。
パスフレーズには、アクセスポイントに設定した分かりやすい文字列では無く、長い16進のキー必要になります。そのため、いつも使っている文字列をキーに変換するツールであるwpa_passphaseが提供されています。
root@sama5d3-xplained:~# wpa_passphrase "MYSSID" "MYPASSPHRASE"
network={
ssid="MYSSID"
#psk="MYPASSPHRASE"
psk=8b086b1986d8631bdf4f79a2836f4f94c87655ac677f4dce73b8646dc1ff96a5
}
wpa_passphraseにSSIDとパスフレーズを与えると、上記のような設定文字列が現れます(SSIDとパスフレーズは自分が使用しているものにします)のでコピーしてください。コピーした内容は/etc/wa_supplicant.confに使います。
/etc/wpa_supplicant.confの設定
/etc/wpa_supplicant.confは、無線ネットワークの設定を記述したものです。スケルトンが与えられていますので、network ={}の部分を先にコピーしたSSIDとキーで置き換えます。
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1network={
ssid="MYSSID"
#psk="MYPASSPHRASE"
psk=8b086b1986d8631bdf4f79a2836f4f94c87655ac677f4dce73b8646dc1ff96a5}
/etc/network/interfacesの設定
設定の最後です。先の暗号設定を使用するネットワーク・アダプタの設定をおこないます。
/etc/network/interfacesのうち、無線LANインターフェースの部分を調べてください。
# Wireless interfaces
auto wlan0
iface wlan0 inet dhcp
wireless_mode managed
wireless_essid any
wpa-driver wext
wpa-conf /etc/wpa_supplicant.conf
おそらく、ファイルを開いたときからほとんどこの通りだと思います。私の場合、wlan0(無線LANデバイス名)が自動起動になっていませんでしたので、auto wlan0 を追加しました。ifaceの指定がdhcpになっていますので、ネットワーク・アドレスやDNSの設定は自動でアクセスポイントから取得します。
設定は以上です。再起動してください(Unixでは再起動せずにネットワークを再構成することも可能です)。
テスト
設定が正しければ再起動してログオンするだけで無線LANは接続状態になっているはずです。
目に見える形でテストしたいという方はifdown / ifup コマンドを使うといいでしょう。
root@sama5d3-xplained:~# ifdown wlan0
root@sama5d3-xplained:~# ifup wlan0
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
udhcpc (v1.23.2) started
Sending discover…
Sending discover…
Sending select for 192.168.0.15…
Lease of 192.168.0.15 obtained, lease time 3600
/etc/udhcpc.d/50default: Adding DNS 219.110.5.7
/etc/udhcpc.d/50default: Adding DNS 219.110.4.80
root@sama5d3-xplained:~#
ifdownはネットワークを利用不能にするコマンドです。引数はネットワーク・デバイス名です。ifup反対にネットワーク利用可能にするコマンドで、正常に起動すると上記のようにIPアドレスの取得まで終了します。
なお、rfkillに関するエラーが出ていますが、これは無線ネットワークの節電機能です。今使っているカーネルには/dev/rfkillがないため、このようなエラーが出ています。SAXをモバイルで使う気は無いので無視します。
落とし穴
当初以下のような状態で足踏みしてしまいました。
root@sama5d3-xplained:~# ifup wlan0
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
udhcpc (v1.23.2) started
Sending discover…
Sending discover…
Sending discover…
No lease, forking to background
root@sama5d3-xplained:~#
一見DHCPのエラーに見えるため間違った方向で探しましたが、結論から言えば/etc/wpa_supplicant.confの設定ミスです。
先に紹介した /etc/wpa_supplicant.conf は非常に簡潔ですが、実際には多くのパラメタを設定できます。例えば、以下のように暗号プロトコルがWPAであると指定することも出来ます。
ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=0
update_config=1network={
ssid="MYSSID"
#psk="MYPASSPHRASE"
psk=8b086b1986d8631bdf4f79a2836f4f94c87655ac677f4dce73b8646dc1ff96a5
proto=WPA #間違い}
ところがこの設定は間違いです。我が家の暗号プロトコルはWPA2だからです。実はデフォルトではWPAとWPA2の両者でチャレンジするので無指定のままでいいのですが、余計なことをしたばっかりに暗闇をさまよい歩くことになりました。
同様のことはkey_mgmtやpairsise設定でも起きる可能性があります。特に理由が無い限り、ssidとpsk以外は設定しなくて良いでしょう。