😺

jetson nanoでWiFiドングルElecom WDC-433DU2HBK を使う

2022/05/15に公開

先日の記事、jetson nano でWiFiを使うで使ったWiFiドングルと同じチップのはずのElecom WDC-433DU2HBKは、挿してもドライバーが入りません。
これは少しの修正でいけるはずなので、やってみました。

ベンダID,プロダクトIDの確認

$ lsusb |grep Elecom
Bus 001 Device 005: ID 056e:4007 Elecom Co., Ltd WDC-433DU2HBK

ベンダID,プロダクトIDの追加

認識されるドングルは以下のようなベンダID,プロダクトIDなので、この数値をセットしている箇所を探します。

Bus 001 Device 004: ID 0bda:0811 Realtek Semiconductor Corp. 

さきほどの記事、jetson nanoのカーネルをソースからビルドするの環境で

Linux_for_Tegra/source/public/kernel/nvidia/drivers/net/wireless/realtek/rtl8821au/os_dep/linux

$ diff -u usb_intf.c{.org,}
--- usb_intf.c.org	2022-02-16 06:20:27.000000000 +0000
+++ usb_intf.c	2022-05-15 06:57:39.226562297 +0000
@@ -192,6 +192,7 @@
 	{USB_DEVICE(0x0E66, 0x0023), .driver_info = RTL8821}, /* HAWKING - Edimax */
 	{USB_DEVICE(0x056E, 0x400E) , .driver_info = RTL8821}, /* ELECOM -  ELECOM */
 	{USB_DEVICE(0x056E, 0x400F) , .driver_info = RTL8821}, /* ELECOM -  ELECOM */
+	{USB_DEVICE(0x056E, 0x4007) , .driver_info = RTL8821}, /* ELECOM -  WDC-433DU2HBK */
 	{USB_DEVICE(0x20f4, 0x804b), .driver_info = RTL8821}, /* TRENDnet  */
 	{USB_DEVICE(0x2357, 0x0120), .driver_info = RTL8821}, /* TP-Link - Archer T2U Plus */
 	{USB_DEVICE(0x2357, 0x011E), .driver_info = RTL8821}, /* TP-Link - Archer T2U Nano */

注意 : rtl8812au, rtl8814au, rtl8821au, rtl8821cu, rtl8822buと似たような構成のディレクトリがありますが、修正するのはrtl8821auのものです。私は最初にこれを取り違えてハマりました。

カーネルモジュールをビルド

TOPDIRにビルドディテクトリが入っているものとして

$ export CROSS_COMPILE=$(pwd)/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
$ export LOCALVERSION=-tegra
$ cd Linux_for_Tegra/source/public/kernel/kernel-4.9/
$ TEGRA_KERNEL_OUT=$TOPDIR/t4l-kernel
$ nohup make ARCH=arm64 O=$TEGRA_KERNEL_OUT -j`nproc` modules &

drivers/net/wireless/realtek/rtl8821au/rtl8821au.koが再作成されました。
これをjetson nanoにコピーします。

カーネルモジュールのインストール

jetson nanoで

$ cd /lib/modules/4.9.253-tegra/kernel/drivers/net/wireless/realtek/rtl8821au/
$ sudo mv rtl8821au.ko{,.old}
$ sudo cp ~/rtl8821au.ko .
$ sudo depmod
$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/5p, 480M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 3, If 0, Class=Vendor Specific Class, Driver=, 480M
        |__ Port 4: Dev 4, If 3, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 4: Dev 4, If 1, Class=Video, Driver=uvcvideo, 480M
        |__ Port 4: Dev 4, If 2, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 4: Dev 4, If 0, Class=Video, Driver=uvcvideo, 480M

WiFiドングルを再度抜き差しする。

$ lsusb -t
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 5000M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/5p, 480M
    |__ Port 2: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 1: Dev 6, If 0, Class=Vendor Specific Class, Driver=rtl8821au, 480M
        |__ Port 4: Dev 5, If 3, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 4: Dev 5, If 1, Class=Video, Driver=uvcvideo, 480M
        |__ Port 4: Dev 5, If 2, Class=Audio, Driver=snd-usb-audio, 480M
        |__ Port 4: Dev 5, If 0, Class=Video, Driver=uvcvideo, 480M

今度はDriver=rtl8821auになりました。

あとは以下の記事の通りでWiFiが使えるようになります。
jetson nano でWiFiを使う

Discussion