Raspberry Piでmt7601uの無線LAN子機が認識されない問題を解決

公開日:  

RaspberryPi


中国からの安物の無線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

解決方法

このコメントの内容を実施することで解決しました。
以下は私が行った手順です(バージョンは適宜読み替えてください)。

  1. 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
  2. ソースを展開し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
  3. 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);
  4. ビルドします。

    pi@raspberrypi:~/linux-4.19.128/drivers/net/wireless/mediatek/mt7601u $ make -C /lib/modules/$(uname -r)/build M=$(pwd) modules
  5. ビルドが成功すると./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
  6. 再起動し、ip linkwlan0が表示されれば成功です。

まとめ

なんとか動くようにはなりましたが、よくわからない安物を使うより、少し高くても動作実績のあるものを使うのがトラブルもなくよいかもしれませんね。