最終更新:2024-12-03 (火) 03:27:15 (5d)
Module LLM/無線LAN
Top / Module LLM / 無線LAN
Module LLM本体のOTGポート(Type-C)でUSB/無線LANアダプタを使いたい話
準備
Ubuntu 22.04のPCを準備 (x64)
必要なパッケージをいれる
Module LLM/Linuxカーネル
- https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/linux/llm/linux-4.19.125-head.tar.gz
- を~/linux-4.19.125-headに展開 (Module.symversを参照するため)
Module LLMの初期状態
ドライバ
- USB/無線LANアダプタのドライバが何も有効になっていない
Module LLM/.config
- USB/無線LANアダプタのドライバが全て無効になっている
- CONFIG_MAC80211が無効になっている
- 最近の無線LAN/チップのドライバで使われている機能
- 使えるようにするには依存している設定がいろいろあって試しにCONFIG_RTL8XXXUを有効化(=m)してビルドしていろいろモジュール入れても動かなかった
CONFIG_WIRELESS=y CONFIG_WEXT_CORE=y CONFIG_WEXT_PROC=y CONFIG_CFG80211=y CONFIG_CFG80211_WEXT=y # CONFIG_MAC80211 is not set
Module LLM/Ubuntu/パッケージ
- wpa_supplicantとかはパッケージは入ってないけどコマンドは最初から存在していた
関連するカーネルの設定
CONFIG_MAC80211 (mac80211)
- a framework which driver developers can use to write drivers for SoftMAC wireless devices.
- SoftMACのデバイスでMACのMLME処理を行うモジュール
- 最近になってもFullMACのチップを作っているのはBroadcomとMarvellのみらしい (2017)
CONFIG_CFG80211 (cfg80211)
- Linux 802.11 configuration API
- 古いWireless-Extensionsを置き換えるAPI (cfg80211 subsystem)
成功例
- Module LLM/.configでCONFIG_MAC80211とかが無効になってるのでそれでも使えそうなドライバを探してビルドしたら動いた
- 古いFullMACのチップ+CONFIG_MAC80211 (SoftMAC)に依存しないドライバなら動くのでは・・?という予想
動いたチップ: RTL8188EUS
- デバイス
発売 メーカー 型番 2016 TP-Link TL-WN725N V2 これで動いた 2014 エレコム WDC-150SU2M 未確認
ドライバの選定
メインラインのRTL8188EUSのドライバ
依存する設定 (Module LLM/.configでの状況) Linux 6.3以降 rtl8xxxu (SoftMAC driver)でも動くのでr8188eu?を削除 CONFIG_MAC80211 (not set) Linux 5.15~Linux 6.2 https://github.com/lwfinger/rtl8188eu (ステージングドライバを追加した人のリポジトリ)をdrivers/staging/r8188eu?に取り込んで(r8188eu?)に名称変更。古いステージングドライバは削除 CONFIG_CFG80211 (y)
CONFIG_WIRELESS_EXT (not set)
CONFIG_WEXT_PRIV (not set)
CONFIG_LIB80211 (not set)Linux 3.12~Linux 5.14 drivers/staging/rtl8188eu? (rtl8188eu)
初期のステージングドライバCONFIG_CFG80211 (y)
CONFIG_WIRELESS_EXT (not set)
CONFIG_WEXT_PRIV (not set)
CONFIG_LIB80211 (not set)
GitHubのrtl8188eu
- https://github.com/lwfinger/rtl8188eu
- ファイル名: 8188eu.ko?
- メインラインに取り込まれたあとrtl8xxxu(SoftMAC)が同じデバイス群に対応したので削除された
- Linux 5.17くらいまではツリー外ドライバとしてビルドすれば使える
- This repo is maintained to allow older kernels to build the driver and to provide newer drivers that those merged into the kernel.
ブランチ 依存する設定 (Module LLM/.configでの状況) master CONFIG_WIRELESS_EXT (not set)
CONFIG_WEXT_PRIV (not set)v5.2.2.4 CONFIG_CFG80211 (y)
GitHubのドライバのビルド
- masterはCONFIG_WEXT_PRIVが有効になっていないとビルドできないので古いブランチを使う
- https://github.com/lwfinger/rtl8188eu/issues/330
- if you want to use the master branch as it requires CONFIG_WIRELESS_EXT.
- If you switch to branch v5.2.2.4, then having wireless and cfg80211 will be sufficient.
対応デバイス
- https://github.com/lwfinger/rtl8188eu/blob/master/os_dep/usb_intf.c
- を見ると対応デバイスはRTL8188EUS/RTL8188ETV?/RTL8188FU?あたりっぽい
ビルド手順
git clone https://github.com/lwfinger/rtl8188eu cd rtl8812au/ git checkout origin/v5.2.2.4 -b v5.2.2.4 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -C ~/linux-4.19.125-head/ M=~/rtl8188eu modules
Module LLMにコピー
- Module LLM本体のUSBをPCにつないでadbで転送
adb push 8188eu.ko /lib/modules/4.19.125/ adb push rtl8188eufw.bin /lib/firmware/rtlwifi/
自動ロード
wpa_supplicant.confの設定
- /etc/wpa_supplicant.confを用意
ctrl_interface=/var/run/wpa_supplicant update_config=1 pmf=1 sae_pwe=2 network={ ssid="SSID Here" psk="Password Here" key_mgmt=WPA-PSK SAE ieee80211w=1 }
wpa_supplicantを起動 (とりあえず手動)
- この辺はパッケージ入れてsystemdで起動するなりしたほうがよさそう
wpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf
- 繋がったらバックグラウンドモードで実行
wpa_supplicant -i wlan0 -B -c /etc/wpa_supplicant.conf
参考になりそうなスクリプト
- Module LLM/Ubuntu/soc/scripts/usb-wifi.shにAxeraのBSPに入ってたっぽいwpa_supplicantの設定スクリプトが残っているので参考になりそう
その他
失敗1
- 手元にあったArcher T2U Nanoを動かそうとして失敗
- このチップ(RTL8812AU)向けのドライバはメインライン化されてない模様
チップ: RTL8812AU
- デバイス
ドライバ
- https://github.com/gnab/rtl8812au/
- をビルドして入れてみたがwlan0は認識しているがwpa_supplicantでエラーになった
ビルド
- git clone https://github.com/gnab/rtl8812au/
- cd rtl8812au/
- Makefileを編集
diff --git a/Makefile b/Makefile index 7c2cdc2..a03467b 100644 --- a/Makefile +++ b/Makefile @@ -54,14 +54,14 @@ CONFIG_EXT_CLK = n CONFIG_FTP_PROTECT = n CONFIG_WOWLAN = n -CONFIG_PLATFORM_I386_PC = y +CONFIG_PLATFORM_I386_PC = n CONFIG_PLATFORM_ANDROID_X86 = n CONFIG_PLATFORM_JB_X86 = n CONFIG_PLATFORM_ARM_S3C2K4 = n CONFIG_PLATFORM_ARM_PXA2XX = n CONFIG_PLATFORM_ARM_S3C6K4 = n CONFIG_PLATFORM_ARM_RPI = n -CONFIG_PLATFORM_ARM_RPI_64 = n +CONFIG_PLATFORM_ARM_RPI_64 = y CONFIG_PLATFORM_MIPS_RMI = n CONFIG_PLATFORM_RTD2880B = n CONFIG_PLATFORM_MIPS_AR9132 = n @@ -751,8 +751,10 @@ ifeq ($(CONFIG_PLATFORM_ARM_RPI_64), y) EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN ARCH := arm64 CROSS_COMPILE := -KVER ?= $(shell uname -r) -KSRC ?= /lib/modules/$(KVER)/build +# KVER ?= $(shell uname -r) +# KSRC ?= /lib/modules/$(KVER)/build +KVER := 4.19.125 +KSRC := ~/linux-4.19.125-head/ MODDESTDIR := /lib/modules/$(KVER)/kernel/drivers/net/wireless/ endif
- クロスコンパイル
- make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
- できたファイル
/rtl8812au/8812au.ko
自動ロード
- Linux/etc/modulesに追記
8812au
動かない
- wlan0は認識しているが、wpa_supplicantが
nl80211: Driver does not support authentication/association or connect commands
- というエラーを出して動かない
- https://w1.fi/cgit/hostap/tree/src/drivers/driver_nl80211_capa.c#n1217
- info->auth_supported == fasle && info->connect_supported == falseぽいので認証とか接続周りが上手く有効化できてないっぽい
- -D wextもダメ
- iw devでも認識しない
失敗2
- 最近のRealtekのチップはCONFIG_RTL8XXXUでわりと対応してるぽいので関連するモジュールをビルドして入れてみようとしたけど失敗
- Linux 4.19の時点での対応デバイス
CONFIG_RTL8XXXU=mとしたときの差分
- 依存でいろんなモジュールが必要になってビルドして入れてみたけど動かなかった
make ARCH=arm64 xconfig
- CONFIG_MAC80211=m
- CONFIG_MAC80211_HAS_RC?=y
- CONFIG_MAC80211_RC_MINSTREL?=y
- CONFIG_MAC80211_RC_MINSTREL_HT?=y
- CONFIG_MAC80211_RC_DEFAULT_MINSTREL?=y
- CONFIG_MAC80211_RC_DEFAULT?="minstrel_ht"
- CONFIG_WLAN=y
- CONFIG_WLAN_VENDOR_ADMTEK?=y
- CONFIG_WLAN_VENDOR_ATH?=y
- CONFIG_WLAN_VENDOR_ATMEL?=y
- CONFIG_WLAN_VENDOR_BROADCOM?=y
- CONFIG_WLAN_VENDOR_CISCO?=y
- CONFIG_WLAN_VENDOR_INTEL?=y
- CONFIG_WLAN_VENDOR_INTERSIL?=y
- CONFIG_WLAN_VENDOR_MARVELL?=y
- CONFIG_WLAN_VENDOR_MEDIATEK?=y
- CONFIG_WLAN_VENDOR_RALINK?=y
- CONFIG_WLAN_VENDOR_REALTEK=y
- CONFIG_RTL_CARDS?=m
- CONFIG_RTL8XXXU=m
- CONFIG_WLAN_VENDOR_RSI?=y
- CONFIG_WLAN_VENDOR_ST?=y
- CONFIG_WLAN_VENDOR_TI?=y
- CONFIG_WLAN_VENDOR_ZYDAS?=y
- CONFIG_WLAN_VENDOR_QUANTENNA?=y
- CONFIG_CRYPTO_GF128MUL?=m
- CONFIG_CRYPTO_CCM?=m
- CONFIG_CRYPTO_GCM?=m
- CONFIG_CRYPTO_SEQIV?=m
- CONFIG_CRYPTO_CTR?=m
- CONFIG_CRYPTO_CMAC?=m
- CONFIG_CRYPTO_GHASH?=m
- CONFIG_CRYPTO_ARC4?=m