Raspberry Pi 2とrtl8192cuの無線LAN子機を併用すると数時間で接続が切れる

どれくらい再現するのか不明ですが、自分と同じ状況に陥った方の参考になればとメモしておきます。

Ver. 3以降のRaspberryPiでは無線LAN機能はオンボですが、2まではEthernetのみでした。そのためUSBの無線LANドングルを接続して利用するのが一般的。

自宅に転がっていたRealtekのrtl8192cuを搭載した子機を使っていたところ、タイトルの問題が発生しました。

ちなみに数百円程度の安い無線LAN子機によく搭載されているrtl8192cuですが、Linuxと相性があまり良くないというのは昔から指摘されています。

一応、現時点(2025/8)のRaspberry Pi OSでは、rtl8192cuのドライバが最初から組み込まれているため、OSのインストール直後から無線LAN環境での運用が可能でした。

無線LAN接続が数時間で切れてしまう対策

私の環境では起動してから5時間弱ほどで切れる、という謎の現象が発生していました。

dmesgコマンドで確認すると下記の通り。

[64687.250318] rtlwifi: AP off, try to reconnect now
[64687.250392] wlan0: Connection to AP 12:34:56:78:9a:bc lost
[64728.529181] rtl_usb: Urb has error status 0xFFFFFF94
[64728.529264] rtl_usb: Urb has error status 0xFFFFFF94
[64728.529283] rtl_usb: Urb has error status 0xFFFFFF94
[64728.529298] rtl_usb: Urb has error status 0xFFFFFF94
・
・
・

やはりドライバー周りが不安定なのが原因かと思います。

省電力設定などで不安定になるといった情報もありましたが、私の環境では省電力設定はオフになっています。

対処法としては、ドングルを接続してから数時間は正常に動作するので、システムレベルで切断&再接続を行うことで解決?しました。

まず、

ip a

コマンドで、対象のネットワークインターフェースを確認します。

次に

lsusb -t

で、対象デバイス(Driver=rtl8192cuとの表記)のBusとPort番号を確認します。

ラズパイ2のUSBコネクタ場合、Busと1段目のPortはどちらも1番で、2段目のポートが5つあります。(Ethernetコネクタが1番、USBコネクタが2~5番)

例えば、2段目のポートの5番にドングルが接続されているなら、1-1.5というディレクトリが下記にもあるはずなので確認してください。

/sys/bus/usb/drivers/usb/

そしてこの番号(ディレクトリ名)を元に、直接unbindとbindを行います。

最初に確認したネットワークインターフェースと合わせて、rootのcronに下記の設定を行います。

* * * * * if nmcli d s | grep -q -e "^wlan0.*disconnected"; then echo "disconnected. Unbinding/binding 1-1.5 at $(date)"; echo "1-1.5" | tee /sys/bus/usb/drivers/usb/unbind; echo "1-1.5" | tee /sys/bus/usb/drivers/usb/bind; fi >> /var/log/usb_reconnect.log 2>&

行っている内容としては、 ネットワークインターフェースの状態を毎分確認し、もし切断されていたら対象のUSBデバイスを抜き差し、ということをソフト的に行っています。

(bind,unbindのファイルにバス&ポート番号を書き込むとそういう動作になります)

ログを/var/log/usb_reconnect.logに吐いていますが、ここは任意で。

コメント

タイトルとURLをコピーしました