📝

【失敗事例】M5Stack ModuleLLMでUSB-WiFiドングルを使用する。

2024/11/18に公開

①使用した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用のデバイスドライバのソースは下記です。

https://github.com/gnab/rtl8812au

できあがった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