
Ubuntu日本語フォーラム
ログインしていません。
windows10とubuntu16.04のデュアルブート環境の構築を行いました。
ubuntuを起動したところネットワークに接続ができなかったため、以下のサイトを参考に有線LANでのネットワーク接続に成功しました。
https://blog.spiralray.net/archives/474
しかしPCの再起動後、再びネットワークに接続ができなくなりました。(今のモジュールを次回起動時に使用するように、というコマンドも実行しています)
上記サイトの通りにやり直そうとmakeしたところ、下記のエラーメッセージが表示されました。
また、現ドライバの削除や新ドライバの適用等を(上のサイトの通りに)行っても一向に改善されません。
windowsで起動すると何の問題もなくネットワークに接続できます。
一度ubuntuを削除して入れなおしても同じ現象が置きました。
どれだけ調べても解決法を見つけることができないため、どなたかお力添えをお願いいたします。
下記は、エラーメッセージと各種コマンドの結果です。
長文になりますが、何が解決の糸口になるかも判断できないため貼らせていただきます。
何か必要な情報があればお申し付けください。
それでは、どうかよろしくお願いいたします。
makeの結果(エラーメッセージ)
make -C /lib/modules/4.15.0-29-generic/build CC=gcc SUBDIRS=/home/naka/Desktop/e1000e-3.4.0.2/src modules
make[1]: ディレクトリ '/usr/src/linux-headers-4.15.0-29-generic' に入ります
Makefile:976: "Cannot use CONFIG_STACK_VALIDATION=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel"
CC [M] /home/naka/Desktop/e1000e-3.4.0.2/src/netdev.o
/home/naka/Desktop/e1000e-3.4.0.2/src/netdev.c: In function ‘e1000_probe’:
/home/naka/Desktop/e1000e-3.4.0.2/src/netdev.c:8344:2: error: implicit declaration of function ‘init_timer’ [-Werror=implicit-function-declaration]
init_timer(&adapter->watchdog_timer);
^
/home/naka/Desktop/e1000e-3.4.0.2/src/netdev.c:8345:35: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
adapter->watchdog_timer.function = e1000_watchdog;
^
/home/naka/Desktop/e1000e-3.4.0.2/src/netdev.c:8346:25: error: ‘struct timer_list’ has no member named ‘data’
adapter->watchdog_timer.data = (unsigned long)adapter;
^
/home/naka/Desktop/e1000e-3.4.0.2/src/netdev.c:8349:35: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
adapter->phy_info_timer.function = e1000_update_phy_info;
^
/home/naka/Desktop/e1000e-3.4.0.2/src/netdev.c:8350:25: error: ‘struct timer_list’ has no member named ‘data’
adapter->phy_info_timer.data = (unsigned long)adapter;
^
cc1: some warnings being treated as errors
scripts/Makefile.build:332: ターゲット '/home/naka/Desktop/e1000e-3.4.0.2/src/netdev.o' のレシピで失敗しました
make[2]: *** [/home/naka/Desktop/e1000e-3.4.0.2/src/netdev.o] エラー 1
Makefile:1552: ターゲット '_module_/home/naka/Desktop/e1000e-3.4.0.2/src' のレシピで失敗しました
make[1]: *** [_module_/home/naka/Desktop/e1000e-3.4.0.2/src] エラー 2
make[1]: ディレクトリ '/usr/src/linux-headers-4.15.0-29-generic' から出ます
Makefile:273: ターゲット 'default' のレシピで失敗しました
make: *** [default] エラー 2
lspci | grep Ethernetの結果
00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-V
zegrep e1000e /var/log/kern.logの結果
Jul 26 04:13:03 naka kernel: [ 0.856029] e1000e: Intel(R) PRO/1000 Network Driver - 3.2.6-k
Jul 26 04:13:03 naka kernel: [ 0.856030] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
Jul 26 04:13:03 naka kernel: [ 0.922171] e1000e 0000:00:1f.6: Interrupt Throttling Rate (ints/sec) set to dynamic conservative mode
Jul 26 04:13:03 naka kernel: [ 1.171550] e1000e 0000:00:1f.6: The NVM Checksum Is Not Valid
Jul 26 04:13:03 naka kernel: [ 1.276165] e1000e: probe of 0000:00:1f.6 failed with error -5
Jul 26 04:13:03 naka kernel: [ 1.443273] Modules linked in: hid_generic usbhid hid nouveau(+) mxm_wmi i2c_algo_bit ttm drm_kms_helper syscopyarea e1000e sysfillrect sysimgblt fb_sys_fops ptp pps_core drm ahci libahci wmi video
ifconfigの結果
lo Link encap:ローカルループバック
inetアドレス:127.0.0.1 マスク:255.0.0.0
inet6アドレス: ::1/128 範囲:ホスト
UP LOOPBACK RUNNING MTU:65536 メトリック:1
RXパケット:8780 エラー:0 損失:0 オーバラン:0 フレーム:0
TXパケット:8780 エラー:0 損失:0 オーバラン:0 キャリア:0
衝突(Collisions):0 TXキュー長:1000
RXバイト:650064 (650.0 KB) TXバイト:650064 (650.0 KB)
windowsのEthernetのプロパティ
IPv6 アドレス: 2400:2411:93a0:db00:693e:8f20:f7a0:8bdd
IPv6 DNS サーバー: 2400:2411:93a0:db00:1111:1111:1111:1111
IPv4 アドレス: 192.168.3.9
IPv4 DNS サーバー: 192.168.3.1
プライマリ DNS サフィックス: flets-east.jp
DNS サフィックス検索一覧: flets-east.jp
iptvf.jp
製造元: Intel
説明: Intel(R) Ethernet Connection (2) I219-V
ドライバーのバージョン: 12.15.25.6
物理アドレス (MAC): 70-85-C2-70-36-3C
オフライン
18.04 は使ったことがないのですがレスが付かないようなので私に分かる範囲で書きます。(最近 16.04 に乗り換えましたが私の知識はまだまだ 14.04 のものなので 18.04 で通用しない可能性が多々あります。予めご承知おき下さい。)
#1 で参照されているページからリンクされている「Intel ドライバ配布ページ」には対応 kernel version は「2.4の一部、2.6.x, 3.x」とかなり古いものとなっています。
Ubuntu 18.04 は 4.15 なのでうまくコンパイルできないのは kernel interface が変わったせいだと思います。
18.04 用の kernel (linux 4.15.0-29.31) のソースを眺めてみましたが e1000e のドライバーは既に収められています。従ってこのソースを修正して kernel module を作成するのが、今後の kernel update のことも考えると、合理的な方法だと思います。
18.04 を使っていないので具体的な手順を示すことは私にはできませんが、問題点は特定のハードウェアの話ではなくモジュール作成の一般論なのでネットに沢山情報が有るはずです。あくまでもご参考程度ですが、大まかな流れは以下のようになります。
(1) kernel の version を確かめる。(cat /proc/version_signagure を実行するなど)
(2) https://launchpad.net/ubuntu/bionic/+source/linux の最後の方に Download files from current release というタイトルの表があるので(1) で調べたバージョンと合っていることを確認してlinux_4.15.0.orig.tar.gz とlinux_4.15.0-xx.xx.diff.gz (xx.xx の部分は実際の番号に変える)をダウンロードする。(diff file の方は kernel のバージョンが上がるたびにダウンロードしなおしですが linux_4.15.0.orig.tar.gz は一度ダウンロードするだけです。)
(3) 作業用のディレクトリに cd して
tar -xzvf ダウンロードディレクトリ/linux_4.15.0.orig.tar.gz
zcat ダウンロードディレクトリ/linux_4.15.9-xx.xx.diff.gz | patch -p0
なお、google-chrome を含む一部のブラウザーはダウンロード時に gunzip するので上のコマンドは適宜変えて下さい。
(4) cd linux-4.15/drivers/net/ethernet/intel/e1000e
(5) nvm.c を書き換える(#1 でやったのと同じ手順)
(6) Makefile を書き換える。
この部分、18.04 でどうなるか私には確かめようがないのですが、16.04 で実験したときの内容を参考までに:
obj-m=e1000e.o KVERSION=$(shell uname -r) e1000e-objs := 82571.o ich8lan.o 80003es2lan.o \ mac.o manage.o nvm.o phy.o \ param.o ethtool.o netdev.o ptp.o all: make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules clean: make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean
(16.04 ではこれにいくつかの include path と define を足さないとコンパイルが通りませんし、undefined symbol も沢山出ますが、一応e1000e.ko が出来ることは確かめました。)
(7) make する。no error で終了するはずです。どんな些細な error や warning であっても出た場合にはどこかで間違えているはずですので原因を特定して下さい。
(8) カレントディレクトリに e1000e.ko が作成されているはずです。
sudo rmmod e1000e sudo insmod e1000e.ko
を実行して動作をテストして下さい。もし kernel panic になった時の magic sysrq の使い方は、御存じだと思いますがそれでも、念の為再確認してからテストに臨むことをお勧めします。
(2)(3) ですが 要は kernel source tree を作成すればいいので他の方法でも構いません。
何かご不明な点があれば遠慮なく聞いて下さい。
p.s. check sum error を無視するというのは「なぜ check sum error が発生して、それは実害がない」ことが確かめられていない限りお勧めできません。
オフライン
お力添え感謝します。
私が入れているのは18.04ではなく16.04なのですが、ご提案の方法を試しても特に問題はないと認識してもよろしいのでしょうか?
オフライン
kernel が 4.15 だったのでてっきり 18.04 だと思ってしまいました。申し訳ありません。
16.04 の HWE kernel のお使いの場合は kernel source は https://launchpad.net/ubuntu/+source/linux-hwe/ から入手して下さい。
#2 に書いた URL から入手したソースでは見かけはうまくいっても kernel の他の部分との整合性が取れない可能性があります。その他は #2 に書いた手順で多分大丈夫だと思います(あまり自信はありませんが)。
オフライン
追加説明です。 #2 の書き込み中:
(2)(3): hwe kernel の場合にダウンロードするファイル名は
linux-hwe_4.15.0.orig.tar.gz
linux-hwe_4.15.0-xx.xx~16.04.x.diff.gz
(x の部分はお使いの kernel version に置き換えてください)です。(3)のコマンドもそれに応じてファイル名部分を変えて下さい。
(6)の最後の方に書いたカッコ書きの部分は ubuntu 16.04 kernel 4.4 が走っている状態で kernel 4.15 のモジュールをコンパイルするためには include path と defines を加える必要が有るということです。お使いの kernel とソースコードのバージョンが一致している場合には (6) に書いた内容で module が作成されるはずです。
(7): もし make の実行中に
printf: 0x十六進数ダンプ:: 無効な十六進数です
symbolmap: 00000000: invalid section
というエラーが出たら make の代わりに
env LANG=C make
を試みて下さい。
オフライン