ワイヤレスカードをLinuxで利用可能にする2つのツール

 GNU/Linux関係のハードウェアにおいて、ワイヤレスネットワークアダプタほどサポート状況が貧弱な分野はないであろう。大手ベンダからは新型モデルが絶えずリリースされているものの、そのほとんどがLinuxのサポートを端から放棄しており、またこれらのワイヤレスカードに対応したフリードライバをリバースエンジニアリングで作成するのはほとんど不可能に近い状態になっている。特にラップトップの場合、ワークステーションほどのカスタマイズを施してくれる販売業者は少数派と言っていいのが現状だ。こうした不満に対して、色々と不備な点はあるものの、一応の実用的なソリューションを提供してくれるのが本稿で紹介するndiswrapperおよびBroadcom firmware cutterである。

 あらかじめ断っておくが、これら2つのプログラムには様々な不備が存在している。その1番目は、Debianのリポジトリラベル「contrib」に分類されていることからも分かるように、これらがフリーなプログラムではなくその動作がプロプライエタリ系プログラムに依存している点である。つまりこれらのプログラムは、ワイヤレスカードの製造元からWindows用にリリースされているドライバを抽出してそれをGNU/Linux上で実行するための処理を施しているのであり、このプロセス自体がフリーソフトウェア支持者の多くが眉をひそめる行為であって、ドライバそのものはフリーな使用ができるものの、法律的には違法な存在と見なされる可能性を否定できないのだ。2つ目の問題点は、これら2つのプログラムを扱う操作手順の複雑さであり、しかもディストリビューションごとにその詳細が異なっているため、多くのユーザが使用をためらう原因となっている。

 その他、これら両プログラムの関連ドキュメントに不備があるのも、インターネット上で様々な混乱を呼び起こす要因となっている。こうした問題の本質がどのようなものかはドキュメント類に実際に目を通してみないと理解しにくいかもしれないが、これを参考にしてコンピュータを設定すると、その後の再インストール時に不整合を生じさせる可能性が残されてしまうのである。

 これら2つのプログラムを導入する際の負担を軽減できるよう、本稿では必要となる情報および使用時の要件についての解説を行っている。こうした情報は可能な限り適用範囲の広いものとしてあるが、実際にこれらのプログラムを使用する場合は、ドキュメント類を参照した上で各自のディストリビューションに適合させるための設定変更を施して頂きたい。

