Nieuwe versie e1000e installeren - compilatie werkt niet

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Fietsventje
  • Registratie: November 2004
  • Laatst online: 21-09 08:50
Om een probleem met de stabiliteit van m'n gigabit netwerkinterface op te lossen, wil ik een nieuwe versie van de e1000e-driver installeren op m'n Debian 9-machine. Bij het installeren (make install) krijg ik echter deze melding:
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.  Stop.

Deze pagina vond ik terug, waar gesuggereerd wordt om de makefile van de kernel aan te passen zodat PIE gedisabled wordt, zodat terug PIC gebruikt kan worden.
The issue is with your gcc installation, in gcc 6+ versions PIE( position independent executables) is enabled by default. So in order to compile you need to disable it. Even gcc 5 has the issue. This is a known bug for gcc. Bug Link.

So far there is no official patch from gcc side, so the workaround is to patch the Makefile of kernel source.

If you are familiar with patching the source file use the codes from this link to create the patch file then try to compile.Patch File

Let me know if you are having difficulties installing the patch.
Dit is de essentie van die patch:
code:
1
2
3
4
5
+# force no-pie for distro compilers that enable pie by default
+KBUILD_CFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CFLAGS += $(call cc-option, -no-pie)
+KBUILD_AFLAGS += $(call cc-option, -fno-pie)
+KBUILD_CPPFLAGS += $(call cc-option, -fno-pie)


Echter, ik ben absoluut geen linux expert. Gewoon de instructie's in een andere post op die pagina volgen resulteerde in een mislukte patch. Misschien heb ik dit in de verkeerde directory gedaan (/usr/src/linux-headers-4.9.0-4-amd64), of misschien is die patch-file niet geschikt voor een Debian-distro (instructie's zijn voor Ubuntu).

Kan iemand me hiermee helpen? Alvast bedankt!



Achtergrond:

Debian 9-systeem, ooit als Debian 7 geïnstalleerd, en geüpgraded naar 8, en nu dus 9.

Systeem doet dienst als lichte home-server (ZFS pool, SMB fileserver, webservertje, Logitech media server,
...) en als router in m'n netwerk (3 netwerken: wifi naar LEDE-router, 1Gbps/Jumbo frames netwerk en 100Mbps netwerk, die laatste 2 op zelfde interface via VLAN tagging naar switch)

Probleem met de ethernet interface is dat hij bij een speedtest via nperf.com op een Win10-host in het 1Gbps-netwerk 'hangt':

[437090.703866] e1000e 0000:00:19.0 eth0: Detected Hardware Unit Hang:
...

In principe kan ik allerhande features uitschakelen om de stabiliteit te verhogen, maar eerst zou ik willen proberen met de nieuwste versie van de e1000e-driver. Nu is versie 3.2.6-k in gebruik. De nieuwste versie is 3.4.0.2.

Alle reacties


Acties:
  • 0 Henk 'm!

  • EMP
  • Registratie: November 2000
  • Laatst online: 13:53

EMP

Krulloos!

Ik heb het zelfde probleem gehad met Debian 9.3.0 en de e1000e driver. Op Debian 8 compileerde hij probleemloos.

Of je nou de kernel headers van 4.9 of 4.13 (laatste backport kernel voor Debian Stable) gebruikt, beide geven deze fout.

Volgens mij moet Intel zijn source nog even updaten naar een nieuwere GCC versie, ik heb het er uiteindelijk bij gelaten omdat de door Debian meegeleverde versie uiteindelijk mijn netwerkkaarten (I218 en I219) toch bleek te ondersteunen, maar ik lees graag mee voor als het opgelost wordt.

Verbouwblog van mijn Schrootjespaleis uit 1925.
My anime addiction.


Acties:
  • 0 Henk 'm!

  • Fietsventje
  • Registratie: November 2004
  • Laatst online: 21-09 08:50
Goed om weten dat ik niet de enige ben die hier mee sukkelt!

Intussen een beetje informatie uit de Makefile van de e1000e driver weten te puren. Door wat extra '$(warning ...)'-directives toe te voegen, zie ik nu dat wanneer de makefile deze regel uitvoert, de fout gegenereerd wordt:
code:
1
2
KVER := $(shell $(CC) $(EXTRA_CFLAGS) -E -dM $(VERSION_FILE) | grep UTS_RELEASE | \
        awk '{ print $$3 }' | sed 's/\"//g')


Dit is het commando dat make dan probeert uit te voeren met die $(shell ...)-directive:
gcc -mcmodel=kernel -mno-red-zone -DDRIVER_E1000E -DDRIVER_NAME=e1000e -DDRIVER_NAME_CAPS=E1000E -DLINUX -D__KERNEL__ -DMODULE -O2 -pipe -Wall -I/lib/modules/4.9.0-5-amd64/source/include -I.   -E -dM /lib/modules/4.9.0-5-amd64/build/include/generated/utsrelease.h


Ook heb ik die 4 lijnen toegevoegd aan een de Makefile in /lib/modules/4.9.0-5-amd64/source, waarnaar de Makefile van de e1000e verwijst, en ook wat $(warning ...)'s toegevoegd om te begrijpen wat er gebeurt. Die worden echter niet aangeroepen, blijkbaar ...

EDIT - Oplossing gevonden: ik heb een lijntje toegevoegd aan de makefile van de driver zelf om de compiler de juiste optie mee te geven.

Door deze regel toe te voegen op lijn 162 van de Makefile van de driver zelf, dus vóór de compiler voor het eerst wordt aangeroepen, geraakt de driver gecompileerd:
code:
1
EXTRA_CFLAGS += -fno-pie


Echter, dit is geen oplossing voor de instabiliteit van m'n NIC - bij een speedtest 'hangt' de driver of de hardware nog steeds. 'k Zal daarvoor een ander topic openen.

Ter info: de nieuwe driver laadt enkel door manueel te modproben en de netwerkstack opnieuw te laten starten. En echt stabiel blijkt dit niet - na een tiental minuten valt de netwerkverbinding weg.
modprobe -r e1000e; modprobe e1000e; service networking restart

[ Voor 41% gewijzigd door Fietsventje op 07-01-2018 19:46 ]