あれ、どうやったっけ

(たぶん)テキストサイト風blog。文が安定するまで書き直しあるからメンゴ。

e1000e + debian9 = ビルドできなくて悲しみに暮れている俺のような奴いるだろ……?

わぁい debian9 + gcc 6.3.0 + e1000e でビルド通らなぁい

ようこそトラブルシューター。パラノイアへようこそ(TRPGの方じゃないぞ)。

同志Debianスキー、Здрасти。Ubuntuも……まあOKだよたぶん(個人的に使ってないだけで)。Cent君だとたぶん問題ないからにじよめちゃんの夜の部程度に気にするな。

友人がサーバを新調したとかで自分もサブ機をdebian9にしようかと。で、e1000eドライバ落としてビルドするわけですよ。めんどくさいのでrootでやった。文句あるか。

root@cl1:/usr/src/e1000e-3.3.6/src# make
cc1: error: code model kernel does not support PIC mode
/bin/sh: 1: [: -ge: unexpected operator
Makefile:199: *** *** Aborting the build. *** This driver is not supported on kernel versions older than 2.4.0.  中止.

はーい、cc1で何かしようとしたけどコンパイラ的にサポートしてない何かやった結果変数取れなくてtest失敗してる系エラーでてますねーwww うけるwwwww ← 僕がこうなってるときはモニター殴りたいときです。

PIEとかPICは当然良くわかりませんが、とにかくどうでもいいですね。

リターンアドレスの書き換えの話とか関数のアドレスでたらめにしたら何が嬉しいのかとか誰が知りたいんだよ。あとコンパイラ側ではレジスタが1コ開くから嬉しいとか「本の虫」で見た気はするが……。

たぶんそんなことされてる時点でそのサーバ終わってるから + 内部犯行としても多分バレなくね? って気もしますけど……ま、どうでもいいか。

そういやGCC5スキップしてるな

kali linux - Cannot compile kernel: error, kernel does not support PIC mode - Unix & Linux Stack Exchange

  • GCC5から? らしいのですが6では確実にPIE(実行時に関数とかのアドレスを配置し直し系の奴)がデフォルトで有効になりました
  • やめさせるなら -fno-pie を指定せよ

ありがとう、うしくん。F**K。

とりあえず最新に追従した状態のでぶやんだと通りませんね。e1000e 3.3.6 / 3.4.0.2 の両者でダメです。応急パッチはこんなのだ。

--- Makefile.orig    2018-01-08 20:51:35.059457728 +0900
+++ Makefile    2018-01-08 21:48:09.062891308 +0900
@@ -151,6 +151,16 @@
 
 EXTRA_CFLAGS += $(CFLAGS_EXTRA)
 
+ifeq ($(CC),gcc)
+  GCC_VER := $(shell gcc -dumpversion | cut -d "." -f1)
+
+  ifeq (1, $(shell [ $(GCC_VER) -ge 5 ] && echo 1 || echo 0))
+    ifeq (1, $(shell gcc -dumpspecs | grep no-pie > /dev/null 2>&1 && echo 1 || echo 0))
+      EXTRA_CFLAGS += -fno-pie
+    endif
+  endif
+endif
+
 RHC := $(KSRC)/include/linux/rhconfig.h
 ifneq (,$(wildcard $(RHC)))
   # 7.3 typo in rhconfig.h

とりあえずこっちにも貼っとくわ https://pastebin.com/qNmKT23y

前にインストだけしとくか → 放置のときはパッチいらんかったと思うんだがなぁ。まあいい。

GCCが5以上 + no-pie でビルドされてるなら -fno-pie オプションつける」で直してはあるんですが、ぶっちゃけ gnu make ほとんど触らんのでうまい手段知ってる人はなんか適宜うpってくれ。一応モジュールのビルドオプションにEXTRA_CFLAGSは含まない……はずだがな。まあ問題あったらe1000eの人に聞いてくれ(丸投げ)

worker@cl1:~/install/script/deb$ objdump -f /lib/modules/4.9.0-5-amd64/updates/dkms/e1000e.ko 

/lib/modules/4.9.0-5-amd64/updates/dkms/e1000e.ko:     ファイル形式 elf64-x86-64
アーキテクチャ: i386:x86-64, フラグ 0x00000011:
HAS_RELOC, HAS_SYMS
開始アドレス 0x0000000000000000

worker@cl1:~/install/script/deb$ objdump -f /lib/modules/4.9.0-5-amd64/kernel/arch/x86/kernel/cpuid.ko 

/lib/modules/4.9.0-5-amd64/kernel/arch/x86/kernel/cpuid.ko:     ファイル形式 elf64-x86-64
アーキテクチャ: i386:x86-64, フラグ 0x00000011:
HAS_RELOC, HAS_SYMS
開始アドレス 0x0000000000000000

とりあえずobjdumpでヘッダ周り見たところ特段変なことにはなってないようなのでイケると思うがな。

バージョンが挙がるたびなんかしら変わるのは業界の常か。

Gnome一番ひどい気はする。設定ファイルがコロコロ変わるんで何が正しいかわからん。故に僕はMateです。

で、通信途絶ならアウトだ

そうでなかったらアレだな、また下に追記するよ。

とりあえず今は問題ない

printkとか、リモートデバッグとか嫌だぜ……。