Linux で Toshiba Tecra の内蔵無線LANを使う

1〜5 は RedHat 7.3, kernel-2.4.20-19.7 での記述です。
Gentoo 1.4, gentoo-sources での記述を 6、7、8、9 に追加しました。
カーネル 2.6.x での記述を 10,11 に追加しました。
基本的に下にいくほど新しい記述です。

何かお気づきの点がありましたら、メール 又は口頭などでぜひお知らせください。

1. モジュールの作成

 Project Info - MADWIFI のページへ行き、Downloadのところから madwifi-20030802.tgz をダウンロードし、 解凍します。

tar zxvf madwifi-20030802.tgz

 解凍後、できたディレクトリ madwifi-20030802 に移動し、Makefile.incを 開きます。98行目に

include ${KERNEL_PATH}/.config

とありますが、私はここを

#include ${KERNEL_PATH}/.config
include ${KERNEL_PATH}/configs/kernel-2.4.20-i686.config

のように変えました。編集が終わったら、makeします。makeと打てば何のエラーも なく終了すると思います。これでモジュールができました。

2. モジュールの挿入(insmod)

 できたモジュールを使えるようにします。rootになった後、次の順に打ちます。

# insmod wlan/wlan.o
# insmod ath_hal/ath_hal.o
Warning: loading ath_hal/ath_hal.o will taint the kernel: non-GPL license - Proprietary
See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module ath_hal loaded, with warnings
# insmod driver/ath_pci.o

 2番目のところで Warning: が出ますが、これでモジュールがロードされたはずです。 /var/log/messages のログにも、

Aug  4 03:58:32 localhost kernel: wlan: 0.7.1.1 BETA (Sam Leffler <sam@errno.com
>)
Aug  4 03:58:36 localhost kernel: ath_hal: 0.9.5.3 BETA (Sam Leffler <sam@errno.
com>)
Aug  4 03:58:44 localhost kernel: ath_pci: 0.8.3.2 BETA (Sam Leffler <sam@errno.
com>)
Aug  4 03:58:44 localhost kernel: PCI: Found IRQ 11 for device 02:0a.0
Aug  4 03:58:44 localhost kernel: PCI: Sharing IRQ 11 with 00:1d.1
Aug  4 03:58:44 localhost kernel: PCI: Sharing IRQ 11 with 02:0b.1
Aug  4 03:58:44 localhost kernel: ath0: 11a rates: 6Mbps 9Mbps 12Mbps 18Mbps 24M
bps 36Mbps 48Mbps 54Mbps
Aug  4 03:58:44 localhost kernel: ath0: 11b rates: 1Mbps 2Mbps 5.5Mbps 11Mbps
Aug  4 03:58:44 localhost kernel: ath0: 802.11 address: XX:YY:ZZ:AA:bb:CC
Aug  4 03:58:44 localhost kernel: ath0: Atheros 5211: mem=0xdfdd0000, irq=11
Aug  4 03:58:44 localhost /etc/hotplug/net.agent: invoke ifup ath0

のように出ていると思います。

3. インターフェイスの設定(iwconfig, ifconfig)

 あとはネットワークにつなぐだけです。無線LANの ESSID が hogehoge、Wep Key が fugafuga(数字でなく、文字)だった場合、

# iwconfig ath0 essid hogehoge key s:fugafuga

として設定します。しかし、この時点ではなぜか ESSID が設定されません。

 Detail:780833 - Install problems. の Followups: の所を見てみると、なんか

Then you need to
ifconfig ath0 {IP} netmask 255.255.255.0
where {IP} is the IP you want to assign to the driver.

とか書いてあり、自分の家ではサブネットマスクが同じ255.255.255.0 だったので、適当に

# ifconfig ath0 192.168.1.20 netmask 255.255.255.0

と打ってみました。すると、なんと ESSID がなぜか設定されます。これは 2、3回繰り返してみましたが、同じ結果になりました。 ちなみに、netmaskうんたらの部分は要らないようで、 <修正あり、補足1参照> とりあえず適当なIP Addressを設定すると ESSID の設定が有効になるようです。

2003/11/08 追加
 補足4 の所に書きましたが、この ifconfig のステップは新しいソース(CVS版) では要らなくなったようです。ぜひ CVS からダウンロードして使ってみましょう ;-)

 こうなったらすかさず

# dhcpcd ath0

としてDHCPサーバからIPを正式にもらいます。その後は、外につなげるように なります。

 今度また情報理工学系の無線LANやECCの無線LANで試してみようと思います。 うまくいけばいちいち insmod しなくてもよいよう、make installしてしまう のもいいかもしれません。make install すると、modprobe ath_pci とする だけでドライバが読み込めると思います。

4. 補足1

 情報理工学系の無線LANやECCの無線LANも、同様にして接続できました。 ただ、やはり ifconfig の際に netmask の設定が必要なようです。

5. 補足2

 少しソースに手を加えると、使えるチャンネルが増えます。これに ついては下の Gentoo Linux の項を参考にしてください。

