2016年1月1日金曜日

Ubuntu12.04 で WDC-433DU2H

2021/01/29 追記
https://github.com/morrownr/8821auのドライバがいい。
Ubuntu forumsで紹介されており、他のRealtekのドライバもある。
詳しくはこの記事を参照。
2019/06/27 追記
abperiasamy/rtl8812AU_8821AU_linuxのドライバがいい。
こまめにメンテされており、新しいカーネルに追従している。
数年前から、改造しなくてもWDC-433DU2Hに対応している。
使っていると時々調子が悪くなることもあるけど、色々試してこれが一番良さそう。

最近、このページを見る人が何故か増えている。
このページの最後で、追記として上記 abperiasamy/rtl8812AU_8821AU_linux のことを書いていたが、多くの人が最後まで読まないかもしれないので、先頭にも書いた。

これはRealtekのチップであるが、別の会社、MediaTekのUSB Wi-Fi用ドライバが、Linux 4.19でメインに取り込まれた(去年の秋頃だったかな)。
残念なことにUbuntu 18.04(BionicBeaver)のカーネルのバージョンは、HWEでも4.18だが、8月には5.0.0(19.04 DiscoDingoのカーネル)になる予定だ。
私はDiscoに乗り換えずに、BionicのHWEカーネルが5.0.0になるのを待つつもりだが、Discoを使っている人は、MediaTekのやつを使ったほうがいい。
あるいは、若者は迷わずDiscoへGo!

以下は、2016年1月1日に書いた古い情報。
IEEE802.11ac を使いたかったので、近所でELECOM WDC-433DU2H を買ってきた。
比較的安く、立派なアンテナが付いているので、気に入って買ってきたが、Ubuntu12.04での11acのサポートは良くない。
こういう時のために、LTS Enablement Stakを使っていたのだが、それでもダメだ。
PCIeのドライバはあるがUSB用は見当たらない。
使用されているチップはRTL8811AUということで、ネット上からそれらのドライバを入手してみたがうまく行かなかった。

Windows用のドライバをLinux上で使う技があったことを思い出し、それを行うことにした。
ndiswrapperというらしい。apt-getで適当にinstallを試みるが、途中でエラーになってしまう。
何度やり直しても、うまく行かない。
モジュールをビルドしようとしてうまく行かないらしい。
ネット上で Ubuntu12.04 の ndiswrapper について調べてみると、パッチが見つかったが、それを当ててもだめ。
パッチや前後の記事から、kernelのディレクトリ構造が変化したための問題のようだ。
ndiswrapper-dkmsのソースコードを直接コンパイルしようとすると、構造体__devexitの定義が無いためにエラーになっていることがわかった。
kernelやheader内のコードを探してみても、定義はない。
自分はLTS Enablement Stackを使っている。記事ではSausyだが、自分はTrustyを使っている。もっとずれているはずだ。
ndiswrapperはカーネルモジュールなので、当然カーネルに強く依存している。
LTS Enablement Stackを使ってカーネルだけを更新してしまったために、Ubuntu12.04用のndiswrapperが使えなくなったのだ。

そこまでわかった。ではどうする?
ndiswrapperを使うために、kernelをDowngradeするか? ndiswrapperを何とかするか?

Ubuntu12.04 LTS Enablement Stack最新カーネルは 3.13系、Trustyのものだ。
Trustyのndiswrapperならつかえるかも。と思って調べる。
ここを見ると、依存は dkms (>= 2.1.0.0) だけだ。

Ubuntu12.04のdkmsを見ると、
$ dpkg -l dkms
要望=(U)不明/(I)インストール/(R)削除/(P)完全削除/(H)維持
| 状態=(N)無/(I)インストール済/(C)設定/(U)展開/(F)設定失敗/(H)半インストール/(W)トリガ待ち/(T)トリガ保留
|/ エラー?=(空欄)無/(R)要再インストール (状態,エラーの大文字=異常)
||/ 名前         バージョ�� 説明
+++-==============-==============-============================================
ii  dkms           2.2.0.3-1ubunt Dynamic Kernel Module Support Framework
問題なし。

バイナリパッケージが入手できればそれだけでいいのかもしれないが、Trusty用をPreciseで使うので変な問題があるかもしれない。
ソースパッケージを入手して、Precise上でバイナリパッケージをビルドした。
dpkg-source -x ndiswrapper_1.59-2.dsc

dpkg-buildpackage -uc -us 

  (面倒なので詳細は省略。)
出来上がったバイナリパッケージ ndiswrapper-common_1.59-2_all.deb ndiswrapper-source_1.59-2_all.deb ndiswrapper-dkms_1.59-2_all.deb ndiswrapper-utils-1.9_1.59-2_i386.deb を全部まとめてインストールした。

インストール時に、ndiswrapperモジュールのビルドも行われる。
エラーにならずに成功した。

成功したのはいいが、どうやって使うんだろう?
起動は?
Classic Gnome だと、アプリケーション、システムツール、システム管理、Windows用無線LANドライバで、GUIアプリを動作させる。
ndiswrapperを使うには、Winodws用ドライバも入手しなければならない。
ELECOMのここから入手できる。
WDC-433DU2HBK_Windows_20140120.zip をunzipしてみると、いろいろなドライバが入っている。
一言でWindowsと言っても様々だ。

$ find ./ -iname "*.inf"
./WDC-433DU2HBK Windows 20140120/IM/WINXP/64/TWOPORT/XPTWOPORT.INF
./WDC-433DU2HBK Windows 20140120/IM/WINXP/64/TWOPORT/XPTWOPORT_MP.INF
./WDC-433DU2HBK Windows 20140120/IM/WINXP/32/TWOPORT/XPTWOPORT.INF
./WDC-433DU2HBK Windows 20140120/IM/WINXP/32/TWOPORT/XPTWOPORT_MP.INF
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/Win81X64/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/WinX64/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/Win7X86/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/Win8X86/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/VistaX64/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/Win8X64/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/Win81X86/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/Win7X64/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/WinXP/netrtwlanu.inf
./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/VistaX86/netrtwlanu.inf

32bit Ubuntuなので、WinXP用なら問題ないだろうと思って、./WDC-433DU2HBK Windows 20140120/RTWLANU_Driver/WinXP/netrtwlanu.infを使った。

Windows用無線LANドライバの画面で、「新しいドライバのインストール」ボタンを押して、そのファイルを選択する。
しばらく待つと、インストールが終わる。
その後、WDC-433DU2Hを接続すると、認識され動き始めた。

以降の操作は、普通。
network-appletでパスワード等を設定すれば、11acが使える。
2016/1/17 追記。
遅くて、使い物にならない。数十KB/sしか出ない。
11acの特徴の一つは、速度だ。つながれば良いという訳ではない。
また時々切れてしまう。

USB-Linuxでは、H/W依存度を下げるためにそのまま使うが、普通の目的では使えない。
C1-VRX/Kは、非PAEカーネルなので、3.2.xまでしか上げられず、今のところ他に選択肢がない。


2016/03/18 追記。
3.13系ならabperiasamy/rtl8812AU_8821AU_linuxのドライバが使える。
これはネイティブのLinuxドライバなので、ndis-wrapperは要らない。
ndis-wrapperからWDC-433DU2Hを削除して、このドライバを使ったほうがいい。
結局VAIOも3.13系に移行したので、VAIOでもネイティブドライバを使うようになった。

0 件のコメント:

コメントを投稿