ndiswrapperの使用法

 ndiswrapper(Network Driver Interface Specification wrapper)の基本機能は、ワイヤレスカード付属のWindows用ドライバをGNU/Linuxで使用させるための処理において、その操作用インタフェースを提供することである。そしてndiswrapperでは最低でも2種類のグラフィカルインタフェースを利用できるようになっているのだが、その点に触れているディストリビューションや解説書はほとんど存在していない。それと言うのも、このプログラムを使用するユーザの大半はコマンドラインによる操作を選択するであろうからだ。

 ndiswrapperを使用するには、各シリーズに応じて2.6.6あるいは2.4.26以降のカーネルが必要であり、その他に、kernel、gcc、wireless-toolsパッケージ用のカーネルヘッダも必要となる。RPMディストリビューションを使用できる場合は、dkms-ndiswrapperパッケージをFreshRPMSから入手できるが、これにはカーネルヘッダも付属している。wireless-toolsが付属していないディストリビューションでは、Hewlett-PackardのワイヤレスLANのリソースページからダウンロードすればいい。

 実際の作業に取りかかる前の段階で、各自のワイヤレスカードがndiswrapperに対応しているかを確認しておく必要がある。それにはまずlspciを実行して、最初の列に表示される自分のワイヤレスカードに関するエントリを書き留めておく。次に「lspci -n」を実行して、先のコマンドで取得しておいた先頭列エントリの情報を基に、該当するワイヤレスカードの行を特定する。3ないし4番目の列には、「14e4:4311」というようにコロンを挟んだ1組の4桁数値という形式で、ワイヤレスカードのPCI IDが表示されているはずである。この情報を別途書き留めておき、ndiswrapperプロジェクトのサイトにあるサポート対象カードの一覧ページにアクセスし、該当するカード名の項目を探して、先のPCI IDが含まれているかを確認する。該当する記述がある場合はndiswrapperを利用できるが、そうでない場合は後述するfirmware cutterの使用を検討するべきだろう。

 次の手順として、以前にndiswrapperを使用したことのある場合は、そのインストレーションに関するすべてを削除しておく。まず最初に「ndiswrapper -r driver 」というコマンドを用いて同プログラムでインストールしたドライバ類の削除を行う。次にプログラム本体を削除するが、この処理はディストリビューションのパッケージ管理ツールで行えるはずであり、またソースからコンパイルしていた場合は、ndiswrapperファイルの格納ディレクトリで「make uninstall」コマンドを実行してもいい。その後「modprobe -r ndiswrapper」コマンドを実行してカーネル中のモジュールを削除しておく。その他、「ndiswrapper -m」によるエイリアス作成を行っていた場合は、「rm -f /etc/modprobe.d/ndiswrapper」コマンドによる削除が必要となる。最後に削除するのは、loadndisdriveファイルなどのndiswrapperを参照している/usr/sbin中のファイル群および、/lib/modules/<kernelname>/miscにあるカーネルモジュールである。ディストリビューションによってはファイルの格納位置が異なっていることもあるが、そうした場合は、適当な検索ツールを使ってndiswrapper関連のファイル位置を特定すればいい。

 システムのクリーンアップが終了したら改めてndiswrapperをインストールし直すが、その際には各自のディストリビューションで該当するパッケージを探すか、あるいはndiswrapperのソースコードを配布サイトから入手してもいい。ソースのコンパイルは、distcleanmakemake installのコマンドシーケンスで行える。

 以上の手順を経ることで、ドライバのインストール準備は整ったことになる。先に各自が所有するカードのドライバがインストール可能であるかを同プロジェクトのサイトで確認したが、このサポート対象ドライバの一覧には、これからの作業で必要となるドライバの名称と取得先URLも並記されている。この情報を基に該当するドライバを新規ディレクトリにダウンロードしておき、「unzip -a driverfile 」で解凍しておく。

 ここで一言注意しておくが、インターネット上には不完全なその他の解説が出回っており、そこでは本家のサイトでは掲載されていないドライバが取り上げられていることもあり、それを使って正常に作業を進められる場合も確かに存在している。ただし、同じワイヤレスカードモデルでもバージョン違いのドライバを使うだけでは動作しないこともあり、システムがカードを認識しても実際には使用できないというケースに遭遇する場合もある。また現行のndiswrapperがサポートしているのはWindows XP用ドライバだけであり、Vista用ドライバの対応は確認されていない。いずれにせよ、こうした二次的なソースを利用するのはプロジェクトで正規に推奨されているドライバが使用できなかった場合に限るべきだが、その際には自分自身で試行錯誤的に検証していくことを覚悟しなければならないだろう。

 手元にWindows XPマシンがある場合は、各自のカードで使われている.sysドライバを、コントロールパネル→システム→ハードウェア→デバイスマネージャで特定することもできる。そして該当する名前の.sysおよび.infファイルを、\Windows\infフォルダからGNU/Linuxディストリビューションにコピーすればいい。

 必要なドライバを入手できたら、それに対応する.infファイルを特定して、「ndiswrapper -i name.inf」コマンドによりドライバのインストールを行う。なおzip化されていたドライバを入手した場合、必要な関連ファイルは、圧縮ファイルの解凍時に作成されるディレクトリの/DRIVERフォルダに格納されているはずである。

 先のコマンドを実行すると、必要なファイル群の/etc/ndiswrapperへのコピーおよびカード用設定ファイルの作成が行われる。またドライバのインストールが正常に行われたかや、システムによるデバイスの認識が行えるかを検証するには、「ndiswrapper -l」コマンドを実行すればいい。

 次に行うのは、wireless-toolsの付属プログラムを用いたワイヤレスネットワークインタフェースの設定である。その詳細については、ndiswrapperの解説ドキュメントに簡潔にまとめられているので、そちらを参照して頂きたい。

 各自のワイヤレスネットワークへの接続が正常に行えたら、「ndiswrapper -m」コマンドを実行しておくことで、wifi-radarやnetwork-managerなどのプログラムでワイヤレスインタフェースを有効化した際にndiswrapperおよびドライバが自動的に読み込まれるようにしておける。またブート時にモジュールを自動的に読み込ませる方法については各自のディストリビューションの解説書を参照して頂きたいが、多くのディストリビューションの場合、ndiswrapperという行を/etc/modulesに追加するか、あるいは「modprobe ndiswrapper」という行を/etc/rc.d/rc.localに追加しておくだけでいいはずである。

