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 らしい。
_300Mbps USB無線小型LANアダプタ - ELECOM WDC-300SU2SWH
しかし、認識してくれない。
この WDC-300SU2SWH を、Ubuntu Linux 20.04 LTSで利用したい。ちなみに、末尾の WH や BK は色を表しているようなので、型番としては WDC-300SU2S でいいのだろうか。
ググったところ、WDC-300SU2S に載っているチップは Realtek RTL8192CU らしい。
◎ 情報を調べる。 :
lsusb と打てば、ベンダーID(メーカー名を示す)とプロダクトID(製品型番を示す)は出てくる。
_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 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 が使われないように、ブラックリストに入れておく。
/etc/modprobe.d/blacklist.conf の最後に、以下を追加。
rtl8xxxu ドライバをロード。
ベンダーIDとプロダクトIDを、new_id というファイルに追記する。
new_id なるファイルは無いと言われてしまった…。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.
再起動したけれど、反映されない。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 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 のブラックリスト登録をコメントアウト(行頭に「#」をつける)。
rtl8192cu のロード。
rtl8192cu を使う分には、new_id というファイルがちゃんと存在している模様。
ベンダーIDとプロダクトIDを追記。
iwconfig を使って、無線LAN関係の状態を確認。
無線LANが使えるようになった。たしかに、rtl8192cu ドライバを使えば、ELECOM WDC-300SU2S は使えるっぽい。
ただ、この状態では再起度すると元に戻ってしまうそうで。
以下のやり取りでは、/etc/rc.local を利用して、OS起動時に、ベンダIDとプロダクトIDを new_id に書き込むことで対処する方法が紹介されている。
_wireless - Compile and install rtl8192cu driver - Ask Ubuntu
それと…。たぶん、やっぱり、rtl8192cu は不安定じゃないのかと…。どの情報を見ても、「rtl8192cu ドライバは不安定」「rtl8xxxu を使うべし」と書いてあるし…。
/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
_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.
rtl8192cu-fixes/os_dep/linux/usb_intf.c を編集して、WDC-300SU2S のベンダIDとプロダクトIDを追加してみる。
_rtl8192cu-fixes/usb_intf.c at master - pvaret/rtl8192cu-fixes
93行目あたりに記述を追加。行頭に「+」がついている行がソレ。「+」は省く。
github の readme.md に従って作業を続行。
OSを再起動したら、WDC-300SU2S を自動認識してくれるようになった。
wlx* というのが増えている。これが無線LAN子機経由の接続。
_ワイヤレス設定 - ArchWiki
ちなみに、iw というツールも状態確認に使えるっぽい。
使えるようになったものの、安定性は…これはまだちょっとよく分からない。
ちなみに、WDC-300SU2S は USB2.0ポートに繋ぐと不安定になって、USB3.0ポートに繋ぐと安定するという話も見かけたけれど。今回実験に使った M/B、GIGABYTE GA-G31M-ES2L (rev. 1.x) にはUSB2.0ポートしかないので、USB2.0ポートに繋ぐしかなく…。でもまあ、それでも一応動いてるように見える。
_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 が使える。
Ubuntu Linux側で iperf -s を実行。
別PC(Windows10機)で、iperf -c IPアドレス、を打てば速度が出てくる。
50Mbps は出てるっぽい。遅いような気もするけれど、IEEE802.11b/g/n対応製品ならこんなものかも…。
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 -siperf -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対応製品ならこんなものかも…。
[ ツッコむ ]
以上です。