参考URL
- https://blog.spiralray.net/archives/474
- https://jyn.jp/ubuntuserver-intelnic/
- http://datyotosanpo.blog.fc2.com/blog-entry-190.html?id=LOAD#LOAD
- http://www.usupi.org/sysad/298.html
問題が起きた環境を以下コマンドで確認
$ lspci | grep Ethernet
$ modinfo e1000e
- このとき、
version: 3.2.6-k
だと、上手く動いていない可能性が高い。
動かない原因の調査
$ zegrep e1000e /var/log/kern.log*
-
version: 3.2.6-k
だと、チェックサムでエラーが生じていることがある。 - 以下では、チェックサムでエラーが生じている場合に、e1000eをインストールし直して、問題に対処する方法を紹介する。
e1000eの再インストール
- e1000eの最新版を以下のサイトからダウンロードしてUSB等で入れ、解凍する。(以下、
version: 3.6.0
の場合で説明する。) - 以下では、
$HOME
の配下に解凍した状態を想定する。 -
~/e1000e-3.6.0/src/nvm.c
内の関数を編集して、チェックサムを行わないように編集する。
~/e1000e-3.6.0/src/nvm.c
s32 e1000e_validate_nvm_checksum_generic(struct e1000_hw *hw)
{
return 0;
}
ソースのあるディレクトリに移動
$ cd ~/e1000e-3.6.0/src
$ make
$ sudo make install
- ここでビルド中に、
<linux/pci-aspm.h>
がないと言われることがある。この場合は、kcompat.h
の#include <linux/pci-aspm.h>
をコメントアウトすれば、ビルドできる。-
version: 3.8.4
なら、このエラーが修正されるとの情報あり。
-
現ドライバの削除・新ドライバの適用
- 注意!ネット切れます!(まだつながっていない想定だが…。)
$ sudo modprobe -r e1000e
$ sudo modprobe e1000e
適用されたか確認
$ modinfo e1000e
filename: /lib/modules/4.4.0-21-generic/updates/drivers/net/ethernet/intel/e1000e-3.6.0/e1000e.ko
version: 3.6.0-NAPI
...
一応ネットワーク再起動
$ sudo /etc/init.d/networking restart
今のモジュールを次回起動時に使用するように設定
$ sudo update-initramfs -u
- 完了。
DKMSへの登録
-
/usr/src/
配下にe1000e-3.6.0
を解凍し、配置する。
$ sudo mv ~/e1000e-3.6.0.tar /usr/src/
$ cd /usr/src/
$ sudo tar xf e1000e-3.6.0.tar
$ sudo rm e1000e-3.6.0.tar
$ cd e1000e-3.6.0/
次に/usr/src/e1000e-3.6.0/dkms.conf
を新規作成して編集する。
PACKAGE_NAME="e1000e"
# バージョン
PACKAGE_VERSION="3.6.0"
BUILT_MODULE_LOCATION=src
BUILT_MODULE_NAME[0]="e1000e"
DEST_MODULE_LOCATION[0]="/kernel/drivers/net/e1000e/"
AUTOINSTALL="yes"
MAKE[0]="BUILD_KERNEL=${kernelver} make -C src CFLAGS_EXTRA=-DDISABLE_PM"
CLEAN[0]="make -C src clean"
REMAKE_INITRD=yes
- 最後に以下のコマンドでDKMSに追加、ビルド、インストールを行う。
$ sudo dkms -m e1000e -v 3.6.0 add
$ sudo dkms -m e1000e -v 3.6.0 build
$ sudo dkms -m e1000e -v 3.6.0 install