一介の開発者の戯言

先日からDELL PowerEdge R420Debian 6.0.6(Squeeze)をインストールてたのですがNICが認識されずに苦労しました。
R420に搭載されているNICはBroadcomのギガビットイーサで
NetXtreme BCM5720 Gigabit Ethernet PCIe (VenderID;DeviceID 14e4:165f)
というのを使っているようなのですが探してもドライバのバイナリが無さそうなのでコンパイルしました。
しかし、何度作っても「Invalid module format」見たいなエラーが出てinsmodもmodprobeも出来ません。
modules.symvers is missing みたいな警告を吐いてたりしてたのでそこら辺があやしいと思い色々試してやっと動くモジュールが作れました。
以下が大まかな作り方になります。
まずlinux-3.122n.zipダウンロードページからlinux-3.122n.zipをダウンロードしてServer/Linux/Driver/tg3-3.122n.tar.gzを取り出して/usr/srcに展開しておきます。
そのあとは

apt-get install linux-image-2.6.32-5-486
apt-get install linux-source-2.6.32
apt-get install linux-headers-2.6.32-5-common
apt-get install linux-headers-2.6.32-5-486
apt-get install linux-headers-2.6.32-5-686

とパッケージを入れて

cd /usr/src
bzip2 -d linux-source-2.6.32.tar.bz2
tar xvf linux-source-2.6.32.tar
ln -s linux-source-2.6.32 linux
cd linux
make clean #(2回目のみ必要)
make oldconfig
make prepare
make modules_prepare
make modules #(1回目のみでOKのはず)
cd /usr/src/tg3-3.122n/
make clean #(2回目のみ必要)
make
mkdir /media/usr0/tg3-486/ #(または686)
cp tg3.ko /media/usb0/tg3-486/ #(または686)
make install #(686カーネル起動時のみ)
modprobe tg3 #(686カーネル起動時のみ)

という感じでコンパイルすると出来ました。

make modulesはCPUにもよりますが30分以上掛かります。
試しに1度目しかコンパイルしなくても486版と686版のモジュールが作れました。
それぞれ486と686のカーネルで起動して作り直してUSBメモリに保存しておきます。
Debianはインストール中は486のカーネルで動作し、インストール後はほぼ686のカーネルで動きます。
インストール時にCD-1を使っている場合で「標準パッケージ」しか選ばない時は686版だけで何とかなります。

●インストール中にBCM5720を認識させる方法
インストールで「ネットワークアダプタの検出」で一番下の「該当なし」を選ぶと
リムーバブルディスクを探しますか?と聞かれるので「はい」を選択し「見つかりませんでした。」を表示中に
ALT+F2を押してENTERを押すとプロンプトが出るので
cd /media/tg3-486
insmod tg3.ko
cd /
とやってからALT+F1を押してインストール画面に戻って「戻る」を選んで再び「ネットワークアダプタの検出」を選ぶとNICが見つかります。

●インストール後に認識させる方法

mkdir /media/usb0
mount -t vfat /dev/sdb1 /media/usb0
cp /media/usb0/tg3-686/tg3.ko /lib/modules/2.6.32-5-686/kernel/drivers/net/
umount /media/usb0
depmod -a
modprobe tg3
udevadm trigger #(インストール時にモジュールを認識させなかった場合のみ必要)

とやってから/etc/network/interfacesの編集をして/etc/init.d/networking restartをすればOKのはずです。

下記がモジュールのバイナリです
tg3.ko(kernel-2.6.32-5-486版)
tg3.ko(kernel-2.6.32-5-686版)
tg3.ko(kernel-2.6.32-5-686-bigmem版)

※必要だったので686-bigmem版を追加しました

コメント

コメント(2) “DELL PowerEdge R420のlinux用NICドライバ”

  1. raymond

     ご教示ありがとうございます。
     実は僕も最近同じ問題で困っています。こちらはamd64版のsqueezeをdellのR420にインストールしましたが、やはりbroadcomのBCM5720が認識されませんでした。ご教示の手順でもamd64に使えるモジュールを作ることができるのでしょうか。
     ご教示いただけたら助かります。
     どうぞよろしくお願いいたします。

    • 返事が遅くなって済みません。
      amd64でインストールしているのであればそのCDから
      gcc
      make
      kernel-image
      linux-source
      linux-headers
      をインストールしてそのカーネルイメージで起動してからコンパイルすればamd64用のモジュールが作れるはずです。
      netinstじゃないディスクでインストールすれば1枚目だけでコンパイル環境は構築できます。