6. Gentoo Linux 1.4 (kernel-2.4.20-gentoo-r5)

 やったことの概略だけ書きます。まず、MADWIFI の sourceforge から CVS 経由でソースをとってきます。そのアーカイブを madwifi-20030920.tar.gz として置いておきます。たぶん(執筆現在で)最新だと思います。

 次は、使えるチャンネルを増やすため、ソースを少しいじります。 madwifiドライバのインストールと検証結果(1) の「チャンネル1-11, 34,38,42,46で動くようになりました!」の記述が あるところを参考に、hal/ah.h の、240行目から始まる

enum {
        CTRY_DEBUG      = 0x1ff,                /* debug country code */
        CTRY_DEFAULT    = 0                     /* default country code */
};

というところを

enum {
        CTRY_DEBUG      = 0x1ff,                /* debug country code */
        CTRY_DEFAULT    = 0x188                /* default country code */
};

と変更します。これは、上で置いたアーカイブではもう変えてあります。 ちなみに、RedHat の所では Makefile.inc を変更していますが、Gentoo を 使う御方ならば .config はあるでしょう。そこは変える必要はありません。

 make します。

 make install します。これで、/lib/modules/2.4.20-gentoo-r5/net/ の 下に ath_hal.o、wlan.o、ath_pci.o がインストールされます。

 起動時にこれらを読み込んでくれるように設定します。私は他のモジュールの 読み込みにも便利なので、 hotplug を使っています。emerge sys-apps/hotplug して、rc-update add hotplug default とかするだけです。
 もし hotplug なんて起動していられない、というのなら、 /etc/modules.autoload に ath_pci と書いてください。これで起動時に 自動的に読み込まれるはずです。

 後はつなげるだけです。私は、上の RedHat のところ (3. インターフェイスの設定)の方法でやっています。複数の AP につなげる 必要があるので、この一連の流れをそれぞれ別のスクリプトを作って 動かしています。一ヶ所でしか使わないなら、適当な /etc/init.d/net.ath0 を書いて rc-update add net.ath0 default とかするといいかもしれません。

7. 補足3

 kernel-2.4.20-gentoo-r7 + CVS版ソースでもできました。そのときの ソースアーカイブを madwifi-20031001.tar.gz に置いておきます。

8. 補足4

 今回、CVSからソースをとってきて make してみると、あの謎の 「ifconfig ath0 {IP} netmask {NETMASK}」の作業がいらなくなりました! もちろんその他にもいろいろ改善されています。ぜひ使ってみましょう! そのときのソースは madwifi-20031108.tar.gz です。

 ちなみに、 CVS Repository のところにも説明がありますが、例えば

cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/madwifi co madwifi

のようにすると、カレントディレクトリ下の madwifi というディレクトリ以下に ソースを一発でとってきてくれます。ブラウザで Browse CVS へアクセスして一つずつ確認しながら落としてもいいですが、cvs コマンドが使えるなら 使った方が便利です。

9. 補足5

 emerge /usr/portage/net-wireless/madwifi-driver/madwifi-driver-0.1_pre20031110.ebuild と打ってみましょう ;-)

 これは、上で書いたようなソースの変更は行っていませんが、どうやらこの Toshiba Tecra のものだとその変更は必要ないようです。そのままで5GHz帯のチャンネル (Channel 34, 38, 42, 46)が使えています。

 どうやら、country code が 0 だった場合、/proc/sys/net/ath/regdomain を 読める場合は読むそうです。それでうまくいっているのでしょう。
参考: madwifiドライバのインストールと検証結果(1)

10. kernel 2.6.0 での make

 kernel 2.6.0 では、ソースそのままでは make に失敗します。それを直す パッチが Makefile.inc patch for modversions.h on non-2.4 kernels にあるのでその Makefile.inc.patch をとってきてあてましょう。 (注)現在の cvs ソースでは必要なくなったようです
 例えばソースツリーの一つ上にとってきたら

$ patch -p1 < ../Makefile.inc.patch

のようにしてあてます。modversions.h でなく modsetver.h を読みにいくよ うにする単純なパッチなので、自分で Makefile.inc を書き換えてもいいで しょう。

 Gentoo な方には、 madwifi の ebuild を作り直してみたので、これを $PORTDIR_OVERLAY で指定したところ (例えば /usr/local/portage ) に net-wireless というディレクトリを作って、 その下に解凍してください。それで emerge /usr/local/portage/net-wireless/madwifi-driver/madwifi-driver-0.1_pre20031213-r2.ebuild と打つか、ACCEPT_KEYWORDS=~x86 emerge madwifi-driver と打つかすると インストールされると思います。

 ただ、使ってみると ものすごく パケットロスが起こります。 私が使ってみたところだいたい 1/3 くらいのパケットが落ちます。 使い物になりません…。dmesg するとなんか

ath0: hardware error; resetting

とかいうメッセージがずらずら出ていますし…怪しすぎます。どなたかうまく いった方はぜひメールなどでご連絡ください。

10. 補足6

 上でも書きましたが、現在は 2.6.x に対する Makefile.inc のパッチ適用は 必要なくなったようです。

 Gentoo な方は、madwifi-driver-0.1_pre20040108.ebuild を emerge して みましょう。kernel 2.6.x でも快適に使えます ;-)

トップへ