RTL8139で100Base-TX - How to set up 100Base-TX with RTL8139

索引へ戻る
  1. イーサネットボードの差し込み - How to insert ethernet board
  2. rtl8139用ドライバのコンパイル - How to compile a driver for rtl8139
  3. MacOS用rtl8139ドライバの設定 - How to set up a driver for rtl8139 on MacOS
  4. 10Base-Tと100Base-TXの速度比較 - Comparison between 10Base-T & 100Base-TX in speed

仕事も一段落し、フラフラと近所の量販店に迷いこんだ私は、そこで、LD-10/100S (Laneed) ELECOM - 1280円に出会ってしまいました。箱には、”Realtek 8139 chip を採用”とあるではありませんか! 世の中は既にギガビットイーサネットの時代だと言うのにいまだに10Base-Tの私は気がつくと、LD-PSW08N (Laneed) ELECOM - 5780円というswitching hubと100Base-TX対応のケーブルも一緒に握りしめ、レジに向かっていました。帰ってから確認してみると載っている蟹さんチップはrtl8139Cでした。

今回は、上記のモノでPowermac 8500/120100Base-TXにすべく試みてみました。結論から言うとlinuxppc、MacOSともに実現できました (^o^)。ようやく、linuxppcに特有の話題を書くことができます。

私の環境はこちら
情報源は
Network Driver Updates for Linux kernels 1.2.0 through 2.2
Using Linux Drivers as Modules

1. イーサネットボードの差し込み - How to insert ethernet board

