.Lastupdate: Wed Jul 24 11:42:41 2002.

cardbus の NIC

現在, わしの仕事場はこうなっておりまして, この組み合せでのミソは, ということで, 三つのマシンに作業を効率良く振り分けられていると 思います. 仕事上, 仕方なく Windows を使わなければいけない人でよくある パターンは, 一台のマシンに VMWare を突っ込んで, というものでしょうが, その場合は X Window System は同じマシン上で動いているわけですから 速度的なストレスは感じないでしょう. しかし今回の組み合せの場合, 1 号機と 2 号機の間の通信が律速になります.

で, これまでわしは corega Ether PCC-TD を使っていたのですが, これは価格が 2000 円くらいと安く, 「Linux 対応」などというシールも貼ってあるものですから, 安心して?使っておりました. しかし, こいつは 10 Base なので, 遅い. とくに, 2 号機の Mozilla をぶん回したりすると, Mozilla の せいではないのに, とろく感じてしまう. 因みに, ファイルの転送や ssh を使う分には 10 Base で十分だと 思うのは気のせいでしょうか. 問題は X なんすよ.

それはともかく, 先日秋葉原で corega FastEtherII CB-TX が 2000 円で売っていたので, 買ってしまいました. こいつは 100 Base です.

ところが, CB-TX は Cardbus であることと, バリエーションが多く決定打がどれか良くわからない tulip ドライバ を使わなければならないため, Linux で使うのには一工夫が必要です. 因みに, corega 社の PC-UNIX 対応表 によると kernel 2.2 ではメーカー側が対応してくれているようですが, 2.4 の記述はありません.

kernel 2.4 では, pcmcia_cs がカーネル本体に取り込まれており, これまで使っていた PCC-TD はそのドライバで動いておりました. 因みに, potato で kernel 2.4 に上げるためのページ Packages to run kernel 2.4.x on Debian potato. kernel 2.4 では, cardbus の pcmcia カードは hotplug という仕組みで pcmcia_cs を経由せずに認識されるようです. kernel の make config 時に hotplug を有効にすること (CONFIG_HOTPLUG 周辺), それから hotplug というパッケージ ( ここに .deb あり) を入れて /sbin/hotplug を使う, あるいは murasaki (another HotPlug) を使う必要があります.

で, そのときの dmesg

Jul 16 15:44:04 was2 kernel: cs: cb_alloc(bus 2): vendor 0x1011, device 0x0019
Jul 16 15:44:04 was2 kernel: PCI: Enabling device 02:00.0 (0000 -> 0003)
Jul 16 15:44:04 was2 kernel: Linux Tulip driver version 0.9.15-pre9 (Nov 6, 2001
)
Jul 16 15:44:04 was2 kernel: PCI: Setting latency timer of device 02:00.0 to 64
Jul 16 15:44:04 was2 kernel: tulip0:  EEPROM default media type Autosense.
Jul 16 15:44:04 was2 kernel: tulip0:  Index #0 - Media MII (#11) described by a 
21142 MII PHY (3) block.
Jul 16 15:44:04 was2 kernel: tulip0:  Index #1 - Media AUI (#2) described by a 2
1143 reset method (5) block.
Jul 16 15:44:04 was2 kernel: tulip0:  Index #2 - Media MII 100baseT4 (#15) descr
ibed by a  (6) block.
Jul 16 15:44:04 was2 kernel: tulip0: ***WARNING***: No MII transceiver found!
Jul 16 15:44:04 was2 kernel: eth0: Digital DS21143 Tulip rev 65 at 0x4000, 00:00
:F4:62:39:4B, IRQ 9.
Jul 16 15:44:04 was2 cardmgr[227]: socket 0: CardBus hotplug device
Jul 16 15:44:04 was2 /etc/hotplug/pci.agent: ... no modules for PCI slot 02:00.0
Jul 16 15:44:04 was2 /etc/hotplug/net.agent: invoke ifup eth0


なんだか, 「No MII transceiver found!」と怒られています. ifconfig でも eth0 にネットワークに接続されていないことが判ります. どうやら, kernel 2.4 に含まれる tulip ドライバではこのカードは 動かないようです. こちらに, Linux Ethercard Status, Diagnostic and Setup Utilities tulip-diag.c というデバッグ用のツールがあります. pcmcia-cs: tulip_cb driver にも情報が.

