はじめに
Armadillo-640を無線LANのアクセスポイントとして使用するために、市販のUSBドングルを使う方法をご案内します。
Armadillo-640はWLANオプションモジュールを使用することでWLANのSTA(ステーション)/AP(アクセスポイント)それぞれとして使用することが出来ますが、下記のようなケースでは別途USBドングルを使用するのが良いかと思います。
- 拡張インタフェースをそれ以外の機能のために使用したい場合
- 5GHzのWLAN通信を使用したい場合
過去にも下記の記事で5GHz対応のUSBドングルを使用する方法をご紹介しておりますが、
Armadillo-640:USBドングルの5GHz対応無線LAN(WI-U2-433DHP、WI-U2-433DMS)を使う
この記事ではAPとして使用出来るUSBドングルをご紹介します。
使用したUSBドングル
この記事で動作を確認したUSBドングルとそのドングルを使用するために必要なデバイスドライバは下記の通りです。
- ELECOM WDC-150SU2MBK : Realtek RTL8188EU Wireless Lan Driver for Linux
- TP-LINK Archer T9UH : rtl8814au
概要
USBドングルのデバイスドライバを組み込み、hostapdとdnsmasqを使ってソフトウェアアクセスポイントを構築します。
手順説明
以下、具体的な手順を説明します。
動作を確認するだけであれば、パッケージのインストールや設定ファイルの変更等を直接Armadillo上で実行することでより簡略化可能ですが、製品を量産される際にはこの手順を参考にしてください。
以下の順序で行います。
- カーネルコンフィギュレーションの変更
- デバイスドライバのクロスビルド
- ルートファイルシステムの構築
- インストールディスク作成
カーネルのコンフィギュレーション変更・ビルド
USBドングルのデバイスドライバをカーネルモジュールとしてビルドして読み込ませるため、
Linuxカーネルのコンフィギュレーションを変更してEnable loadable module supportを有効にしておく必要があります。
*initramfs アーカイブへのシンボリックリンク作成やデフォルトコンフィギュレーションの反映をまだ行っていない場合は下記を参考に実施しておいてください。
10.2. Linuxカーネルをビルドする
[PC:~]# cd 「Linuxカーネルのソースコードディレクトリ」 [PC:~]# make ARCH=arm menuconfig Kernel Configuration [*] Enable loadable module support
デバイスドライバのクロスビルド
USBドングルのデバイスドライバを、Armadillo-640で実行出来るようにクロスビルドします。
[ATDE ~]$ git clone https://github.com/puuuuh/rtl8814au.git [ATDE ~]$ cd rtl8814au 対象のアーキテクチャをarm、クロスツールチェインにarm-linux-gnueabihf- を指定し、カーネルソースコードのファイルパスを指定しておきます [ATDE ~]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf KSRC=[Linuxカーネルソースコードのファイルパス] [ATDE ~]$ ls 8814au.ko 8814au.ko [ATDE ~]$ git clone https://github.com/ivanovborislav/rtl8188eu.git [ATDE ~]$ cd rtl8188eu [ATDE ~]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf KSRC=[Linuxカーネルソースコードのファイルパス] [ATDE ~]$ ls 8188eu.ko 8188eu.ko
ルートファイルシステムの構築
at-debian-builderを使ってルートファイルシステムを構築します。
モジュールインストール
カーネルモジュールをルートファイルシステムに配置します。
[ATDE ~]$ cd [Linuxカーネルのソースコードディレクトリ] [ATDE ~]$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf INSTALL_MOD_PATH="[at-debian-builder]/a600_resources/resources/" modules_install [ATDE ~]$ cd [at-debian-builder]
カーネルモジュール配置
[ATDE ~]$ mkdir a600_resources/resources/lib/modules/[linuxカーネルバージョン]/extra [ATDE ~]$ cp [カーネルモジュールファイル] a600_resources/resources/lib/modules/[linuxカーネルバージョン]/extra/
インストールパッケージ設定
packagesを編集してアクセスポイントとDHCPサーバとして必要なパッケージをインストールしておいてください。
[ATDE ~]$ vi [at-debian-builder]/a600_resources/resources/packages 末尾に以下を追加 wireless-tools dnsmasq hostapd
ネットワークインタフェース設定
/etc/network/interfacesファイルを設定します。
[ATDE ~]$ vi [at-debian-builder]/a600_resources/resources/interfaces 末尾に以下を追加 auto wlan0 up iface wlan0 inet static
udevルールを設定
USBドングルのインターフェース名がwlan0となるようにudevルールを設定
[ATDE ~]$ mkdir [at-debian-builder]/a600_resources/etc [ATDE ~]$ mkdir [at-debian-builder]/a600_resources/etc/udev [ATDE ~]$ mkdir [at-debian-builder]/a600_resources/etc/udev/rules.d [ATDE ~]$ vi [at-debian-builder]/a600_resources/etc/udev/rules.d/70-persistent-net.rules SUBSYSTEM=="net",ACTION=="add",ATTRS{idVendor}=="056e", ATTRS{idProduct}=="4008",NAME="wlan0" SUBSYSTEM=="net",ACTION=="add",ATTRS{idVendor}=="2357", ATTRS{idProduct}=="0106",NAME="wlan0"
hostapdのコンフィグファイル作成
hostapdのアクセスポイント設定ファイルを作成します。
[ATDE ~]$ mkdir [at-debian-builder]/a600_resources/etc/hostapd [ATDE ~]$ vi [at-debian-builder]/a600_resources/etc/hostapd/hostapd.conf 任意の内容を設定してください。以下設定例です。 interface=wlan0 driver=nl80211 ssid=testssid hw_mode=g channel=10 ieee80211n=1 wpa=2 wpa_passphrase=testpassphrase wpa_key_mgmt=WPA-PSK rsn_pairwise=CCMP
システム起動時のスクリプト設定
システム起動時にアクセスポイントが起動するよう以下の通りに設定してます。
[ATDE ~]$ vi [at-debian-builder]/a600_resources/resources/rc.local 末尾に以下を追加 ip link set wlan0 down ip addr flush dev wlan0 ip link set wlan0 up ip addr add 192.168.100.1/24 dev wlan0 hostapd /etc/hostapd.conf
dnsmasq設定
dnsmasqの設定を行います。パッケージインストール時に生成される設定ファイルに追記する必要があるため、
追記部分を別ファイルに作成しておき、後ほどスクリプトでマージさせます。
[ATDE ~]$ vi [at-debian-builder]/a600_resources/resources/dns.txt 任意の設定を行ってください。以下設定例です。 listen-address=127.0.0.1, 192.168.100.1 interface=wlan0 dhcp-range=192.168.100.100, 192.168.100.254, 12h
depmodコマンド実行
ルートファイルシステムをビルドする際にdepmodコマンドを実行することで追加したカーネルモジュールを読み込むよう設定します。
また、その他にルートファイルシステムビルド時に実行すべき項目をスクリプトに追加しておきます。
[ATDE ~]$ vi [at-debian-builder]/a600_resources/resources/fixup 末尾に以下を追加する cp -r /resources/lib/modules /lib/ cat /resources/dns.txt >> /etc/dnsmasq.conf depmod 4.14-at54
ビルド
下記のマニュアルを参考にルートファイルシステムのビルドを行ってください。
10.3. Debian GNU/Linuxルートファイルシステムをビルドする
書込み・動作確認
インストールディスク作成・実行
ビルドしたLinuxカーネル・ルートファイルシステムをArmadillo-640に書込み、動作を確認します。
インストールディスクを使って書き込むのが最も効率的です。
以下を参考にインストールディスクを作成し、書き込みを行ってください。
8.3. イメージファイルの更新(Armadillo-600シリーズ向け)
動作確認
Armadillo-640にUSBドングルを挿入した状態で電源を投入すると、システム起動後アクセスポイントが動作します。
他の機器から設定したSSIDに接続出来るかを確認してみて下さい。
おまけ
APではなくSTAとしてどうさせたい場合も、基本的には上記手順を行いつつ、ルートファイルシステム構築時に下記の点を変更しておいてください。
パッケージ
アクセスポイントとの接続に使用するため、wpa_supplicantをインストールしておく必要があります。
[ATDE ~]$ vi [at-debian-builder]/a600_resources/resources/packages 末尾に以下を追加 wpasupplicant
wpa_supplicantのコンフィグレーションファイル作成
wpa_supplicantでAPに接続するためのSSIDやパスワード等の設定をファイルに出力しておきます。
ファイル出力の際にパスワードが暗号化されるので、平文のパスワードがファイルに残さないことが可能です。
[ATDE ~]$ mkdir [at-debbian-builder]/a600_resources/etc/wpa_supplicant/ [ATDE ~]$ wpa_passphrase [SSID] [PASSWORD] > [at-debbian-builder]/a600_resources/etc/wpa_supplicant/wpa_supplicant.conf 出力内容を確認する [ATDE ~]$ cat [at-debbian-builder]/a600_resources/etc/wpa_supplicant/wpa_supplicant.conf network={ ssid=[SSID] #psk=[PASSWORD] psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx } 以下のように編集する [ATDE ~]$ vi [at-debbian-builder]/a600_resources/etc/wpa_supplicant/wpa_supplicant.conf network={ ssid=[SSID] proto=WPA key_mgmt=WPA-PSK pairwise=CCMP group=CCMP psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }
ネットワークインタフェース設定
/etc/network/interfacesファイルを設定します。
[ATDE ~]$ vi [at-debian-builder]/a600_resources/resources/interfaces wlan0関連の部分を下記の通りに変更する auto wlan0 up iface wlan0 inet dhcp wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
起動時のスクリプト削除
上記アクセスポイント構築手順時にrc.localファイルに加えた変更箇所を全て削除しておきます。
以上を反映した上で、再度ルートファイルシステムをビルド、書込みを行うと、起動直後からSTAとして機能し、設定したアクセスポイントへ接続します。