こんなところまで見に来て下さる方には釈迦に説法でしょうが、作業メモとして書いておきます。まず、Powermac 8500/120の後面の4つのネジを10円玉を使って緩め、外枠を5cm程後方へずらしてから上へ持ち上げて抜き取ります。PCI slotは本体の後面下部に3つあります。一番上はAVケーブルが邪魔になるので、2番目のslotにLD-10/100Sを挿し込みました。これ、かなり力が要ります。”グガッ”と言う嫌な音がしましたが、なんとかboardの切れ込みの奥までしっかり入れることができました。ま、私の拙い説明を読むよりも8500分解手順Power Mac 8500の増設図解(メモリ編)と言ったところを参考にした方が良いでしょう。(^^;;;;;;

トップへ戻る

2. rtl8139用ドライバのコンパイル - How to compile a driver for rtl8139

linux-2.4系のカーネルでは8139tooと言うのがドライバになってます。これは、カーネルソースの/usr/src/linux/drivers/net/にあります。最新版はSourceForge: Project Info - gkernelからdownloadできます。ただし、最新版は2.4.3以降用です。私はPM8500/120には2.4.2-pre3を入れてますので(私の環境参照)、カーネルソースに付属している方の8139tooを使いました。

まず、作業用のディレクトリを作ります。

$ cd /usr/local/src
$ mkdir modules

この中に/usr/src/linux/drivers/net/8139tooをコピーしておきます。

最初に挙げた情報源に従えばドライバを使うにはpci-scan.cも必要ですので、下記のものを取って来て、上記のmodules directoryに入れておきます。

さらに、8139too-0.9.17.tar.gz を取って来てtar zxvfで展開し、8139too以外のものをmodules directoryにコピーします。勿論、2.4.3以降のカーネルをお使いの場合は最新版の8139tooをそのまま使えば良い訳です。

ソースの最後の部分に書いてあるcompile-commandに従ってpci-scan.cmii-diag.cをコンパイルします。


$ gcc -DMODULE -D__KERNEL__ -DEXPORT_SYMTAB -Wall -Wstrict-prototypes -O6 -c pci-scan.c

$ gcc -Wall -Wstrict-prototypes -O mii-diag.c -DLIBMII libmii.c -o mii-diag

肝心の8139tooは、


gcc -DMODULE -D__KERNEL__ -O6 -c 8139too.c

でもよいのですが、8139too-0.9.17.tar.gzについているMakefileを下記のように修正して(と言うか、いくつかコメントアウトしただけ)、

#
# Kernel includes.  Please avoid
# using '/usr/include' unless all
# other options exhausted.
#
KINCLUDES=/usr/src/linux/include
#KINCLUDES=/spare/cvs/linux_2_3/include

#
# uncomment line below if you have SMP
#
#SMPFLAGS=      -D__SMP__ -DCONFIG_SMP=1

#
# Unless you have a 386/486, you shouldn't need
# to change anything below here...
#

#CPUFLAGS=      -DCPU=586 -march=i586

MODULE=         8139too

CC=             gcc

KERNFLAGS=      \
        -D__KERNEL__ -I$(KINCLUDES) $(CPUFLAGS) $(SMPFLAGS) \
        -Wall -Wstrict-prototypes \
        -O2 -fomit-frame-pointer -fno-strict-aliasing -pipe \
        -DMODULE

CFLAGS=         -O2 -fomit-frame-pointer $(KERNFLAGS)

default::       all

all::           $(MODULE).o

$(MODULE).o:    $(MODULE).c
        $(CC) $(CFLAGS) -c $<

clean:
        rm -f *.o

ソースとMakefileをmodules directoryに置き、makeしました。

$ pwd
$ /usr/local/src/modules
$ make

後で分かったのですが、比較してみるとこのMakefileを使ってコンパイルしたモノの方が最初の簡単なオプションでコンパイルしたものよりほんの少し(6-7%)速くなります。

出来上がったpci-scan.o8139too.o/lib/modules/2.4.2-pre3/kernel/drivers/net/にコピーします。mii-diagの方は/home/watashi/bin/にコピーしました。

最後に、設定ファイルを書き込みます。まず、/etc/modules.confに下記を追加します。


alias eth1 8139too

次に、/etc/sysconfig/network-scripts/ifcfg-eth0を/etc/sysconfig/network-scripts/ifcfg-eth1としてコピーし下記のように書き換えました。


DEVICE=eth1
IPADDR=192.168.10.10
NETMASK=255.255.255.0
NETWORK=192.168.10.0
BROADCAST=192.168.10.255
ONBOOT=yes     <----- ここをyesにする
BOOTPROTO=none
..................

/etc/sysconfig/network-scripts/ifcfg-eth0の方は、ONBOOT=noに書き換えておきます。または、netcfgなどのGUI toolで設定するのも良いでしょう(余談ですが、netcfgは割と使いやすいのですが、linuxconfはどうも好みに合いません、雑誌などで使い方を見てもいまいちピンときません。まあ、好きずきでしょうが.....)。これで、rebootすれば、eth1がactiveになりrtl8139を介して100Base-TX machineとなるはず ............

うっ、ならない、どうしてだー!! そもそも、スウィチングハブのアクティビティランプが点灯しない。これはケーブルがおかしいに違いないと考えてリピータハブに繋ぎ替えてみるとちゃんとランプが点灯し10Mbpsでは使えます(笑)。ところが、スウィチングハブに繋ぎ替えるとiMacからの分はランプが点灯し100Mbpsであることも示すのですが、8500/120の分はやっぱりアクティビティランプすら点灯しない。色々設定を替えたりしてみたのですがどうやってもダメで、その夜はフテ寝しました(ToT)。

しかし、うれしいことに、翌日、起動してみると何事もなかったかのように100Mbpsで接続できるようになっていました (^o^)。何がどうなっていたのか謎ですが、夜中に作業をしていると時々こういうことがあります(っていうか、こんなのは私だけ???)。

うまく動くようになってからの起動メッセージの関連部分(dmesgの最後の方)はこうです。これでみると、2.4.2-pre3の8139tooは0.9.13ですね。ちゃんと全二重で動いているし、可愛いやつ(笑)。

8139too Fast Ethernet driver 0.9.13 loaded
PCI: Enabling device 00:0e.0 (0004 -> 0007)
eth1: RealTek RTL8139 Fast Ethernet at 0xc5840000, 00:90:fe:21:d2:a3, IRQ 24
eth1:  Identified 8139 chip type 'RTL-8139C'
eth1: Setting full-duplex based on MII #32 link partner ability of 45e1.

ifconfig -a はこんな感じです。

eth0      Link encap:Ethernet  HWaddr 08:00:07:AF:8E:DE  
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 

eth1      Link encap:Ethernet  HWaddr 00:90:FE:21:D2:A3  
          inet addr:192.168.10.10  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:70009 errors:0 dropped:0 overruns:0 frame:0
          TX packets:34194 errors:0 dropped:0 overruns:6 carrier:0
          collisions:0 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:3904  Metric:1
          RX packets:30128 errors:0 dropped:0 overruns:0 frame:0
          TX packets:30128 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 

tap0      Link encap:Ethernet  HWaddr FE:FD:00:00:00:00  
          inet addr:xxx.xxx.xxx.213  Bcast:xxx.xxx.xxx.255  Mask:255.255.255.0
          UP BROADCAST RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:816 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1019 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 

mii-diagを使うとこんな感じです。

$ mii-diag -av eth1 mii-diag.c:v2.00 4/19/2000 Donald Becker (becker@scyld.com) http://www.scyld.com/diag/index.html MII PHY #32 transceiver registers: 1100 782d 0000 0000 01e1 45e1 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000. Basic mode control register 0x1100: Auto-negotiation enabled. You have link beat, and everything is working OK. This transceiver is capable of 100baseTx-FD 100baseTx 10baseT-FD 10baseT. Able to perform Auto-negotiation, negotiation complete. Your link partner advertised 45e1: Flow-control 100baseTx-FD 100baseTx 10baseT-FD 10baseT, w/ 802.3X flow control. MII PHY #32 transceiver registers: 1100 782d 0000 0000 01e1 45e1 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000. Basic mode control register 0x1100: Auto-negotiation enabled. Basic mode status register 0x782d ... 782d. <--- ここ Link status: established. Capable of 100baseTx-FD 100baseTx 10baseT-FD 10baseT. Able to perform Auto-negotiation, negotiation complete. This transceiver has no vendor identification. I'm advertising 01e1: 100baseTx-FD 100baseTx 10baseT-FD 10baseT Advertising no additional info pages. IEEE 802.3 CSMA/CD protocol. Link partner capability is 45e1: Flow-control 100baseTx-FD 100baseTx 10baseT-FD 10baseT. Negotiation completed.

何だか良く分かりません (^^;;;;;。
Linux Ethercard Status, Diagnostic and Setup UtilitiesUnderstanding MII Transceiver Status Infoを参考にしてみると、

The MII status word is the most useful MII register. A typical good status value 0x78*d, while a transceiver without link beat typically reports 0x78*9.

と、あります。私の場合は0x782dですので、うまく動いているようです

トップへ戻る

3. MacOS用rtl8139ドライバの設定 - How to set up a driver for rtl8139 on MacOS

情報源は
激安LANカードはカニさんチップ(RTL8139)

まず、Realtekのサイトから、MacOS 8.5, 8.6 and MacOS 9.0, 9.1 driverをダウンロードします。私はこのドライバを使うためだけに8500/120を7.5.5から8.6にupgradeしました。おかげで、メモリー不足に悩まされそうです。64Mしかありませんので....(ToT)。その後、更に調べてみると、7.5.5でもこのドライバが動いた方もいらっしゃるようです。保証の限りではないですが.......まっ、とにかく、下記のサイトからドライバを取って来て下さい。

Computer Peripheral & Multimedia ICs

これを、Stuffit Expander等で解凍します。この中にあるRTL8139x Driverがドライバになります。付属のdocを読むとApple システムプロフィールで使用するethernet boardを調べて、カード名:pci10ec,8139と表示されない場合にはパッチが必要になると書いてあります。私の場合がこれでした(笑)。そこで、RTL8139x DriverをJeditでopenし、pci10ec,8139とある部分をすべて(2か所)Apple システムプロフィールで表示された通りに修正しました。あとは、このドライバをシステムフォルダの機能拡張にいれるだけです。これで、再起動すれば、100Base-TXになりました。実際に測定はしていませんが、Appletalkでの体感速度は明らかに向上しました。

トップへ戻る

4. 10Base-Tと100Base-TXの速度比較 - Comparison between 10Base-T & 100Base-TX in speed

最後に、10Base-Tの時との速度比較をNFSでやってみました。方法と10Base-Tの結果については、NFSの最適化 - Optimizing NFS performance を参照して下さい。

NFS Performance on 100Base-TX
rsize & wsizewrite time (sec)write speedread timeread speed
8192 bytes2m41.391s1586kB/sec2m33.742s1665kB/sec
16384 bytes2m30.618s1700kB/sec2m36.836s1632kB/sec
32768 bytes2m42.481s1576kB/sec2m46.257s1540kB/sec

うーん、せいぜい10Base-Tの2.4倍ですか。10倍になるとは思ってなかったけど、せめて4-5倍にはなって欲しかったなあ。これだと、100Mbpsの13%ぐらいしか使ってないですねえ。こんなものなのでしょうか??? まあ、今時、この程度の出費でパフォーマンスが2倍以上になれば上等と考えるべきなのでしょうがね。

試しに33M程度のファイルをftpで8500/120からiMac revBへgetしてみたところ、1981kB/secでした。つまり、100Mbpsでもネットワークの接続速度自体がこんな程度のようです。とりあえず、一番速い16384bytesを選ぶことにしました。しばらく使用してみた感想ですが、体感でも10Base-Tの時より明らかに速いです。また、packet lossもありませんし、いきなり落ちると言ったこともありません。やはり、100Base-TXにして良かったなと思います (^o^)。さあ、いよいよ、次はギガビットイーサネットだあ ---> 8500/120は買い替えるってこと?(笑)。

トップへ戻る

索引へ戻る