ひこぽんのーと

覚書と雑記です。

Raspberry pi Model BでGW-900Dを使うのこと

RaspbianにはPlanexの無線Lan子機 GW-900Dのドライバは用意されていない。
幸いドライバはrtl8812auのオープンソースドライバが利用でき、
ビルドさえすればLinuxでも動作する。

Web上にはこの手の手順がかなりあるものの、
持っているRaspberry piが初期型のためか、
導入にかなり手こずったので自分なりの手順を書いておく。
以下の手順では有線Lanでインターネットに接続している事が前提となる。

rtl8812auドライバのインストール

Raspbianをインストールする

手っ取り早くNOOBSでインストールした。(JESSIE)

OSの最新化

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

rootパスワードの設定

$ sudo passwd root

ドライバのビルドに必要なもののインストール

rpi-sourceのインストール

Raspbianのソースを取得するためにこのツールをインストールする
$ sudo wget https://raw.githubusercontent.com/notro/rpi-source/master/rpi-source -O /usr/bin/rpi-source

rpi-sourceの実行で必要なもののインストール

sudo apt-get install bc
sudo apt-get install libncurses5-dev

rpi-sourceの実行(カーネルソースのダウンロード)

$ sudo chmod +x /usr/bin/rpi-source
$ sudo /usr/bin/rpi-source -q --tag-update
$ sudo rpi-source --skip-gcc (gccのバージョンで弾かれたため)

/usr/srcにリンクを貼る

ln -s /root/linux-XXXXXX /usr/src/`uname -r`

rtl8812auドライバのダウンロード

保存場所へ適時移動してからダウンロードを実行
git clone https://github.com/gnab/rtl8812au.git

ドライバのビルド

ダウンロードしたドライバのディレクトリに移動
Makefileの編集。

ターゲットプラットフォームをPCからARM RPIに変更する。
...
CONFIG_PLATFORM_I386_PC = n
...
CONFIG_PLATFORM_ARM_RPI = y
...

ビルド

変更後、ビルド。
make

ドライバファイルの設置&カーネルモジュールの依存情報の更新

cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
depmod

再起動

sudo reboot

まだまだこれから

dmesg でドライバがロードされているか確認。

ネットワークインターフェイス名の固定化

なんだか知らないがネットワークインターフェイス名(eth0とかのアレ)が、
再起動するたびにコロコロ変更されるので、これを固定化する。

ネットワークインターフェイス名の調査

ifconfigとiwconfigを使って、現在のネットワークインターフェイス名を調べる。

MACアドレスNICのドライバ名の調査。

MACアドレスはifconfigで表示される、etherの値。
NICのドライバ名はethtoolで調べることができる。
ethtool -i ネットワークインターフェイス

ネットワークインターフェイス名の設定

/etc/udev/rule.d/70-persistent-net.rules を作成
ファイルに以下の要領で定義を追加する。
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="(ドライバ名)", ATTR{address}=="AA:BB:CC:DD:EE:FF(MACアドレス)", NAME="eth0(インターフェイス名)"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="(ドライバ名)", ATTR{address}=="AA:BB:CC:DD:EE:FF(MACアドレス)", NAME="wlan0(インターフェイス名)"

書式はここ参照。
NIC の名前(eth0, eth1, wlan0, ath0,...)を変更

再起動

sudo reboot

ifconfigで確認

ネットワークンターフェイス名が指定通りならOK。

wifiの有効化

アクセスポイントのscan

sudo iwlist wlan0 scan

wpa_supplicant.confの設定

sudo wpa_passphrase (SSID) (パスワード(平文)) >> /etc/wpa_supplicant/wpa_supplicant.conf

wpa_supplicantの起動

sudo wpa_supplicant -Dwext -iwlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf

接続の確認

ifconfigでIPアドレスが割り当てられていることを確認

wifi自動起動

システム起動時にwlan0が有効になるようにsystemdに設定する。

# systemctl enable wpa_supplicant@wlan0(インターフェイス名)
Created symlink /etc/systemd/system/multi-user.target.wants/wpa_supplicant@wlan0.service → /lib/systemd/system/wpa_supplicant@.service.

wlan0用のwpa_supplicant.confを作成する。

sudo cp /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant-wlan0.conf

再起動

ifconfigでwifiが自動接続されていることを確認する。

IPアドレス固定設定

検索すると/etc/network/interfacesを編集するってのがよく見つかるけれど、
その方法はもう古い。
JESSIEでは/etc/dhcpcd.confに設定を記述する方式に変わっている。
ちなみにUbuntu 16.04だったらnmtuiを使って設定する。

/etc/dhcpcd.confを編集する。

interface eth0
static ip_address=192.168.10.32/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1

interface wlan0
static ip_address=192.168.10.33/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1