公開日:
中国からの安物の無線LAN子機(MT7601U)をRaspberry Piに取り付けたところうまく認識されないということがありました。
lsusb
コマンドでは表示されるものの、ip link
では表示されませんでした。
環境
- Raspberry Pi 2 model B
- Raspbian 9.11 (kernel 4.19.66+)
起こったこと
ドライバがインストールされていれば、無線LAN子機をRaspberry PiのUSBポートに差し込むだけで認識され、ip link
コマンドでwlan0
として表示されます。
mt7601uドライバはカーネルバージョン4.2以上ではプリインストールされているので、そのまま認識するはずです。
しかし、ip link
を実行してもwlan0
は表示されませんでした。
pi@raspberrypi:~ $ 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: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 1000
link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
lsusb
では表示されていました。
pi@raspberrypi:~ $ lsusb
Bus 001 Device 000: ID 148f:7601 Ralink Technology, Corp. MT7601U Wireless Adapter
調べたところ、どうやら下記の内容と同じ現象が起こっているようでした。
https://github.com/kuba-moo/mt7601u/issues/64
解決方法
このコメントの内容を実施することで解決しました。
以下は私が行った手順です(バージョンは適宜読み替えてください)。
kernel.org から自分のカーネルバージョンと一致するソースをダウンロードします(私の場合4.19.66+だったので、4.19.128をダウンロードしました)。
pi@raspberrypi:~ $ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.128.tar.xz
ソースを展開し
drivers/net/wireless/mediatek/mt7601u
に移動します。pi@raspberrypi:~ $ tar Jxfv linux-4.19.128.tar.xz pi@raspberrypi:~ $ cd linux-4.19.128/drivers/net/wireless/mediatek/mt7601u
phy.c
を編集します。
mt7601u_init_cal
関数の一部を以下のようにコメントアウト。// ret = mt7601u_mcu_calibrate(dev, MCU_CAL_RXIQ, 0); // if (ret) // return ret; // ret = mt7601u_mcu_calibrate(dev, MCU_CAL_DPD, dev->dpd_temp); // if (ret) // return ret;
mt7601u_phy_recalibrate_after_assoc
関数の一部を以下のようにコメントアウト。// mt7601u_mcu_calibrate(dev, MCU_CAL_DPD, dev->curr_temp);
ビルドします。
pi@raspberrypi:~/linux-4.19.128/drivers/net/wireless/mediatek/mt7601u $ make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
ビルドが成功すると
./mt7601u.ko
が作成されるので、これを既存のモジュールと入れ替えます。
既存のモジュールはmodinfo mt7601u
でファイルの場所を確認できるのでバックアップを取り、先ほどビルドしたもので上書きます。pi@raspberrypi:~/linux-4.19.128/drivers/net/wireless/mediatek/mt7601u $ modinfo mt7601u | grep filename filename: /lib/modules/4.19.66+/kernel/drivers/net/wireless/mediatek/mt7601u/mt7601u.ko
再起動し、
ip link
でwlan0
が表示されれば成功です。
まとめ
なんとか動くようにはなりましたが、よくわからない安物を使うより、少し高くても動作実績のあるものを使うのがトラブルもなくよいかもしれませんね。