R8169からR8168へのNICドライバの入れ替え on ubuntu

RealtekNICドライバーR8169で色々と問題があるみたいでうちでもR8169からR8168のドライバに入れ替えました。意外と大変だという記事も多いのですが結構簡単に入れ替えられます。Ubuntu(2.6.32-24-generic)で動作させています。

http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=4&PNid=5&PFid=5&Level=5&Conn=4&DownTypeID=3&GetDown=false#RTL8111B/RTL8168B/RTL8111/RTL8168%3Cbr%3ERTL8111C/RTL8111CP/RTL8111D%28L%29%3Cbr%3ERTL8168C/RTL8111DP

からLINUX driver for kernel 2.6を落とし

# bzip2 -dc r8168-8.019.00.tar.bz2 | tar xvf -
# cd r8168-8.019.00
# ./autorun.sh
Check old driver and unload it.
rmmod r8168
Build the module and install
r8168-8.019.00/src/r8168_n.c: In function ‘rtl_get_eeprom’:
r8168-8.019.00/src/r8168_n.c:1790: warning: ‘ret’ may be used uninitialized in this function
[: 48: r8168: unexpected operator
Backup r8169.ko
rename r8169.ko to r8169.bak0
Depending module. Please wait.
load module r8168
Completed.

# cp /boot/initrd.img-`uname -r` /boot/initrd.img-`uname -r`.bak
# mkinitramfs -o /boot/initrd.img-`uname -r` /lib/modules/`uname -r`
# reboot


dpkg: バージョン '/lib/modules/(unameの出力)' は不正な構文です: バージョン番号に無効な文字があります
というメッセージが出るという報告を受けました。
その場合は/lib/modules/」を削除して実行すると通るみたいですが、私は試していませんー。参考までにー!

ドライバdownloadしてautorun.shを走らせてドライバを更新してinitrd.imgをつくり直して再起動という流れです。

blacklist.confとか色々といじったりしている方法もあるみたいですが上記のやり方でR8169からR8168ドライバへの入れ替えができます。

ドライバが正しくインストールされているかはlspciとかlsmodとか方法はありますがethtoolが一番わかり易いです。

#ethtool -i eth0
driver: r8168
version: 8.019.00-NAPI
firmware-version: 
bus-info: 0000:02:00.0

でドライバの確認ができます。ethtool eth0でさらに多くの情報の確認ができます。
ネットワークの速度を測りたい場合は2台のコンピュータでnetperfとnetserverを使います。


サーバ(debian/ubuntu) IPは192.168.0.1

# apt-get install netperf
# netserver
Starting netserver at port 12865

クライアント(debian/ubuntu)

# apt-get install netperf
# netperf -H 192.168.0.1
TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.0.1 (192.168.0.1) port 0 AF_INET : demo
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

262140  16384  16384    10.01     939.56 

eth0が939.56M/sec出ていてギガビット回線であることが分かります。