mieki256's diary



2022/08/09(火) [n年前の日記]

#3 [ubuntu][linux] ELECOM WDC-300SU2SWH を Ubuntu 20.04 で利用

USB接続無線LAN子機 ELECOM WDC-300SU2SWH を Core2Duo E8400 + Ubuntu Linux 20.04 LTS 機に繋いでみた。

_300Mbps USB無線小型LANアダプタ - ELECOM WDC-300SU2SWH

しかし、認識してくれない。

この WDC-300SU2SWH を、Ubuntu Linux 20.04 LTSで利用したい。ちなみに、末尾の WH や BK は色を表しているようなので、型番としては WDC-300SU2S でいいのだろうか。

ググったところ、WDC-300SU2S に載っているチップは Realtek RTL8192CU らしい。

情報を調べる。 :

lsusb と打てば、ベンダーID(メーカー名を示す)とプロダクトID(製品型番を示す)は出てくる。
$ lsusb
Bus 001 Device 002: ID 056e:4009 Elecom Co., Ltd WDC-300SU2S
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
...

_Ubuntu 20.04でUSBのWiFiアダプタ(WDC-300SU2SBK)を認識させる方法 - Runner in the High

WDC-300SU2S のベンダIDとプロダクトIDは、056e:4009 のようだなと…。このIDを持っている機器を、どのドライバで動かせばいいのか、その情報を Linux 側で持っていないので、この機器が利用できない状態なのだろう。

ちなみに、lsusb -s 1:2 -v と打てば、もう少し情報が出てくる。-s X:Y は、X が Busナンバー、Y が Deviceナンバー。

_【 lsusb 】コマンド――USBデバイスの一覧と詳細情報を表示する:Linux基本コマンドTips(273) - @IT
$ lsusb --help
Usage: lsusb [options]...
List USB devices
  -v, --verbose
      Increase verbosity (show descriptors)
  -s [[bus]:][devnum]
      Show only devices with specified device and/or
      bus numbers (in decimal)
  -d vendor:[product]
      Show only devices with the specified vendor and
      product ID numbers (in hexadecimal)
  -D device
      Selects which device lsusb will examine
  -t, --tree
      Dump the physical USB device hierarchy as a tree
  -V, --version
      Show version of program
  -h, --help
      Show usage and help

$ lsusb -s 1:2 -v

Bus 001 Device 002: ID 056e:4009 Elecom Co., Ltd WDC-300SU2S
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x056e Elecom Co., Ltd
  idProduct          0x4009
  bcdDevice            2.00
  iManufacturer           1
  iProduct                2
  iSerial                 3
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x002e
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           4
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass    255 Vendor Specific Subclass
      bInterfaceProtocol    255 Vendor Specific Protocol
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x02  EP 2 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x03  EP 3 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1

rtl8xxxuをロード。 :

WDC-300SU2S のベンダIDとプロダクトID、056e:4009 を、ドライバ rtl8192cu の関連ファイルに追加してやれば自動認識(?)されるのだろうけど。しかし、rtl8192cu のドライバはとにかく不安定という話を目にした記憶があり…。

なので、Ubuntu 16.04時代は、改善されているドライバを github から入手して、ビルドして導入するのが妥当だったらしいけど。

_pvaret/rtl8192cu-fixes: Realtek 8192 chipset driver, ported to kernel 3.11.

ただ、そのドライバを配布してる上記ページでは、

「このドライバはもうメンテナンスされてないよ」
「kernel 4.4 から rtl8xxxu というドライバが使えるからそっちを利用すべき」
「若干いくつか設定しないといけないけどね」

みたいなことが書いてある。

であれば、まずは rtl8xxxu を導入できないか試してみよう。以下を参考に作業。

_Ubuntu 20.04でUSBのWiFiアダプタ(WDC-300SU2SBK)を認識させる方法 - Runner in the High
_Kali Linuxで無線LANアダプタ LAN-W150N/U2BK を使う | tarufulog
_wireless - Compile and install rtl8192cu driver - Ask Ubuntu

まずは、rtl8192cu が使われないように、ブラックリストに入れておく。
sudo modprobe -r rtl8192cu
sudo vi /etc/modprobe.d/blacklist.conf

/etc/modprobe.d/blacklist.conf の最後に、以下を追加。
blacklist rtl8192cu

rtl8xxxu ドライバをロード。
sudo modprobe rtl8xxxu
$ ls -al /sys/bus/usb/drivers/
合計 0
drwxr-xr-x 6 root root 0  8月  9  2022 .
drwxr-xr-x 4 root root 0  8月  9  2022 ..
drwxr-xr-x 2 root root 0  8月  9  2022 hub
drwxr-xr-x 2 root root 0  8月  9 11:12 rtl8xxxu
drwxr-xr-x 2 root root 0  8月  9  2022 usb
drwxr-xr-x 2 root root 0  8月  9  2022 usbfs
「rtl8xxxu」というディレクトリが見える。ロードできたっぽい。

ベンダーIDとプロダクトIDを、new_id というファイルに追記する。
$ echo "056E 4009" | sudo tee /sys/bus/usb/drivers/rtl8xxxu/new_id
tee: /sys/bus/usb/drivers/rtl8xxxu/new_id: そのようなファイルやディレクトリはありません
056E 4009

new_id なるファイルは無いと言われてしまった…。rtl8192cu だったら存在するファイルということだろうか。

githubからドライバをDLしてインストール。 :

rtl8xxxu を使うのは一旦諦めて、以下のドライバをインストールしてみた。

_pvaret/rtl8192cu-fixes: Realtek 8192 chipset driver, ported to kernel 3.11.
sudo apt-get update
sudo apt-get install git linux-headers-generic build-essential dkms
git clone https://github.com/pvaret/rtl8192cu-fixes.git
sudo dkms add ./rtl8192cu-fixes
sudo dkms install 8192cu/1.11
sudo depmod -a
sudo cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/

再起動したけれど、反映されない。WDC-300SU2S はサポートしてない製品だから当たり前だろうか。

ドライバをアンインストール。
sudo rm /etc/modprobe.d/blacklist-native-rtl8192.conf
sudo dkms status
sudo dkms remove -m 8192cu/1.11 --all

rtl8192cuを使ってみる。 :

ダメ元で rtl8192cu を使ってみる。

/etc/modprobe.d/blacklist.conf を編集して、先ほど行った rtl8192cu のブラックリスト登録をコメントアウト(行頭に「#」をつける)。
sudo vi /etc/modprobe.d/blacklist.conf

rtl8192cu のロード。
sudo modprobe rtl8192cu
$ ls -al /sys/bus/usb/drivers/rtl8192cu/
合計 0
drwxr-xr-x 2 root root    0  8月  9 12:06 .
drwxr-xr-x 6 root root    0  8月  9  2022 ..
--w------- 1 root root 4096  8月  9 12:07 bind
lrwxrwxrwx 1 root root    0  8月  9 12:07 module -> ../../../../module/rtl8192cu
-rw-r--r-- 1 root root 4096  8月  9 12:07 new_id
-rw-r--r-- 1 root root 4096  8月  9 12:07 remove_id
--w------- 1 root root 4096  8月  9 12:06 uevent
--w------- 1 root root 4096  8月  9 12:07 unbind

rtl8192cu を使う分には、new_id というファイルがちゃんと存在している模様。

ベンダーIDとプロダクトIDを追記。
echo "056E 4009" | sudo tee /sys/bus/usb/drivers/rtl8192cu/new_id

iwconfig を使って、無線LAN関係の状態を確認。
$ iwconfig
enp3s0    no wireless extensions.

lo        no wireless extensions.

wlxXXXXXXXXXXXX  IEEE 802.11  ESSID:off/any
          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm
          Retry short limit:7   RTS thr=2347 B   Fragment thr:off
          Power Management:off

無線LANが使えるようになった。たしかに、rtl8192cu ドライバを使えば、ELECOM WDC-300SU2S は使えるっぽい。

ただ、この状態では再起度すると元に戻ってしまうそうで。

以下のやり取りでは、/etc/rc.local を利用して、OS起動時に、ベンダIDとプロダクトIDを new_id に書き込むことで対処する方法が紹介されている。

_wireless - Compile and install rtl8192cu driver - Ask Ubuntu

それと…。たぶん、やっぱり、rtl8192cu は不安定じゃないのかと…。どの情報を見ても、「rtl8192cu ドライバは不安定」「rtl8xxxu を使うべし」と書いてあるし…。

rtl8xxxu と new_id。 :

rtl8xxxu で new_id というファイルに書き込んで対応製品を増やすのは難しいっぽい。driver_info というのを見て処理してるらしいけど、カーネルモジュールのソースを修正してビルドする、という話になっていくようで…。

_rtl8xxxu 4.4.5(from f23): I get a panic adding a new device to the driver - Patchwork
_jetson nanoでWiFiドングルElecom WDC-433DU2HBK を使う
_Raspberry PiでWDC-433DU2H2-Bを動かす - Qiita

再度gtihubのドライバに挑戦。 :

再度、github版のドライバを使ってみることにする。ソースを編集して、WDC-300SU2S に対応させることができるんじゃないのかなと閃いたので…。

_pvaret/rtl8192cu-fixes: Realtek 8192 chipset driver, ported to kernel 3.11.

sudo apt-get update
sudo apt-get install git linux-headers-generic build-essential dkms
git clone https://github.com/pvaret/rtl8192cu-fixes.git

rtl8192cu-fixes/os_dep/linux/usb_intf.c を編集して、WDC-300SU2S のベンダIDとプロダクトIDを追加してみる。

_rtl8192cu-fixes/usb_intf.c at master - pvaret/rtl8192cu-fixes

93行目あたりに記述を追加。行頭に「+」がついている行がソレ。「+」は省く。

$ diff -u rtl8192cu-fixes/os_dep/linux/usb_intf.c.orig rtl8192cu-fixes/os_dep/linux/usb_intf.c
--- rtl8192cu-fixes/os_dep/linux/usb_intf.c.orig        2022-08-09 21:11:39.962416889 +0900
+++ rtl8192cu-fixes/os_dep/linux/usb_intf.c     2022-08-09 21:12:58.022374097 +0900
@@ -91,6 +91,7 @@
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x817C)},/* 8192CE-VAU USB minCard */ \
        {USB_DEVICE(USB_VENDER_ID_REALTEK, 0x8191)},/* 8192CU 2*2 */ \
        {USB_DEVICE(0x1058, 0x0631)},/* Alpha, 8192CU */ \
