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 への接続が完了します。
コメント