先日購入した11acなWiFiドングル、WD-4510ACをLuckfoxのbuildrootで使えるようにカーネルモジュールを組み込んでみた。最初はTOKAIZ TWA-001を使おうと思ったけどusb_modeswitchがLuckfoxのbuildrootで簡単に有効にできそうだったので、Driver FreeタイプのWiFiドングルでも大丈夫そう。どっちも同じカーネルモジュールで行けるのでWD-4510ACができればTWA-001も簡単に動きそうだし。
RTL8821CUのカーネルモジュールは何種類かあったんだけど、ラズパイ3Bに組み込んでみたやつは途中まではビルドできるんだけど、cfg80211関連のエラーが出て進まなかったのでrtw88を使ってみた。
実はrtw88はLuckfox用のカーネルの中に組み込まれているんだけどrtl8821cuが含まれていないバージョンだった。なので新しいバージョンに置き換えてビルドしてみることに。
Ubuntu上でLuckfoxのSDKの中のファイルを差し替える。
$HOME/luckfox-pico/sysdrv/source/kernel/drivers/net/wireless/realtek/
の中のrtl88を適当な名前にリネームして、最新のrtw88を持ってくる。
そんでもってKconfigとMakefileを最新のLinuxカーネルのものに差し替える。
https://github.com/torvalds/linux/raw/refs/heads/master/drivers/net/wireless/realtek/rtw88/Makefile https://github.com/torvalds/linux/raw/refs/heads/master/drivers/net/wireless/realtek/rtw88/Kconfig
からダウンロードした。
cd $HOME/luckfox-pico/sysdrv/source/kernel cp ./arch/arm/configs/luckfox_rv1106_linux_defconfig .config make ARCH=arm menuconfig
menuconfigでrtw88を有効にしてrtl8821cuを有効にする。
このバージョンなら8821CUが選べる。表記は8821CUだけど8811CUも使えるようになる。あとはWirelessのEnable LED triggersを入れておくとmac80211からステータスLEDを制御してくれる。rtw88はこれを有効にしないとLEDが点灯しないので有効にした。make ARCH=arm savedefconfig cp defconfig ./arch/arm/configs/luckfox_rv1106_linux_defconfig
cd $HOME/luckfox-pico/sysdrv/source/buildroot/buildroot-2023.02.6/ make menuconfig
ここからusb_modeswitchを有効にする。
wpa_supplicantとiwとwireless toolsは前回有効にしているのでそのままでOK。usb_modeswitch_dataもいれると自動でudevを設定してくれるらしいけど今回は入れずに手動でRealtekのDriver Freeだけ設定してみることに。
make savedefconfig make
ビルド
cd $HOME/luckfox-pico ./build.sh lunch ./build.sh
Luckfoxに書き込み。
Luckfoxを起動してUSBをhostモードにしてOTGアダプタを繋いで再起動してlsusbすると
[root@luckfox ko]# lsusb Bus 001 Device 001: ID 1d6b:0002 Bus 001 Device 015: ID 0bda:1a2b Bus 002 Device 001: ID 1d6b:0003
となる。これはCDROMデバイスとして認識するID。
usb_modeswitch -KW -v 0bda -p 1a2b
すると
Bus 001 Device 001: ID 1d6b:0002 Bus 001 Device 016: ID 0bda:c820 Bus 002 Device 001: ID 1d6b:0003
となってRTL8821CUとして認識する。
cd /oem/usr/ko insmod cfg80211.ko insmod libarc4.ko insmod mac80211.ko insmod rtw88_core.ko insmod rtw88_usb.ko insmod rtw88_8821c.ko insmod rtw88_8821cu.ko insmod ctr.ko insmod ccm.ko insmod libaes.ko insmod aes_generic.ko
として先程組み込んだカーネルモジュールを読み込む。
dmesgすると
[ 450.921679] rtw_8821cu 1-1:1.2: Direct firmware load for rtw88/rtw8821c_fw.bin failed with error -2 [ 450.921716] rtw_8821cu 1-1:1.2: failed to request firmware [ 450.929119] rtw_8821cu 1-1:1.2: failed to load firmware [ 450.929143] rtw_8821cu 1-1:1.2: failed to setup chip efuse info [ 450.929153] rtw_8821cu 1-1:1.2: failed to setup chip information [ 450.929434] rtw_8821cu: probe of 1-1:1.2 failed with error -22 [ 450.929561] usbcore: registered new interface driver rtw_8821cu
ファームウェアいれるの忘れてた。
luckfoxの/lib/firmwareの中にrtw88というディレクトリを作成してrtw8821c_fw.binを入れる。firmwareはrtw88のfirmwareフォルダの中に入っている。
WiFiドングルを指し直してusb_modeswitchをやり直してやると
[ 552.795533] rtw_8821cu 1-1:1.2: Firmware version 24.5.0, H2C version 12
[ 552.936411] usbcore: registered new interface driver rtw_8821cu
ip link showしてみるとwlan0が増えてる。
認識した!
あとはrt3070のときと同様wpa_supplicantの設定をやればWiFiにつながった。
ちなみにLuckfox Pico Miniと合わせて全体の消費電流は80~100mAぐらいだった。
これでrtw88の最新版を有効にすることができたので今回はRTL8821CUを使えるようにできた。流石にRT3070のUSB WiFiアダプタは今どき売ってないだろうし。RTL8812BUを有効にしてビルドすればRTL8812BUなWI-U2-866DM/Nが使えたりするかもしれない。
Bluetoothを使わないのであればTWA-001(RTL8811CU)で十分かも。ちなみにTWA-001もちゃんと使えました。usb_modeswitchがいらないので便利。
次は8821CUのBluetoothを使えるようにしてみたい。
0 件のコメント:
コメントを投稿