はじめに
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として機能し、設定したアクセスポイントへ接続します。