R8168ドライバを継続して認識させる Fedora18編

というわけで、この時についていたPCIのLANカードを外して、AtomマザーにのっているLANチップ側を使うようにしてみました。

と言うのも理由があったからなのですが・・・。

telnet-serverへの接続時に文字表示が乱れる

そもそもの起こりがこれです。LAN内部なのでWindows側からTeraTermにてTelnet接続で操作するのが私のやり方なのですが、

さすがにまともに表示されないのでは使いようがないわけですね。この現象を解決できた人がいましたら是非連絡を。

結局は解決できなかったのですが、これの原因のような現象としてLANドライバの更新を行いました。

というのも、正しいはずのR8169側もなぜかFrameDroppedが

Atomマザーに実装されているLANチップはR8168であることはあらかじめ分かっていたので使わないようにして

PCIスロットにR8169で正常に動くはずのチップを積んだLANカードを挿して使っていました。

チップ自体はPCI+GbEの時代に低価格品でよく使われていた(と思われる)RTL8169S-32というものです。

手元には3枚のPCI GbEカードがあるのですが、すべて同じチップでした。

まあ、それはさておき。

そのチップで気になったのでifconfigから状態を見てみると

RX側にFrameDroppedが記録されていて・・・いやな予感がしたので何とかしてみることにしました。

元となる資料を再検索

前に同じようなことをやったわけですが、前回はkernelの更新を行うとドライバが自動更新されない、と言う状態だったので

自動更新まで行うように設定するようにしました。

参考にしたのは

CentOSにNICを手動インストールした人は、正しいドライバが入っているかチェックしたほうがよさげ – akiyan.com

カーネル・アップデート後も r8168 ドライバを使うには-2 – metastable blog

です。この二つを元にFedora18用の動作を書き加えます。

まずはドライバをダウンロード

Realtekのドライバのページから最新のドライバをダウンロードします。

今回使ったのは8.035.00です。新しくなっている分だけ作業が違いますので注意です。

対象は「LINUX driver for kernel 3.x and 2.6.x and 2.4.x」ですね。

R8169を無効化する

ここからはネットワークが基本的に使えない物として行います。コンソールから頑張ってください。

まずはR8169がロードされているか調べます。

# lsmod | grep r8169

引っかかったらロードされていますので削除します。

# rmmod r8169
# updatedb

以降ロードされないように/etc/modprobe.d/blacklist.confに追記を行います。

たぶんrmmodがなくてもこのリストに記述するだけでロードされなくなるような気はしますが・・・。

# Disable r8169 driver
blacklist r8169

最後に再起動です。

# reboot

R8168をとりあえずインストール

ドライバファイルを解凍し、インストールします。(以降ドライバのバージョンを8.035.00とします。違うときは読み替えてください。)

# tar -xjf r8168-8.035.00.tar.bz2
# cd r8168-8.035.00
# make clean modules
# make install
# depmod -a
# insmod ./src/r8168.ko

インストールを確認します。

# lsmod | grep r8168

表記があれば成功です。そしてLANのインターフェイスを回復させます。(LANデバイスをp21p1とします)

# ifconfig p21p1 up

うまく構築できていればこれで通信が出来るようになります。

なお、元からデバイスを設定していないときは

# vi /etc/sysconfig/network-scripts/ifcfg-p21p1

あたりで設定をし直すなりしてください。

ドライバの自動インストールを設定

このままだとyumなどでkernelを入れ替えるとドライバがない状態となり、updateのたびにドライバのインストールが必要になります。

それを自動で行うようにします。そのときに使われるのがDKMSと呼ばれるサービスです。

kernelの更新時にドライバを自動的に作成してくれるサービスです。

まずはインストールから。

# yum install dkms

インストールが完了した後はドライバを作成するときに使ったファイルを/usr/srcにセットします。

上からの続きなので、カレントディレクトリはドライバファイルのディレクトリのはずですね。

# mv src /usr/src/r8168-8.035.00
# cd /usr/src/r8168-8.035.00
# make clean

ソースコードがあるディレクトリにdkms.confを用意します。

PACKAGE_NAME="r8168"
PACKAGE_VERSION="8.035.00"
MAKE[0]="make modules"
CLEAN[0]="make clean"
BUILT_MODULE_NAME[0]="r8168"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net"
AUTOINSTALL="YES"

面倒なのが、ここでMakefileにも手を入れる必要があります。

ドライバのMake時に構築対象となるkernelのバージョンが渡されますが、それを受け取ってbuildしなければならないのですが、

どうもそのときの定義がかなりまずいらしく、そのままdkmsに読ませるとbuildが出来ません。

上記の設定だとdkmsからはソースコードのディレクトリで

make KERNELRELEASE=[更新対象のkernelバージョン文字列(プラットフォーム名を含む)] modules

と、自動的にKERNELRELEASEの定義が追加されますので、それを受けます。

Makefileの中央部はたぶんこうすればいいかな。

CONFIG_DOWN_SPEED_100 = n
CONFIG_ASPM = y
obj-m := r8168.o
r8168-objs := r8168_n.o r8168_asf.o rtl_eeprom.o rtltool.o
EXTRA_CFLAGS += -DCONFIG_R8168_NAPI
EXTRA_CFLAGS += -DCONFIG_R8168_VLAN
ifeq ($(CONFIG_DOWN_SPEED_100), y)
	EXTRA_CFLAGS += -DCONFIG_DOWN_SPEED_100
endif
ifeq ($(CONFIG_ASPM), y)
	EXTRA_CFLAGS += -DCONFIG_ASPM
endif
ifeq ($(KERNELRELEASE),)
	BASEDIR := /lib/modules/$(shell uname -r)
else
	BASEDIR := /lib/modules/$(KERNELRELEASE)
endif
KERNELDIR ?= $(BASEDIR)/build
PWD :=$(shell pwd)
DRIVERDIR := $(shell find $(BASEDIR)/kernel/drivers/net -name realtek -type d)
ifeq ($(DRIVERDIR),)
	DRIVERDIR := $(BASEDIR)/kernel/drivers/net
endif
RTKDIR := $(subst $(BASEDIR)/,,$(DRIVERDIR))
.PHONY: all
all: clean modules install
.PHONY:modules
modules:
	$(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
.PHONY:clean
clean:
	$(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) clean
.PHONY:install
install:
	$(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) INSTALL_MOD_DIR=$(RTKDIR) modules_install

KERNELRELEASEを与えられたときに下にあるビルドルールが読まれないようになっていたのでそれを補正した物です。

コンパイルフラグを変更したい場合はご自由に。

最後にdkmsに登録を行います。

# dkms add -m r8168 -v 8.035.00
# dkms build -m r8168 -v 8.035.00
# dkms install -m r8168 -v 8.035.00

手順を書き記しておかないと後で分からなくなりそう

と言うことでその手順を書いておきました。

ちなみに、これによりAtomマザー側のLANチップを使うようにしたおかげでWOLが有効になる、と言う副次効果がありちょっとうれしいです。

でもやっぱりtelnet-serverの動作不良は良くならない・・・。


コメントを残す

メールアドレスが公開されることはありません。

*

この記事のトラックバック用URL