Ubuntu 18.04 LTSでWI-U3-866Dを使う

Posted on
ubuntu ubuntu 18.04 WiFi DMKS rtl8812au

Ubuntu 18.04をPCにインストールして、いざ使おうとしたらWiFiが使えなくて困ってしまった。 Ubuntuでは標準でWI-U3-866dのドライバーが入っていないため、自分でインストールする必要があった。 ただLinuxのドライバがどこにあるのかさっぱりわからず、しかもぐぐると古い情報と新しい情報が入り混じってどれが正しいのかわからない。

ようやっと正解っぽいのにたどり着いたので、メモしておく。

準備の準備

この時点では当然インターネットに繋がっていないため、別の方法でドライバを入手する必要がある。またインストール直後のUbuntuは開発環境が入ってないので、どうしょうもない。(開発環境をはじめから入れておくオプションがあったりする?)

私の場合はWindows10とのDual boot環境だったので、Windows10にVirtualboxを入れてUbuntuを入れてドライバをコンパイルすることにした。

と、ここまで準備できているとする。

ドライバの入手とコンパイル@Ubuntu on Windows10

BuffaloのWI-U3-866Dを使いたくて、調べてみると中身はrtl8812auというチップらしい。なので、rtl8812auのドライバが使えるとのこと。

Qiitaで載ってたドライバでは、最初はうまく動いていたけど何度か再起動していたらうまく動かなくなってしまった。

深追いしてもわからなそうだったので、もっとぐぐったらもっといいページが見つかった。 このページでバージョンが5.2.20のドライバがあることを知った(上記Qiitaで紹介していたのは4.2.2)。

https://github.com/zebulon2/rtl8812au-driver-5.2.20

gitでファイルをダウンロードする。

$ git clone https://github.com/zebulon2/rtl8812au-driver-5.2.20.git
$ cd rtl8812au-driver-5.2.20

このページを参考にして、ソースを書き換え、USBのIDからドライバを見つけられるようにする。

$ vi os_dep/linux/usb_intf.c
        {USB_DEVICE(0x2604, 0x0012), .driver_info = RTL8812}, /* Tenda - U12 */
        {USB_DEVICE(0x0411, 0x025d), .driver_info = RTL8812}, /* Buffalo - WI-U3-866D */ //ここを追加

このコードは、lsusbして出てくる番号。

% lsusb | grep BUFFALO
Bus 001 Device 004: ID 0411:025d BUFFALO INC. (formerly MelCo., Inc.)

コンパイルしてtarで固める。

$ make
$ cd..
$ tar cf rtl8812au.tar rtl8812au-driver-5.2.20

コンパイルするためにいくつかパッケージをインストールしたけど、メモしてなかったから忘れてしまった。。。

できたtarファイルをUSBメモリ等に保存しておく。

ドライバのインストール@Ubuntu18.04

以降はドライバをインストールしたいUbuntuで作業する。

USBメモリに保存しておいたtarファイルをコピーしてくる。

$ cp <USBメモリ>/rtl8812au.tar .
$ tar xf rtl8812au.tar
$ cd rtl8812au-driver-5.2.20
$ sudo insmod 8812au.ko
$ sudo modprobe 8812au

これでできない場合は、Qiitaに載っていた方法で対応する。

$ sudo cp 8812au.ko /lib/modules/$(uname -r)/kernel/drivers/net/wireless
$ sudo depmod

lsmodで認識できたら成功。WiFiの設定ができるようになるはず。

$ lsmod|grep 8812au
8812au               1470464  0
cfg80211              622592  1 8812au

DKMSでインストール

今回知ったんだけど、新しいカーネルをインストールしたときに自動的にドライバをコンパイルしてくれる仕組みがあって、 Dynamic Kernel Module Support(DKMS)というらしい。

簡単に導入できたのでメモしておく。 gitリポジトリのREADME.mdにも手順が載っているので、そちらを参照してもよいです。

/usr/srcにドライバをコピーする。ディレクトリ名にバージョンを入れておくのがポイントっぽい。

$ sudo cp rtl8812au-driver-5.2.20 /usr/src/rtl8812au-5.2.20

dkmsパッケージをインストールする。

$ sudo apt install dkms

登録、ビルド、インストールの順ですすめる。

$ cd /usr/src/rtl8812au-5.2.20
$ sudo dkms add -m rtl8812au -v 5.2.20
$ sudo dkms build -m rtl8812au -v 5.2.20
$ sudo dkms install -m rtl8812au -v 5.2.20

インストールできたかどうか、確認。

$ dkms status
nvidia, 410.78, 4.15.0-43-generic, x86_64: installed
rtl8812au, 5.2.20, 4.15.0-43-generic, x86_64: installed

rtl8812auが入っていればOK。 nvidiaのドライバもDKMSの仕組みでインストールされていることも確認できた。

ここでインストールに失敗してしまったら、/lib/modules/$(uname -r)/kernel/drivers/net/wireless8812au.koを削除すればよい。 DKMSのドライバも削除しておく。

$ sudo dkms remove -m rtl8812au -v 5.2.20 --all

これでもう一度、登録、ビルド、インストールすればうまくいく(はず)。

以上。