2022年8月、ホームページを全面リニューアルしました! 情報を分かりやすくお伝えできるサイト作りを目指してまいります。

Linuxマシンにネットワークカードを組み込む!

ここでは、もともとネットワークに参加していないスタンドアロンLinuxマシンをネットワークに参加させる方法を説明する。ネットワークカードを初めから組み込みLinuxをインストールする場合は、OS側のハードウェアディテクションによりNICを認識してドライバを自動インストールする事が可能であるが、後からNICを取り付けた場合には、ディテクションがうまく行われない場合があるので、手動でのNIC認識方法を含めて説明を行う。


■ ドライバ組み込み動作を確認

NICを目的のPCに組み込む。その後、Linuxを起動したら、次の順にコマンドを入力して、ネットワークに接続できるか確かめる。

(1)NICドライバを組み込む。
(2)IPアドレスを割り当てる。
(3)pingコマンドやtelnetコマンドなどで、ネットワークに接続できたか確認する。
(4)次回の起動時には、コマンドを入力しなくても自動的にネットワークに接続できるようにネットワークの設定を保存する。と言う順に行う。

では、ドライバを組み込む。
Linuxでは、カーネル2.2ではデバイスドライバがモジュール化され、動的に組み込めるようになった。それらのドライバは、NIC用に限らず、以下のディレクトリに格納されている。

/lib/modules/<カーネルのバージョン>/

このディレクトリの中のnetディレクトリに、NIC用のドライバが入っている。ドライバには「.o」と言う拡張子がついている。
ドライバは、各NICが使用しているネットワークコントローラチップの種類に応じて使い分ける必要がある。例えば、Intel社製「i82558/i82559」(Ether Express Pro100等に使われている)ならば、「eepro100.o」である。

チップメーカーチップ名ドライバ名
米3COM3C905B-TX3c59x
DEC21140Atulip
米Inteli82558/i82559eepro100
台湾VIAVT86C100Avia-rhine

ドライバを組み込むには、insmodコマンド、またはmodprobeコマンドを利用する。
insmodコマンドは指定したドライバだけを組み込むのに対し、modprobeコマンドは指定したドライバに必要な別のドライバも同時に組み込まれる。ドライバの中には、別の指定のドライバが組み込まれていないと組み込まれない物もある。したがって、modprobeコマンドを使うことをお勧めする。
ただし、modprobeコマンドを正しく機能させるには、1つ特別なファイルが必要である。このようなドライバ間の依存関係は、/lib/modules/<カーネルのバージョン>/modules.depファイルに書かれている。modprobeコマンドは指定されたドライバの依存関係を、modules.depファイルから調べ、必要な全てのドライバを組み込む。そのため、modules.depファイルがないとmodprobeコマンドは正しくドライバを組み込まない。もしも、何らかの理由でmodules.depファイルが削除されても、次のコマンドを入力することで、modules.depを新たに作ることが出来る。

# depmod -a

このコマンドは、全てのドライバを調べて、その依存関係を/lib/modules/<カーネルのバージョン>/modules.depファイルに書き出す。実行するディレクトリは何処でもかまわない。
では、NIC用のドライバを組み込む。

# modprobe eepro100

ドライバの拡張子「.o」は、入力する必要はない。使用しているNICがi82558/i82559でなければ、ドライバ名の部分を対応する名前に変更すること。例えば、旧DEC(現コンパック)21140Aならば、

# modprobe tulip

と入力する。
次に、ドライバがうまく組み込めたかを確かめる。

# lsmod

このコマンドは、現在組み込まれているドライバを一覧表示するものである。ハードウェアに何らかの障害があって、正常にドライバが組み込めなかった場合には、組み込んだはずのドライバ名が表示されない。例えば、割り込み番号(IRQ)が正しく割り当てられていないなどである。PCIボードには、プラグアンドプレイ機構によってパソコン起動時にIRQが割り当てられるが、古いPC(マザーボード)のBIOSには、PCIボードに正しくIRQを割り当てられない物がある。そのようなPCでは、Windows9x等のようなプラグアンドプレイOSならば、OSがIRQを割り当てるので正しく動くが、プラグアンドプレイOSでないLinuxでは利用できない。また拡張スロットによってIRQ番号が決まっているマザーボードもある。そのような場合は、もしスロットが空いていれば、NICを別のスロットに差し替えるとうまく動作するときがある。
正しく組み込めた場合には、次のように表示される(eepro100以外は使用環境によって異なる)。

Module     Size   Used by
eepro100    12112   0  (unused)        ←組み込んだドライバ
nfsd       150936    8  (autoclean)
lockd       30856   1  (autoclean) [nfsd]
sunrpc      52356   1  (autoclean) [nfsdlockd]

注:NICの組み込みで、VIAのチップセットvia-rhineドライバは、ディストリビューションによっては標準でバンドルされていない場合があります。その場合は、katsuuraさんの PLANEX FNW-9702-T  Setup を参考にしてソースからコンパイルして使用してください。親切にかかれています。小生も大変参考になりました。

katsuuraさんのHPが見えないようなので、FNW-970X-Tのセットアップの仕方を説明します。(2001-11-10追加)

★ rhine102.tgz の解凍、コンパイルおよびインストール

ファイルを ここ からゲットしてください。

