[Linux] 手動で一から無線LANを有効化

Linux の plain な環境から Wi-Fi を有効化するのに必要なことの覚書です。Wi-Fi ドライバはあるけどDistribution はないという状態なので、ここでは必要なツール類はソースからクロスコンパイルします。通常は buildroot や yocto などを使用することをお勧めします。

Kernel 再構築

Kconfig にて CONFIG_WIRELESS と CONFIG_CFG80211_WEXT を有効化します。

[*] Networking support  --->
    [*] Wireless  --->
        <*> cfg80211 - wireless configuration API
        [*]   cfg80211 wireless extensions compatibility

User Tools build

userland のクロスコンパイルに必要なホスト環境は整えておきます(下記以外に必要なパッケージがあるかもしれません)。

sudo apt install gcc-arch64-linux-gnu libc6-arm64-cross libc6-dev-arm64-cross

wireless_tools

Wi-Fi 機能が正しく動作しているかを確認するために、wireless_tools を導入します。

まずサイトからアーカイブを取得し、展開します。

wget https://hewlettpackard.github.io/wireless-tools/wireless_tools.29.tar.gz
tar zxf wireless_tools.29.tar.gz

クロスコンパイルには未対応なので Makefile を書き換えます。

## Compiler to use (modify this for cross compile).
-CC = gcc
+CC = $(CROSS_COMPILE)gcc
## Other tools you need to modify for cross compile (static lib only).
-AR = ar
-RANLIB = ranlib
+AR = $(CROSS_COMPILE)ar
+RANLIB = $(CROSS_COMPILE)ranlib

ビルドします。make のみで完了します。

cd wireless_tools.29; make

ビルドしたファイルを rootfs にコピーします。ここでは必要最小限のファイルのみ導入するため、ストレージかネットワークを経由してビルドしたバイナリをターゲットの以下の場所にコピーします。

install libiw.so.29 <rootfs>/usr/local/lib/
ln -s libiw.so.29 <rootfs>/usr/local/lib/libiw.so
install iwconfig iwlist <rootfs>/usr/local/sbin/

OpenSSL

後ほど導入する wpa_supplicant に必要な OpenSSL をビルドします。サイトからアーカイブを取得し、展開します。

wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
tar zxf openssl-1.1.1.tar.gz

ビルドします。今回は libcrypto と libssl が作れれば良いので最小限の設定にします。

cd openssl-1.1.1
./Configure linux-aarch64 shared
make -j8

ビルドしたファイルを rootfs にコピーします。

install libcrypto.so.1.1 <rootfs>/usr/local/lib/
ln -s libcrypto.so.1.1 <rootfs>/usr/local/lib/libcrypto.so
install libssl.so.1.1 <rootfs>/usr/local/lib/
ln -s libssl.so.1.1 <rootfs>/usr/local/lib/libssl.so

wpa_supplicant

サイトからアーカイブを取得し、展開します。

wget https://w1.fi/releases/wpa_supplicant-2.9.tar.gz
tar zxf wpa_supplicant-2.9.tar.gz

ビルドします。ここでは OpenSSL のディレクトリを参照するようにしておきます。

cd wpa_supplicant-2.9/wpa_supplicant
make mkconfig
make CC=aarch64-linux-gnu-gcc LDFLAGS=-L../../openssl-1.1.1

ビルドしたファイルを rootfs にコピーします。

install wpa_supplicant wpa_passphrase <rootfs>/usr/local/sbin/

wpa_supplicant.conf の作成

wpa_supplicant に必要な設定ファイルを作成します。ここからはターゲット上で実施します。"<SSID>" と"<PASSPHRASE>" は接続するAP の情報を指定します。

wpa_passphrase <SSID> <PASSPHRASE> | tee -a /etc/wpa_supplicant/wpa_supplicant.conf

ターゲットでの Wi-Fi 有効化

Wi-Fi インターフェースを有効化します。ここでは Wi-Fi インターフェース名を "wlan0" としています。後で DHCP で IP アドレスを取得するため、この時点では IP アドレスは指定していません。

ifconfig wlan0 up

Wi-Fi ネットワークをスキャンして接続する SSID が見えているかどうかを確認します。

iwlist wlan0 list | grep ESSID

wpa_supplicant を起動します。

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

DHCP で IP アドレスを取得します。

dhclient wlan0

IP アドレスが得られたかどうかを確認します。

ifconfig wlan0

これで Wi-Fi への接続が完了します。


コメント

タイトルとURLをコピーしました