結局, kernel 2.4 に pcmcia_cs を別個につけることで, 解決しました. pcmcia-source 3.1.33-5.bunk のソース中の tulip_cb.c に tulip_cb.c.diff のパッチをあてます.

/etc/pcmcia/config.opts は

card "Corega PCC-TD Ethernet"
  version "corega K.K.", "corega Ether PCC-TD"
  bind "pcnet_cs"

 card "Corega FastEther CB-TX Ethernet Card"
  manfid 0xc00f, 0x0000
 bind "tulip_cb"


potato の pcmcia_cs パッケージをそのまま使っていると,

cs: warning: no high memory space available!


と怒られますから, PCMCIA-HOWTO を読んで, /etc/pcmcia/config.opts の

# High port numbers do not always work...
include port 0x1000-0x17ff


の部分のコメントをはずし有効にします. すると, こんな感じで syslog

cs: cb_alloc(bus 2): vendor 0x1011, device 0x0019
PCI: Found IRQ 9 for device 00:09.0
cs: cb_config(bus 2)
cs: IO port probe 0x0100-0x04ff: excluding 0x170-0x177 0x370-0x377 0x3c0-0x3e7
cs: IO port probe 0x0178-0x036f: clean.
cs: IO port probe 0x0378-0x03bf: clean.
cs: IO port probe 0x03e8-0x04ff: clean.
cs: IO port probe 0x0800-0x08ff: clean.
cs: IO port probe 0x0a00-0x0aff: clean.
cs: IO port probe 0x0c00-0x0cff: clean.
cs: IO port probe 0x1000-0x17ff: clean.
  fn 0 bar 1: io 0x200-0x27f
  fn 0 bar 2: mem 0x600c0000-0x600c03ff
  fn 0 rom: mem 0x60080000-0x600bffff
  irq 9
cs: cb_enable(bus 2)
  bridge io map 0 (flags 0x21): 0x200-0x27f
  bridge mem map 0 (flags 0x1): 0x60080000-0x600c0fff
tulip_attach(device 02:00.0)
tulip.c:v0.91g-ppc 7/16/99 becker@scyld.com (modified by danilo@cs.uni-magdeburg.de for XIRCOM CBE, fixed by Doug Ledford)
eth0: Digital DS21143 Tulip rev 65 at 0x200, 00:00:F4:62:39:4B, IRQ 9.
eth0:  EEPROM default media type Autosense.
eth0:  Index #0 - Media MII (#11) described by a 21142 MII PHY (3) block.
eth0:  Index #1 - Media (no media) (#16) described by a 21143 reset method (5) block.
eth0:  Index #2 - Media (no media) (#16) described by a 21143 shutdown method (6) block.
eth0:  MII transceiver #1 config 3000 status 7809 advertising 01e1.
eth0: Setting full-duplex based on MII#1 link partner capability of 45e1.


MII transceiver なるものも動いているようです. ifconfig の出力も正常です.

% ifconfig
eth0      リンク方法:イーサーネット  ハードウェアアドレス **:**:**:**:**:** 
          inetアドレス:***.***.***.*** ブロードキャスト:***.***.***.*** マスク:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RXパケット:1299435 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:616592 エラー:3 損失:0 オーバラン:0 キャリア:3
      衝突(Collisions):0 


適当なファイルを ftp してみました.

> get OOo_1.0.0_Win32Intel_install_ja.zip 

Receiving file: OOo_1.0.0_Win32Intel_install_ja.zip 
100%  0 ==========================================> 51292909 bytes. ETA:  0:00
OOo_1.0.0_Win32Intel_install_ja.zip:  51292909 bytes received in 4.63 seconds, 
10.56 MB/s.

Receiving file: OOo_1.0.0_Win32Intel_install_ja.zip 
100%  0 ==========================================> 51292909 bytes. ETA:  0:00
OOo_1.0.0_Win32Intel_install_ja.zip:  51292909 bytes received in 55.05 seconds,
909.97 kB/s.


上が CB-TX で, 下が PCC-TD です. 約 10 倍の速さになっており, こんなものでしょうか. xengine 値は, 2400 rpm (Reflection-X, Canopus Spectra F11, モニタは A902M の CRT), 1900 rpm (Reflection-X, ATI All in wonder Radeon, モニタは AS4311U の液晶) くらい出まして, ノート本体 (Vaio SR1G) の液晶ディスプレイでの値 1800 rpm (XFree86) よりも速いくらいです.

今回も, なんとか無駄なハードを出さずに済んだ. ということで.