2009/11/16(Mon)Debian4にIntel PCI-E GbEを認識させる方法

2009/11/16 23:58 Software::Linux
別にDebian 4.0/etchに限ったことではないが、古いkernelのLinuxを使っている場合、PCI ExpressのNICなどのドライバを持っていないことが多く、OSをインストールできてもネットワークが全滅ということがある。*1

Intelの場合は幸いにもドライバを公開してくれているので楽ではあるが、Windowsの時と比べてダイアログに従ってポンポン行けばよいほど楽ではないので、いろいろ試行錯誤してみて解決策を見出したので、そのメモ。

*1 : ifconfig -aでloしか出てこないときの寂しさといったらもう……

ダウンロード

今回tryしたマシンはhp compaqのdx7500 SFF PCという、BTO PC。
構成表の「インテル(R) WG82567V ギガビット・ネットワーク・コネクション」を頼りにintelを探すと、82567に該当するドライバを発見。
以下からダウンロード。
Network Adapter Driver for PCI-E Gigabit Network Connections under Linux*

インストールしてみる

とりあえずマニュアル通りにやってみる。
$ cd
$ tar zxvf e1000e-1.0.15.tar.gz
$ cd src
$ sudo make install
すると、カーネルソースがないと怒られる。
ま、そりゃそうか。
Windows慣れしてると「ドライバインストールにカーネルが要る」という発想がイマイチだな…。

kernel準備

自分が使っているのはDebian 4.0/etchのrev6なので、kernel.orgからlinux-2.6.18.6.tar.bz2とかをダウンロードして/usr/src/に解凍。
# mv linux-2.6.18.6.tar.bz2 /usr/src
# cd /usr/src
# tar jxf linux-2.6.18.6.tar.bz2

適宜小細工

カーネルソースのパスを見つけてくれない*2ので、/usr/src/linuxにシンボリックを張るのが楽。
# ln -s linux-2.6.18.6 linux
version.hが無いという問題はREADMEにも書いてあるようにmakeすりゃいいのでする。
# cd /usr/src/linux/
# make include/linux/version.h
コンフィグがautoconf.hという名前で無いといけないらしいのでシンボリック。
# ln -s config.h autoconf.h
で、これでmakeやったらコンパイラがないと言われたwこれはひどい……

*2 : uname -rの結果は、'2.6.18-6-686'で解凍ディレクトリに該当しない

gccインストール

# aptitude install gcc
ネットワークが使えないので、CD-ROMよりaptインストール。

Makefile修正

gccをインストールして再度makeに挑戦すると
This driver is not supported on kernel versions older than 2.4.0
カーネルが2.4.0以下だと!?そんなはずはない…。

色々追っていくと、Makefileのカーネルバージョンが入るべきKVERに何も入っていないことが判明したので、代入しても良いかと思ったが、とりあえずunameコマンドを使う事に。
Makefileをいじって177行目あたりのKVERの定義している下に
# get the kernel version - we use this to find the correct install path
KVER := $(shell $(CC) $(EXTRA_CFLAGS) -E -dM $(VERSION_FILE) | grep UTS_RELEASE |        awk ' print $$3' | sed 's/\"//g')
KVER:= $(shell uname -r)    # ←これを追加
とする

makeエラー

が、まだmakeエラー起こす。
どうやら、カーネル側も置いただけじゃだめで適宜コンパイルが居る模様。
# cd /usr/src/linux
# make oldconfig && make prepare
新機能の部分については、適当にEnter連打でよい。
ちなみに、
WARNING: Symbol version dump /usr/src/linux-2.6.18.6/Module.symvers
         is missing, module will have dependencies and modversions.
は無視で問題なさそう。

またmakeエラー

MODPOST
/bin/sh: script/mod/modpost そのようなファイルやディレクトリはありません
make[2]: *** [__modpost] Error 127
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.18.6'
make: *** [default] Error 2 
というなエラーメッセージで止まった場合、
# cd /usr/src/linux
# make modules_prepare
で直る。

やっと

これでやっとmakeが通った。いえーい。
注意として、一発目でsudo make installやって失敗した場合、makeで生成されたファイルがroot権限で0バイトのまま残ってしまい、ユーザ権限でmakeしても許可がないなどと怒られるので、一度書庫ごと解凍し直したほうが良さそう。
make cleanやるにも、先のMakefile修正の部分までたどり着いていないとcleanできないって怒られるので。


ちなみに、sudo make installしたときの
catmanモードで/var/cache/man/cat7/e1000e.7.gz に書き込みできません
は無視した。

参考文献など

本家のREADME
README
autoconf.hはconfig.hのシンボリックでおkのソース
Linux kernel source not configured: missing config.h [Archive] - Ubuntu Forums
カーネルソースを利用したモジュールの作成方法についての補足
http://sourceforge.jp/forum/forum.php?forum_id=16160
modpostで止まった時の対処法
incentivespro.com:: View topic - modpost missing