# cd /tmp
# tar zxvf rhine102.tgz
# cd via-rhine-1.02b
# ./trans via-rhine

★ 設定ファイルの編集

4.x以下の場合)

# vi /etc/conf.modules

6.0以上の場合)

# vi /etc/modules.conf

alias eth0 via-rhine

★ ドライバのロードとその確認

# lsmod

ここに既存のドライバが表示されている場合はそれを実行中のカーネルからアンロードしなければなりません。

# /etc/rc.d/init.d/network stop
# rmmod via-rhine

その後、新規のドライバをカーネルにロードします。

# depmod -a
# modprobe via-rhine
# lsmod

ここにvia-rhineが表示されていればOKです。


■ IPアドレスを設定してネットワークにアクセスする

ドライバが組み込めたら、IPアドレスを割り当てて実際にネットワークにアクセスしてみる。これには、ifconfigコマンドを利用します。
ここでは、以下のようなドメインネットワークを想定する。


     
ドメイン:mydomain
-------------------
|  PC1         PC2          |
|192.168.1.1    192.168.1.2        |
-------------------

# ifconfig eth0 192.168.1.2

ここで「eth0」がNICのデバイス名である。どのネットワークコントローラチップを使っていても同じである。また、1台のPCにNICを2マイク見込んだ場合には、1枚目がeth0、2枚目がeth1のようになる。
「192.168.1.2」が割り当てたIPアドレスである。ネットワークに別のPCがすでにつながっているので有れば、pingコマンドをを使って、ネットワークが正しくつなげられたかどうかを確かめることができる。

# ping 192.168.1.1

ここで、192.168.1.1は、既につながっていたPCのIPアドレスである。
もし「connect:Network is unreachable」と表示た場合には、ネットワークにアクセス出来ていないことを表す。その場合は、lsmodコマンドで、ドライバがちゃんと組み込めているか確認する必要がある。これに対し、ping実行時にPING 192.168.1.1(192.168.1.1) from 192.168.1.2 : 56 data bytes
64 byte from 192.168.1.1: icmp_seq=0 ttl=128 time=0.5 ms
64 byte from 192.168.1.1: icmp_seq=1 ttl=128 time=0.4 ms
64 byte from 192.168.1.1: icmp_seq=2 ttl=128 time=0.4 ms
64 byte from 192.168.1.1: icmp_seq=3 ttl=128 time=0.4 ms
64 byte from 192.168.1.1: icmp_seq=4 ttl=128 time=0.4 ms

— 192.168.1.1 ping statistics —
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.4/0.4/0.5 ms

などと表示されれば、ネットワークにつながっていることを表す。ネットワーク上に別のLinuxPCが動いていれば、telnetコマンドにIPアドレスを指定してアクセスすればログインできる。もし、ネットワークがいくつかのセグメントに分けられており、ゲートウェイを用意している場合には、routeコマンドでデフォルトゲートウェイなどを設定する。# route add default gw <IPアドレス>

これで、一応PCにネットワークがつながったが、再起動すると、また最初からコマンドを入力する必要がある。そのためには、再起動時に自動的にネットワークに接続させる必要がある。
その設定の前に、/etc/hostsファイルにIPアドレスとホストネームの定義を加えておく。
内容は、以下に示す。

127.0.0.1    localhost
192.168.1.1   pc1.mydomain  pc1
192.168.1.2   pc2.mydomain  pc2

次に、次回起動時に自動的にネットワークに接続するようにする。
NICに限らずデバイスドライバは、Linuxでは/etc/conf.modules(または/etc/modules.conf)ファイルに以下のように記述する。
alias eth0 eepro100

これで、ネットワーク設定完了!!


■ ネットワークPCカードが壊れたて、交換した場合の設定

小生の場合、何回かネットワークカードが壊れて交換している。その場合、通常は、

(1) ネットワークカードを交換する(特殊なカードは対象外)。

(2) ノートの電源を立ち上げる。

(3) 立ち上がった状態で、ほとんどの場合認識するはずである。

/etc/rc.d/init.d/pcmciaがリスタートした時に、カードを認識してドライバをロードする。さらに、/etc/rc.d/init.d/networkがリスタートした状態でネットワークが動作している。以上が通常の動作である。

(4) pingコマンドなどでネットワークが生きているか?確認する。

では、簡単に認識しなかった場合、どうするか?以下のような方法を行ってみる。

(1) /etc/sysconfig/pcmcia ファイルの内容をメモする。

(2) /etc/sysconfig/pcmcia ファイルの内容が、

[/etc/sysconfig/pcmcia]
————————
PCMCIA=no
PCIC=
PCIC_OPTS=
CORE_OPTS=
————————

となっている場合、次のコマンドを実行する。

# probe -mもしくは/sbin/probe -m

(3) 表示された文字をPCIC= に指定する。例えばi82365 と表示された場合はこれを PCIC= の後に指定し、PCMCIA=yes にする。
もし、エラーが起きる場合でも、i82365を指定しておく。

[/etc/sysconfig/pcmcia]
————————
PCMCIA=yes
PCIC=i82365
PCIC_OPTS=
CORE_OPTS=
————————

(4) 再起動する。

(5) pingコマンド等でネットワークが生きているか?確認する。

これで、カードが使える状態になるはずである。

以上

コメント