Broadcom firmware cutterの使用法

 firmware cutterは、Broadcomのワイヤレスカードに特化した使用が想定されている。この場合に使用されるドライバは比較的最近のLinuxカーネルに含まれるものだが、ここでは必要なファームウェアをWindowsおよびMac用のファイルから抽出するという処理が行われる(Windows用ドライバはbcm43xxという形式のファイル名であり、Mac用ドライバはbem43xx_mac80211という形式のファイル名になっている)。

 firmware cutterの使用には、2.6.17-rc2以降のカーネルが必要となる。またndiswrapperの場合と同様、wireless-toolsをインストールしておくと、ワイヤレス接続の設定を簡単化できる。

 この場合も、firmware cutterでサポートされているファームウェアのバージョンが、各自のワイヤレスカードで利用できるかを事前に確認しておかなければならない。ファームウェアのバージョンを確認するには、まず最初にlspciコマンドを実行して、最初の列に表示される自分のワイヤレスカードに関するエントリを書き留めておき、次に「lspci -vn」を実行して、先のコマンドで取得しておいた先頭列エントリの情報を基にワイヤレスカードの行を特定する。ここで表示される3ないし4番目の列には、コロンを挟んだ1組の4桁数値という形式で、ワイヤレスカードのChip IDが表示されているはずである。サポートされているカードについては、このIDの後半4桁の数値を基にした一覧が同プロジェクトのDevicesページに掲載されているので、ここで確認をすればいい。最新のコンピュータを購入したばかりで、そのワイヤレスカードがほぼ確実にサポートされているような場合でも、こうした事前のチェックは行っておくべきである。

 以前にfirmware cutterを使用したことのある場合は、そのインストレーションに関するすべてを削除してクリーンな再インストールができるようにしておく。具体的な手順としては2通りの操作法が存在し、「modprobe -r drivername 」コマンドを実行するか、あるいは「echo 'blacklist drivername' >> /etc/modprobe.d/blacklist」を実行して、読み込み対象外とする一覧に当該ドライバを登録しておけばいい。また後々の混乱を避ける観点からは、前回ダウンロードしたすべてのファイルも削除しておくべきである。ただしndiswrapperの場合とは異なり、firmware cutterの再インストール前には旧バージョンを削除しておく必要はない。

 firmware cutterのインストールについては、多くのディストリビューションがリポジトリからの直接インストールに対応している。また「checkout svn://svn.berlios.de/bcm43xx/trunk/sprom」コマンドを使用して、同プロジェクトの運営するリポジトリから最新バージョンをダウンロードすることもできる。

 firmware cutterのインストール後に行うのは、Broadcomファームウェア本体を新規ディレクトリにダウンロードする作業である。こうしたダウンロードをする際の一般的なソースはOpenWrtリポジトリであるが、Ubuntuなど一部のディストリビューションではその他のソースを利用できるようになっており、またユーザフォーラムで探せばファームウェアのカスタムバージョンに関連する情報も取得できるはずだ。firmware cutterを使用する場合、こうしたカスタムバージョンのファームウェアの方がうまく行くこともある。

 このようにしてダウンロードしたファームウェアについては、その格納ディレクトリに移動してから「/usr/bin/bcm43xx-fwcutter -w /lib/firmware wl_apsta.o」コマンドを実行する。なお、ファームウェアをカーネルフォルダに追加するため「bcm43xx-fwcutter -w /lib/firmware/`uname -r` ~/Desktop/wl_apsta.o>」コマンドの実行を推奨している解説を見かけたことがあるが、私の経験からすると、これを実行してもしなくても特に何の変化もないはずだ。

 wireless-toolsを使用したワイヤレス接続に成功できたら、必要に応じて「modprobe drivername 」の追加をしておけばいい。ここでは完全を期するためにこの手順も敢えて紹介しておいたが、他の多くの解説で割愛されていることからも分かるように、この操作は必須の設定ではない。

まとめ

 ndiswrapperおよびfirmware cutterに関するまとめとしては「100%の成功を期待してはいけない」と書かざるを得ないが、いずれのプログラムにしろ一度失敗したくらいであきらめてはいけない。使用するディストリビューションの関連メーリングリストやIRCチャンネルを探せば問題解決に役立つ情報が入手できるかもしれず、またこれらのプログラムをインストールする際にクリーンなシステムを使用することを心がけることで成功率の向上を期待することもできるからだ。またダウンロード元のソースや、ソフトウェアのバージョンやファイルを変更することで、結果が違ってくる場合もある。

 かつてのDOSにおけるconfig.sysの存在意義が今では薄れたように、将来的にはこの種のプログラムの必要性もやがては廃れていくのかもしれないが、現状では多くのユーザにとってこれらを利用する以外の選択肢が存在していないのも事実である。その他、手元のコンピュータとワイヤレスカードが骨董品と化す前にネイティブなサポートのされる日が到来することに希望を寄せてひたすら待ち続けるか、あるいはネイティブにサポートされているカードに買い換えるといった手段を取れないこともないだろうが、そうした負担を回避できるかもしれない手段が存在する以上、その可能性に期待をする人間をむげに責めることもできないだろう。

Bruce Byfieldは、コンピュータジャーナリストとして活躍しており、Linux.com、IT Manager’s Journalに定期的に寄稿している。

Linux.com 原文