+       {USB_DEVICE(0x056E, 0x4009)},/* ELECOM WDC-300SU2S */ \
        /*=== Customer ID ===*/  \
        /****** 8188CUS Dongle ********/ \
        {USB_DEVICE(0x2019, 0xED17)},/* PCI - Edimax */ \

github の readme.md に従って作業を続行。
sudo dkms add ./rtl8192cu-fixes
sudo dkms install 8192cu/1.11
sudo depmod -a
sudo cp ./rtl8192cu-fixes/blacklist-native-rtl8192.conf /etc/modprobe.d/
sudo cp ./rtl8192cu-fixes/8192cu-disable-power-management.conf /etc/modprobe.d/
sudo reboot

OSを再起動したら、WDC-300SU2S を自動認識してくれるようになった。

$ lsmod | grep 81
snd_hda_codec_generic    81920  1 snd_hda_codec_realtek
8192cu                573440  0
cfg80211              708608  1 8192cu
r8168                 548864  0

$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:1f:d0:cf:6c:96 brd ff:ff:ff:ff:ff:ff
3: wlxXXXXXXXXXXXX: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff

wlx* というのが増えている。これが無線LAN子機経由の接続。

_ワイヤレス設定 - ArchWiki

ちなみに、iw というツールも状態確認に使えるっぽい。
$ iw dev
phy#0
        Interface wlxXXXXXXXXXXXX
                ifindex 3
                wdev 0x1
                addr xx:xx:xx:xx:xx:xx
                ssid hoge-router
                type managed
                txpower 12.00 dBm
$ iw dev wlxXXXXXXXXXXXX link
Connected to yy:yy:yy:yy:yy:yy (on wlxXXXXXXXXXXXX)
        SSID: hoge-router
        freq: 2457
        signal: -45 dBm
        tx bitrate: 144.4 MBit/s

使えるようになったものの、安定性は…これはまだちょっとよく分からない。

ちなみに、WDC-300SU2S は USB2.0ポートに繋ぐと不安定になって、USB3.0ポートに繋ぐと安定するという話も見かけたけれど。今回実験に使った M/B、GIGABYTE GA-G31M-ES2L (rev. 1.x) にはUSB2.0ポートしかないので、USB2.0ポートに繋ぐしかなく…。でもまあ、それでも一応動いてるように見える。

速度測定。 :

速度の測定には、iperf が使える。
sudo apt install iperf iperf3
パッケージ名 iperf が 2.x.x系。iperf3 が 3.x.x系。

$ iperf --version
iperf version 2.0.13 (21 Jan 2019) pthreads

Ubuntu Linux側で iperf -s を実行。
iperf -s
iperf -s の終了は Ctrl + C。

別PC(Windows10機)で、iperf -c IPアドレス、を打てば速度が出てくる。
> iperf -c 192.168.1.6
------------------------------------------------------------
Client connecting to 192.168.1.6, TCP port 5001
TCP window size: 64.0 KByte (default)
------------------------------------------------------------
[452] local 192.168.1.9 port 52252 connected with 192.168.1.6 port 5001
[ ID] Interval       Transfer     Bandwidth
[452]  0.0-10.0 sec  61.8 MBytes  51.8 Mbits/sec

50Mbps は出てるっぽい。遅いような気もするけれど、IEEE802.11b/g/n対応製品ならこんなものかも…。

以上です。

過去ログ表示

Prev - 2022/08 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project