【失敗事例】M5Stack ModuleLLMでUSB-WiFiドングルを使用する。
①使用したUSB-WiFiアダプタ
エレコム WDC-433DU2HBK(Realtek rtl8811au)
TP-Link Archer T2U Nano (Realtek rtl8811au)
②ラスパイ上でカーネルビルド
ラズパイ上で、ModuleLLMのカーネルとWiFiアダプタのドライバをビルドします。
microSDの準備
ラズパイとModuleLLMでファイルをやりとりするためにmicroSDを用意してext4でフォーマットしましょう。
カーネルのビルド
準備
フォルダはModuleLLMを作業フォルダにしています。参考:cinimlさんのgist
sudo apt install make gcc libssl-dev libncurses-dev git dpkg-dev flex bison dwarves libelf-dev
sudo apt install gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu
mkdir ModuleLLM
cd ModuleLLM
curl -OL https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/linux/llm/linux-4.19.125-head.tar.gz
curl -OL https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.125.tar.gz
tar xf linux-4.19.125-head.tar.gz
tar xf linux-4.19.125.tar.gz
cd linux-4.19.125
cp ../linux-4.19.125-head/.config .
make menuconfig # お好きな設定をどうぞ
make menuconfigで設定する項目
USBのWiress関連と、使用するチップのチェックをしておきます。
カーネルのビルド
下記のコマンドで、ビルドすると上位フォルダにdebファイルが4つ生成されます。
nice make -j4 bindeb-pkg
microSD上にコピーするファイル
linux-headers-4.19.125_4.19.125-5_arm64.deb
linux-image-4.19.125-dbg_4.19.125-5_arm64.deb
linux-libc-dev_4.19.125-5_arm64.deb
linux-image-4.19.125_4.19.125-5_arm64.deb
デバイスドライバのビルド
作成中。。。
まあ、ここまでできる人は、Linuxのデバイスドライバのビルドはできるでしょうということで後回しです('ω')
今回使用した、WDC-433DU2HBK(販売終了)とTP-Link ArcherT2U Nano用のデバイスドライバのソースは下記です。
できあがった8812au.ko をmicroSDにコピー
デバイスドライバが出来た場合は8812.koをmicroSDにコピーしてください。
③ModuleLLM上での作業
apt updateする。
apt update
カーネルのインストール
microSDを挿入して、下記のコマンドを実行する。
4.19.125以降の数字は異なる場合があります。
dpkg -i linux-headers-4.19.125_4.19.125-5_arm64.deb
dpkg -i linux-image-4.19.125-dbg_4.19.125-5_arm64.deb
dpkg -i linux-libc-dev_4.19.125-5_arm64.deb
dpkg -i linux-image-4.19.125_4.19.125-5_arm64.deb
ドライバ8812au.koのコピー
microSDから下記のように8812au.koファイルをコピーする。
mkdir -p /lib/modules/4.19.125/kernel/drivers/net/wireless
cp 8812au.ko /lib/modules/4.19.125/kernel/drivers/net/wireless/
depmod
lsmodで8812auがロードされていることを確認する。
/etc/network/interfaces の編集
編集例、アドレス等は自身の環境に合わせてください。
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source /etc/network/interfaces.d/*
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1 8.8.8.8
#iface eth0 inet dhcp
auto wlan0
iface wlan0 inet static
address 192.168.0.101
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1 8.8.8.8
wpa_supplicantの設定
パッケージのインストール
apt install wpasupplicant
/etc/wpa_supplicant.confの編集
YOUR_SSID, YOUR_PASSWORDは自分の環境に合わせて書き換える。
ctrl_interface=/var/run/wpa_supplicant
update_config=1
pmf=1
network={
ssid="YOUR_SSID"
psk="YOUR_PASSWORD"
}
/usr/lib/systemd/system/wpa_supplicant.serviceの編集
下記のようにExecStartの行を書き換える。
[Unit]
Description=WPA supplicant
Before=network.target
After=dbus.service
Wants=network.target
IgnoreOnIsolate=true
[Service]
Type=dbus
BusName=fi.w1.wpa_supplicant1
ExecStart=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant -c /etc/wpa_supplicant.conf
ExecReload=/bin/kill -HUP $MAINPID
[Install]
WantedBy=multi-user.target
Alias=dbus-fi.w1.wpa_supplicant1.service
wpa_supplicantサービスを再起動
systemctl daemon-reload
systemctl restart wpa_supplicant.service
ModuleLLMの再起動
再起動すると、wlan0のIPアドレスが表示されるはずです。
ip a
Discussion