2007-02-02

FreeBSDのRealtek RTL8110SC用イーサネットドライバ

マザーボード内蔵のRTL8110SCでre0: watchdog timeoutが出るおかげでacpiを切ってしまった新マシンであるが、ダメもとでRealtekのサイトに行ってみたところ、ダウンロードページで8110で検索して出てきたRTL8110SC(L) (Software)のページに、FreeBSD用があっさりと置いてあった。Readme.txtによれば、4.x/5.x/6.0でテストしたとのことである。

Readme.txtにはいろいろと細かい手順が書いてあるが、ようは、

  1. reのない(適当にnodevice reとかした)configファイルを用意する。
  2. /usr/src/sys/modules/Makefileからreを消す。
  3. 付属のif_rl.cとif_rlreg.hを/usr/src/sys/pci内の同名ファイルに上書きコピーする。
  4. カーネルを普通にコンパイルしてインストールする。
  5. いじったファイルを元に戻しておく(でないと、忘れてcsupとかしてどうなるか予測不能)。
だけである。ただし、3.で、if_rlreg.hをそのまま使ってしまうと、/usr/src/sys/dev/mii/rgephy.cが参照しているRL_GMEDIASTAT*のマクロが消えてしまうので、もとのif_rlreg.hから該当する定義をそのままコピーしておけばよい(たぶん)。

そして、/etc/rc.confのifconfig_re0をifconfig_rl0に書き換え、/boot/device.hintsのhint.acpi.0.disabled="1"を消し、再起動した。そうすると、見事に、
rl0: <Realtek RTL8169SC Gigabit Ethernet Adapter> port 0xce00-0xceff mem 0xfdeff000-0xfdeff0ff irq 21 at device 6.0 on pci3
と認識され(8110SCは8169SC扱いになるようだ)、rl0による接続が可能になった。

ネットワークの負荷を上げてみても、re0のようにwatchdog timeoutとlinkのDOWN/UPを起こしたりしないし、acpiを切った状態でもtcpdumpを開始したり終了したりする際に、
re0: promiscuous mode disabled
re0: link state changed to DOWN
re0: link state changed to UP
となっていた問題も解消した。

最近もif_re.cとかはよく更新されているようであるが、早くこの手間をかけずに済むようになることを期待。

0 件のコメント: