概要
最近、デスクトップPCで無線LANを使いたくなって、BUFFALO WI-U2-433DHPを買って接続してみたが動かない。BUFFALOの公式サイトのドライバーはWindowsかMacしかない。
ま、これは買う前からわかってはいたが←
しかし、Ubuntuで動かすのにあんなに苦労するとはこの時は考えてもみなかった...
BUFFALOにはlinuxのドライバはないので、導入に苦労します。
PLANNEXの無線子機はlinuxに対応してるものが多いのでおすすめかも。
ちなみに、BUFFALOでもWLI-UC-GNMシリーズであればドライバー不要ですぐにlinuxで使えました。
実行環境
- Ubuntu 14.04 (3.13.0-107-generic)
- BUFFALO WI-U2-433DHP(2016年3月発売)
- Realtek RTL8821AU
方法
調べた中でlinuxのドライバを入れる方法は2つ- Windowsドライバをndiswrapeprでlinuxで使えるようにする
- 無線子機に内蔵されているチップを調べて、そのドライバをインストールする
ということで、成功した2.の方法を紹介したいと思います。
この方法でやれば、とりあえずBUFFALOシリーズはほとんどイケるのではないかと思います。
1.チップを調べる
調べによると、無線子機にはチップが内蔵されており、そのチップに対応したドライバをインストールすればlinuxでも動くのだそう。
では、WI-U2-433DHPにはどんなチップが内蔵されているか調べましょう。
その調べ方なんですが、公式サイトにはチップ情報がないし、linuxの端末で調べるにもドライバがないのでわかりません。
ですので、Windows側でチップを確認します。ちなみに、linuxでは$lsusb -t などで調べることができます。
Windowsでデバイスマネージャからデバイスの詳細を見てみます。

