BeagleBoard-xM + Ubuntuで無線LAN

BeagleBoard xM rev.C + Ubuntu10.10に無線LAN子機「Planex GW-USValue-EZ」を導入し、ようやく(WPAで)接続ができました。
なお、無線親機にはBuffalo WZR-HP-G300NHを使用しています。



BeagleBoard xM にGW-USValue-EZを取り付けたところ。小さい!!!


GW-USValue-EZのドライバはUbuntu10.10には含まれていないため、USBに挿しただけでは認識しませんでした。
GW-USValue-EZにはRTL8192CUが使われており、メーカー(realtek)のサイトからLinux用のドライバーがダウンロードできます。ただし、ソースなので、コンパイルが必要です。

以下に手順メモを記載します。


(2012/6/9追記 Ubuntu11.04以降にはドライバが含まれていましたので、コンパイルは不要です。)


【ドライバーのインストール】

  • ドライバーソースをダウンロード

http://www.realtek.com/downloads/downloadsView.aspx?Langid=4&PNid=21&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false&Downloads=true
今回はRTL8192CU_linux_v2.0.1502.20110402.zip をダウンロードしたが、5/28時点で新しいドライバが公開されている。

  • ソースを解凍するためUNZIPをインストール


$ sudo apt-get install unzip

  • ソースの解凍


$ unzip RTL8192CU_linux_v2.0.1502.20110402.zip

  • ドライバーのビルドとインストール


$ cd RTL8192CU_8188CUS_8188CE-VAU_linux_v2.0.1502.20110402
$ sudo sh install.sh

以下のエラーで止まった。


/lib/modules/2.6.38.4-x3/build: No such file or directory. Stop.

/lib/modules/2.6.38.4-x3
build -> /build/buildd/linux-2.6.38 へハードリンクが張られているが、リンク先が存在しない。
カーネルのビルドを行った。



カーネルのビルド

$ sudo apt-get install bzr
$ cd
$ sudo bzr branch lp:~beagleboard-kernel/+junk/2.6-stable
$ cd 2.6-stable/
$ cp system.sh.sample system.sh
$ sudo ./build_kernel.sh
なんか聞いてくるが、デフォルトで。
(ビルドするのに8時間ほどかかった。)


※今回はカーネルをビルドしたが、以下でよかったかも。


$ sudo apt-get install kernel-devel


以上で、カーネルのビルドができたので、ドライバーのビルドに戻って、、、


$ cd /lib/modules/2.6.38.4-x3
$ sudo rm build
$ sudo ln -s /home/ubuntu/2.6-stable/KERNEL build

なぜかアーキテクチャ(arm)がうまく取れないので、セットするように修正


$ sudo vi /home/ubuntu/2.6-stable/KERNEL/Makefile


SRCARCH := $(ARCH) の下に
SRCARCH := arm を追加


$ sudo sh install.sh

コンパイルが進むが、usb_intf.cでエラー
http://blog.livedoor.jp/mtk_sugi/ を参考に、以下のように修正


$ sudo vi driver/rtl8192CU_linux_v2.0.1502.20110402/os_dep/linux/usb_intf.c


コメントアウト://pdvobjpriv->pusbdev->autosuspend_delay = 0 * HZ;//15 * HZ; idle-delay time
追加:pm_runtime_set_autosuspend_delay(&pdvobjpriv->pusbdev->dev, 0 * HZ);

install.shがdriverディレクトリを解凍してusb_intf.cを上書きしないように、tarしているところをコメントアウト


$ sudo vi install.sh

#tar zxvf $Drvfoulder


$ sudo sh install.sh

無線子機(GW-USValue-EZ)をUSBに指して、


$ lsmod
で、8192cuができていればOK。また、

$ ifconfig
で、wlan0ができていればOK

ここまでできれば、後はBeagleBoardというよりはUbuntuでの無線LANの設定の問題となる。



無線LAN親機の設定】
今回使用した、Buffalo WZR-HP-G300NHでは無線の認証方式が「WPA/WPA2 mixedmode - PSK」となっており、この設定だとうまくいかないとの書き込みがネット上にあったので、「WPA-PSK」の固定に変更した。(この設定を変更するとつながらなくなるかは当方では未確認です。)


★設定手順

  • WEB設定画面にログインし、「無線設定」-「基本(11n/g/b)」を開く

無線の認証を「WPA-PSK」、無線の暗号化を「AES」に変更

  • 「無線設定」-「AOSS」を開く

暗号化レベル拡張機能を「無効」に変更


無線LAN設定】

  • network-managerが動いているとうまくいかないので、停止させる。

デフォルトでは入っていないかも。入っていない場合は不要。


$ sudo stop network-manager

  • アクセスポイントのスキャン


$ iwlist wlan0 scan
で、無線親機のSSID等が表示されれば無線のドライバやハードは動いていると判断できる。(無線親機のSSIDがステルスモードの場合は表示されないと思われる。)

  • /etc/network/interfacesを以下のようにする


auto lo
iface lo inet loopback

auto wlan0
iface wlan0 inet static
address 192.168.0.2
netmask 255.255.255.0
gateway 192.168.0.1
broadcast 192.168.0.255
wpa-driver wext
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

※なお、有線LANの設定は消しています。
※IPはDHCPではなく、固定としています。IPアドレスはネットワークに合うように適当に変更してください。

  • 暗号キーをwpa_passphraseコマンドで暗号化する


$ wpa_passphrase SSIDを記入 暗号化キーを記入

以下のような結果が表示される。


network={
ssid="指定したSSID"
#psk="指定した暗号キー"
psk=暗号化された暗号キー
}

  • /etc/wpa_supplicant/wpa_supplicant.confを編集


network={
ssid="無線親機のSSIDを書く"
proto=WPA WPA2
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk=wpa_passphraseの暗号化された暗号キーを指定
}

  • confファイルの確認


$ sudo wpa_supplicant -iwlan1 -c /etc/wpa_supplicant/wpa_supplicant.conf -Dwext

  • 無線設定確認


$ iwconfig
で、ESSID等が表示されていればうまくいっている。

wlan0 IEEE 802.11bgn ESSID:"指定したSSID" Nickname:""
Mode:Managed Frequency:2.422 GHz Access Point: XX:XX:XX:XX:XX:XX
Bit Rate:150 Mb/s Sensitivity:45/0
Retry:off RTS thr:off Fragment thr:off
Power Management:off
Link Quality=99/100 Signal level=-45 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0

  • 設定を変更した時は以下でインタフェースを再起動させる。


$ sudo ifdown wlan0
$ sudo ifup wlan0

  • NetworkManagerをOS起動時に起動しないようにする

NetworkManagerが起動していると、うまくいかないため、停止させる。
※NetworkManagerはもともとは入っていなかったかも。
ランレベル毎に起動設定ができるはずだが、sysv-rc-confやupdate-rc.dを試してみたがうまくいかない(良く分からない)ので、/etc/init以下のファイルの拡張子を.conf以外にしてすべてのランレベルで起動しなくなるようにする。
redhat系のchkconfigとは設定方法が違っていて良く分からない


$ cd /etc/init
$ sudo mv network-manager.conf network-manager.conf.bak

OSを再起動して、ping等で通信できればOK。