すると、Realtek社のバージョンが1030.6.1201.2015であることがわかりました。
これをネットで調べてみると、RTL8821AUというチップを使っていることが判明!
似たチップに、RTL8812AU があり、間違えないようにしてください。(私はここで間違えて時間を食いました)
2.ドライバのインストール
ここからは、Ubuntuでやります。 RTL8812AUの方が多く使われているのか、githubではRTL8821AUのドライバのありかがよくわかりません。たとえ、RTL8821AUに対応していると書いてあってもうまく動作しませんでした。
試行錯誤の末、見つけたのがこちらです。Realtek Wireless Driver for Linux
ほとんどはここのREADMEに書いてあるようにすればよいですが、WI-U2-433DHP用にすこし変更点もあります。
まずは、任意の場所にクローンします。
$ git clone https://github.com/paralin/rtl8821au.git次に、rtl8821auフォルダの中のMakefileを以下のように2ヶ所変更します。
CONFIG_RTL8821A = n ↓ CONFIG_RTL8821A = y CONFIG_PLATFORM_I386_PC = n ↓ CONFIG_PLATFORM_I386_PC = y
READMEでは次にmakeしてますが、もう一箇所変更するところがあります。 rtl8821au/os_dep/linux/usb_intf.cの305行目#ifdef CONFIG_RTL8821A〜326行目#end ifで囲まれた中にWI-U2-433DHPのlinuxでのデバイス情報を書き加えます。
... {USB_DEVICE(0x0E66, 0x0023),.driver_info = RTL8821}, /* HAWKING - Edimax */ {USB_DEVICE(0x2019, 0xAB32),.driver_info = RTL8821}, /* Planex - GW-450S */ {USB_DEVICE(0x0411, 0x029b),.driver_info = RTL8821}, /* Buffalo - WI-U2-433DHP */ #endif ...WI-U2-433DHPで言えば上記のような記述になります。
このときの、USB_DEVICE(??????, ??????)のところは、無線子機をさした状態で、以下のコマンドより確認します。
$ lsusb Bus 002 Device 002: ID 8087:8001 Intel Corp. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 8087:8009 Intel Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 003: ID 046d:c531 Logitech, Inc. C-U0007 [Unifying Receiver] Bus 003 Device 008: ID 0411:029b BUFFALO INC. (formerly MelCo., Inc.)無線子機の情報は最下段であり、このIDがUSB_DEVICEになります。ここで念の為、無線子機はPCから外しましょう。
あとは、READMEと同じで、Makefileのあるフォルダで
$ make make ARCH=x86_64 CROSS_COMPILE= -C .... make[1]: ディレクトリ `/usr/src/linux-headers-3.13.0-107-generic' から出ます $ sudo make install install -p -m 644 8821au.ko ................. $ sudo modprobe 8821au $ lsmod ... 8821au ...とし、最後のコマンドで8821auが表示されていればオッケーです。 うまくインストールできなかった場合の対処法をいくつか後述します。 実際に無線子機を挿して確認してみましょう。
$ iwconfig eth0 no wireless extensions. lo no wireless extensions. wlan0 unassociated Nickname:"右上のUbuntuのLAN接続設定を開いても、無線を拾っていることを確認できました! 5GHz対応ですが、よくわからないのでとりあえず2.4GHzで我慢しましょう(笑)" Mode:Managed Frequency=2.412 GHz Access Point: Not-Associated Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality:0 Signal level:0 Noise level:0 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0
3.モジュールを自動でロード
さて、このままでは再起動するたびにmodoprobeしないといけないので コンピュータを起動した時に自動で8821auをロードするように設定します。$ sudo emacs /etc/modules-load.d/8821au.conf #8821auをロード 8821au
トラブルシューティング
- makeでエラー これにはいくつもの要因があります。たとえば、コンパイラのバージョンであったり、Ubuntuのカーネルとの相性の問題、 つまりMakefile上の記述が実行環境と異なるのです。この時は、頑張ってMakefileをいじるか、githubから他のインストーラをcloneしてmakeしてみる方法があります。
- modprobeでエラー
$ sudo modprobe 8821au modprobe: ERROR: could not insert '8821au': Device or resource busyこのとき、8812auなど他のドライバが動いているためにmodprobeできてない可能性があります。主はドライバを入れるための試行錯誤の過程で8812auを入れていたためにこのエラーが出ました。
$ sudo modprobe -r 8812auでアンロードすれば解決するかもしれません。モジュールの確認は$ lsmod です。
この1ケ月、試行錯誤の連続で、Buffall WI-U2-433DHP は、Windows 10 専用にとまで諦めておりました。この記事を見つけて、この通りに操作し、make,install したところ、インターネットが繋がりました。有難うございます。感謝します。H29.11.9 ja1pxp
返信削除ja1pxpさん
削除コメントありがとうございます!
こんな記事でもお役に立てて幸いです。
今後ともよろしくお願い致します。
Ubuntu18でコンパイルできない問題が有ったため、別のリポジトリからダウンロードし、
返信削除後は本稿の通りにしたところ上手く行きました。
参考:
http://gaobin.hatenablog.com/entry/2018/02/18/144356
https://github.com/zebulon2/rtl8812au/tree/v5.1.5
尚、こちらのソースではBuffalo用設定はpull requestを投げてMergeして貰いましたのでパッチも不要です。
コメントありがとうございます!
削除もう技術系の環境から抜けてしまったこともあり、改善できていませんが
このように皆さんによってより良くして頂いて大変うれしく思います。
今後ともよろしくお願い致します。
かわうそ様、貴重な情報ありがとうございます。
返信削除当方、かわうそ様の情報などを参考に、CentOS 7.6でBUFFALO WI-U2-433DHPをセットアップしました。それなりに時間が掛かりましたので、他の人の参考までに、このコメント欄をお借りして、情報共有させてください。
GitHubには、RTL8821AU用のドライバが複数あります。しかしCentOS 7.6標準のkernel 3.10ではビルドできなかったり、ビルドできても何故か(Wifiではなく)Ethernetとして認識されたり、上手くいきませんでした。
結局、ELrepoを使って、長期サポート版(lt版)のうち最新バージョンのkernel 4.4.167にkernelをあげて解決しました。
ここでの注意点は、kernel本体より先に、開発環境一式(kernel-lt-headers, kernel-lt-tools, kernel-lt-toolsなど)を先にyum swapで入れておくとよい、という点です。
私はNVIDIAのデバイスドライバを使っており、これによってカーネル本体の更新の際、DKMSの仕組みを通じて、NVIDIAのドライバが自動的に再ビルドされました。先にカーネルだけ上げようとすると、ここでコケます。
この点について言及せず、ネット上には、headers等を、kernel本体よりも後に入れる手順となっている解説があります。
RTL8821用ドライバは、以下からcloneしました。
https://github.com/zebulon2/rtl8812au.git
ファイルに含まれるMakefileをみると、RTL8812AU, RTL8821AUのどちらも有効になっています。
ビルドは、CentOS7の標準のGCC 4.8.5だと通りませんでした。そこで、以前インストールしておいた、GCC 7.3.0を使いました。ドライバのMakefileの冒頭で、次のような感じでGCC 7.3.0の場所を指定しました。
CC=/path/to/gcc-7.3.0/bin/gcc
あとはドライバ付属のdkms-install.shを起動すれば、上手くいきました。
このときコマンドプロンプトから、dkmsを直接起動すると、dkms.confの記述がそのまま渡ってしまって、バージョン番号が#MODULE_VERSION#となってしまうので、注意が必要でした(というか、一度失敗しました)。
最後に、私は水族館で、コツメカワウソと握手したことがあります。
以上、ありがとうございました。
とても詳しい解説ありがとうございます!
削除日にちが経っても内容が濃くなる記事でうれしいです。
握手いいですね。シーパラのかわうそはとてもかわいかったです。