Installation: Realtek LAN SuSE 10.x (32 und 64 Bit) r1000/r8168/r8169

Status
Für weitere Antworten geschlossen.

Rain_Maker

Administrator
Teammitglied
//Edit:

Mittlerweile gibt es für openSUSE ab Version 10.1 _fertige_ RPM-Pakete bzw. src.rpm-Pakete, weshalb die ersten drei Beiträge zwar vielleicht noch informativ aber das darin beschriebene, händische Kompilieren/Installieren des entsprechenden Treibers _nicht_ mehr nötig ist.

Wer Treiberpakete sucht, der sollte sich besonders die Beiträge ab einschließlich Nr.4 in diesem Thread ansehen.


Hallo,

Aufgrund dieses Threads hier:

http://www.pc-forum24.de/showthread.php?t=890

möchte ich die Installation des Treibers kurz beschreiben, da es doch -vor allem je nach SuSE-Version UND abhängig davon, ob es sich um eine 32- oder 64-Bit Installation handelt- zu ausgesprochen "unliebsamen Überraschungen" kommen kann.

Die Anregungen/Lösungsvorschläge habe ich hier gefunden und zusammengetragen:

Another Realtek Rtl8111b Compilation Problem - SuSE Linux Forums

Thema anzeigen - Realtek 8168 Treiber als Modul kompilieren - SuSE Linux

Dank an die jeweiligen Autoren!

0. Vorbereitungen

- Pakete kernel-source, gcc und make sollten installiert sein

- Treiber von Realtek runterladen & entpacken

Realtek

Das wäre einer der Download-Server

ftp://61.56.86.122/cn/nic/rtl8111brtl8168b/

Die neuste Version ist zur Zeit:

Linux driver for kernel 2.4.x and 2.6.x 1.03 2006/06/12
Das wäre also der hier:

ftp://61.56.86.122/cn/nic/rtl8111brtl8168b/linux-r1000(103).zip

1. Treiber kompilieren und installieren

a) SuSE 10.0 32 Bit:

- Ordner r1000 als ROOT in /usr/src/linux-aktuelleKernelversion kopieren.

- Unterordner r1000/src ebenfalls in /usr/src/linux-aktuelleKernelversion kopieren

Code:
su

(Passwort)

cd /usr/src/linux-[i]aktuelleKernelversion[/i]/r1000/

make clean modules

make install

depmod -a

moprobe r1000
b) SuSE 10.0 64 Bit:

Mangels passender Hardware/Versuchskarnickel *g* keine Möglichkeit gehabt, es zu testen.

Beiträge anderer User mit passendem System sind SEHR willkommen!

Bei SuSE 10.1 treten nun weitere Probleme auf:
Es befinden sich zumindest 2 Fehler im Quellcode des Treibers, folgende Änderungen sind zu machen:

c) SuSE 10.1 32 Bit:

Selbst wenn man die obigen Vorarbeiten macht, taucht dieser Fehler hier auf:

Code:
make clean modules
make -C src/ clean
make[1]: Entering directory `/usr/src/linux-2.6.16.13-4/r1000/src'
rm -f *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags
make[1]: Leaving directory `/usr/src/linux-2.6.16.13-4/r1000/src'
make -C src/ modules
make[1]: Entering directory `/usr/src/linux-2.6.16.13-4/r1000/src'
make -C /lib/modules/2.6.16.13-4-default/build SUBDIRS=/usr/src/linux/r1000/src                                        modules
make[2]: Entering directory `/usr/src/linux-2.6.16.13-4-obj/i386/default'
make -C ../../../linux-2.6.16.13-4 O=../linux-2.6.16.13-4-obj/i386/default modul                                       es
  CC [M]  /usr/src/linux/r1000/src/r1000_n.o
/usr/src/linux/r1000/src/r1000_n.c:46: error: expected ')' before string constan                                       t
make[5]: *** [/usr/src/linux/r1000/src/r1000_n.o] Fehler 1
make[4]: *** [_module_/usr/src/linux/r1000/src] Fehler 2
make[3]: *** [modules] Fehler 2
make[2]: *** [modules] Fehler 2
make[2]: Leaving directory `/usr/src/linux-2.6.16.13-4-obj/i386/default'
make[1]: *** [modules] Fehler 2
make[1]: Leaving directory `/usr/src/linux-2.6.16.13-4/r1000/src'
make: *** [modules] Fehler 2
Lösung:

Die Datei r1000_n.c im Unterverzeichnis /r1000/src mit kate öffnen, Zeile 46 suchen (Unten läuft in der Statuszeile ein Zähler) und den Ausdruck von

MODULE_PARM (media, "1-" __MODULE_STRING(MAX_UNITS) "i");

in


MODULE_PARM_DESC (media, "1-" __MODULE_STRING(MAX_UNITS) "i");

ändern. Anschliessend speichern und kate schliessen, der Rest wie oben beschrieben.


SuSE 10.1 64 Bit:

Hier tritt folgender Fehler auf:

Code:
# make clean modules
make -C src/ clean
make[1]: Entering directory `/usr/src/linux-2.6.16.13-4/r1000/src'
rm -f *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags
make[1]: Leaving directory `/usr/src/linux-2.6.16.13-4/r1000/src'
make -C src/ modules
make[1]: Entering directory `/usr/src/linux-2.6.16.13-4/r1000/src'
make -C /lib/modules/2.6.16.13-4-smp/build SUBDIRS=/usr/src/linux-2.6.16.13-4/r1000/src modules
make[2]: Entering directory `/usr/src/linux-2.6.16.13-4-obj/x86_64/smp'
make -C ../../../linux-2.6.16.13-4 O=../linux-2.6.16.13-4-obj/x86_64/smp modules
  CC [M]  /usr/src/linux-2.6.16.13-4/r1000/src/r1000_n.o
/usr/src/linux-2.6.16.13-4/r1000/src/r1000_n.c: In function ‘r1000_close’:
/usr/src/linux-2.6.16.13-4/r1000/src/r1000_n.c:1450: error: ‘entdev’ undeclared (first use in this function)
/usr/src/linux-2.6.16.13-4/r1000/src/r1000_n.c:1450: error: (Each undeclared identifier is reported only once
/usr/src/linux-2.6.16.13-4/r1000/src/r1000_n.c:1450: error: for each function it appears in.)
make[5]: *** [/usr/src/linux-2.6.16.13-4/r1000/src/r1000_n.o] Error 1
make[4]: *** [_module_/usr/src/linux-2.6.16.13-4/r1000/src] Error 2
make[3]: *** [modules] Error 2
make[2]: *** [modules] Error 2
make[2]: Leaving directory `/usr/src/linux-2.6.16.13-4-obj/x86_64/smp'
make[1]: *** [modules] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.16.13-4/r1000/src'
make: *** [modules] Error 2
Lösung:Hier liegt der "Fehler" in der selben Datei, aber an anderer Stelle.

Wieder mit Kate öffnen und Zeile 1450 suchen und ändern von

synchronize_irq (entdev->irq);

in

synchronize_irq (netdev->irq);

Cooler Fehler oder? Sowas nennt man glaube ich "Wechstabenverbuchsler" ;)

Danach Rest wie gehabt.

2. WICHTIG:Nach einem Kernel-Update wird es zunächst NICHT mehr klappen mit der Karte!

Der Grund dürfte klar sein, denn der Treiber ist nicht im Kernel enthalten sondern als SELBSTgebautes Modul realisiert.

Bei einem Update des Kernels werden diese Module normalerweise NICHT upgedatet, es sei denn, der neue Kernel enthält diesen Treiber.

Deshalb folgende Schritte:

a) Sicherungskopien der geänderten Dateien anlegen.

Die beiden Ordner /usr/src/linux-aktuellerKernel/r1000/ und /usr/src/linux-aktuellerKernel/src/ an einen "lauschigen" Platz kopieren, wo man sie wiederfindet.

b) Nach einem Kernelupdate wird es einen neuen Ordner geben, der /usr/src/linux-neueKernelversion/ heißen wird.

c) Die gesicherten Ordner reinkopieren und analog verfahren.

Dann müsste es wieder gehen, die Fehler im Quellcode wurden ja jetzt beseitigt, also ein einfaches

Code:
su

(Passwort)

make clean modules

make install

depmod -a

modprobe r1000
sollte genügen.

Das muss man ab sofort bei JEDEM Kernelupdate machen und zwar so lange, bis der Treiber offiziell unterstützt wird.

Sollte die Karte nach einem Reboot auch ohne Kernelupdate nicht laufen, dann muss man z.B. in Yast einstellen, daß das Modul beim Start geladen wird.
Yast --> System --> Editor für /etc/sysconfig Dateien --> System --> Kernel ---> MODULES_LOADED_ON_BOOT --> r1000 Eintragen und bestätigen.


Greetz,

RM
 

Rain_Maker

Administrator
Teammitglied
Version 1.04 (SuSE 10.1 32Bit)

Hallo,

Seit ein paar Tagen liegt eine neue Treiberversion 1.04 auf dem Server, welche laut "release_note.txt"

r1000 v1.04 <2006/07/07>
solve the compile issue in Linux kernel 2.6.x
keine Probleme beim Kompilieren mehr machen soll.

Dem ist leider nicht so ganz, zumindest bei (SuSE)-Kerneln > 2.6.15. Unter Ubuntu Dapper Drake mit Distributionskernel 2.6.15-26 lief die Kompilation ohne Probleme (make clean modules), bei SuSE 10.1 ist etwas Handarbeit angesagt.

1. Treiber runterladen.

2. Entpacken (am besten im Home-Verzeichnis).

3. Nur den Unterordner /r1000_v1.04/src/ nach /usr/src/linux-*Kernelversion*/ kopieren. Die Version kann mit 'uname -r' herausgefunden werden. Es scheint so zu sein, daß sonst die Datei "Makefile_linux26x" beim Kompiliervorgang nicht gefunden wird.

Unter einem Vanilla-Kernel existierte dieses Problem interessanterweise nicht, sehr wohl war aber auch bei der Datei r1000_n.c Handarbeit angesagt.

4. In Zeile 51, 52 und 53 der Datei /src/r1000_n.c folgende Änderungen (Texteditor) durchführen, allerdings nur im Ordner, indem man zuvor den Quellcode entpackt hat, nicht in der Kopie in /usr/src/linux-*Kernelversion*/src!

Vorher:

Code:
MODULE_PARM (speed, "1-" __MODULE_STRING(MAX_UNITS) "i"); 
MODULE_PARM (duplex, "1-" __MODULE_STRING(MAX_UNITS) "i"); 
MODULE_PARM (autoneg, "1-" __MODULE_STRING(MAX_UNITS) "i");
Nachher:

Code:
MODULE_PARM[B]_DESC[/B] (speed, "1-" __MODULE_STRING(MAX_UNITS) "i"); 
MODULE_PARM[B]_DESC[/B] (duplex, "1-" __MODULE_STRING(MAX_UNITS) "i"); 
MODULE_PARM[B]_DESC[/B] (autoneg, "1-" __MODULE_STRING(MAX_UNITS) "i");
Speichern und dann im Stammordner mit dem entpackten Quellcode.

Code:
make clean modules
make -C src/ clean
make[1]: Entering directory `/home/test/r1000_v1.04/src'
rm -f *.o *.ko *~ core* .dep* .*.d .*.cmd *.mod.c *.a *.s .*.flags
make[1]: Leaving directory `/home/test/r1000_v1.04/src'
make -C src/ modules
make[1]: Entering directory `/home/test/r1000_v1.04/src'
make -C /lib/modules/2.6.16.21-0.13-default/build SUBDIRS=/home/test/r1000_v1.04/src modules
make[2]: Entering directory `/usr/src/linux-2.6.16.21-0.13-obj/i386/default'
make -C ../../../linux-2.6.16.21-0.13 O=../linux-2.6.16.21-0.13-obj/i386/default modules
  CC [M]  /home/test/r1000_v1.04/src/r1000_n.o
  CC [M]  /home/test/r1000_v1.04/src/r1000_ioctl.o
  LD [M]  /home/test/r1000_v1.04/src/r1000.o
  Building modules, stage 2.
  MODPOST
  CC      /home/test/r1000_v1.04/src/r1000.mod.o
  LD [M]  /home/test/r1000_v1.04/src/r1000.ko
make[2]: Leaving directory `/usr/src/linux-2.6.16.21-0.13-obj/i386/default'
make[1]: Leaving directory `/home/test/r1000_v1.04/src'
r1000_v1.04 > su
Passwort:
r1000_v1.04 # make install
make -C src/ install
make[1]: Entering directory `/home/test/r1000_v1.04/src'
install -m 644 -c r1000.ko /lib/modules/2.6.16.21-0.13-default/kernel/drivers/net/
make[1]: Leaving directory `/home/test/r1000_v1.04/src'
depmod -a
r1000_v1.04 # modprobe r1000
r1000_v1.04 # lsmod | grep r1000
r1000                  15232  0
Voilà.

Greetz,

RM
 

Rain_Maker

Administrator
Teammitglied
Version 1.05 SuSE 10.0 und openSUSE 10.2 (32 Bit)

Version 1.05 des Treibers lässt sich auf 32-Bit Systemen von SuSE 10.0 und openSUSE 10.2 absolut streßfrei kompilieren (installierte Kernelquellen vorausgesetzt).

Code:
tar -xvf r1000_v1.05.tgz

cd r1000_v1.05/

make clean modules

su

make install

depmod -ae

modprobe r1000

lsmod|grep r1000
Wer entsprechende 64-Bit Systeme hat bzw. eine 10.1 (egal ob 32 oder 64 Bit), der möge bitte ebenfalls das Kompilieren testen und mir bitte eine PN mit dem Ergebnis bzw. eventuellen Fehlermeldungen senden.

Treiber gibt es hier als tgz-File.

ftp://61.56.86.122/cn/nic/r1000_v1.05.tgz

Greetz,

RM
 

Rain_Maker

Administrator
Teammitglied
Passende RPM-Pakete für SuSE 10.1 openSUSE 10.2 bauen

Beim Stöbern in den _Untiefen_ des BUILD-Services, bin ich auf folgendes Repository gestossen.

Index of /download/drivers:/nic/SUSE_Linux_10.1

Dort befinden sich fertige RPM-Pakete für SuSE 10.1, allerdings nur für die veraltete Kernelverion 2.6.16.13-4.

Das ist aber kein Beinbruch, denn aus dem src.rpm hier:

http://software.opensuse.org/download/drivers:/nic/SUSE_Linux_10.1/src/r1000-1.05-2.1.src.rpm

kann man sich ganz einfach ein fertiges RPM für seine Kernelversion basteln.

ACHTUNG:

Diese Anleitung gilt _NUR_ für SuSE 10.1 und openSUSE 10.2, ältere Versionen werden so _NICHT_ funktionieren.


1. Vorarbeiten

Pakete kernel-source, gcc, make und kernel-syms nachinstallieren (braucht man für das Kompilieren von Hand ja auch, außer kernel-syms vielleicht, aber das ist ein winziges Paket). Die Versionsnummern müssen natürlich _exakt_ zum laufenden Kernel passen (uname -r).

2. Das src.rpm herunterladen und als User (sic!) einen Rebuild durchführen

Code:
rpmbuild --rebuild /Pfad_zum/Source-RPM/r1000-1.05-2.1.src.rpm
Nach einer Weile Geratter werden die fertigen Pakete in '/usr/src/packages/RPMS/*Prozessorarchitektur*/ abgelegt, siehe z.B. die Ausgabe bei mir:

Code:
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/r1000-1.05-build
[B]Wrote: /usr/src/packages/RPMS/i586/r1000-kmp-bigsmp-1.05_2.6.18.6_jen44-2.1.i586.rpm
Wrote: /usr/src/packages/RPMS/i586/r1000-kmp-default-1.05_2.6.18.6_jen44-2.1.i586.rpm
Wrote: /usr/src/packages/RPMS/i586/r1000-kmp-desktop-1.05_2.6.18.6_jen44-2.1.i586.rpm
Wrote: /usr/src/packages/RPMS/i586/r1000-kmp-xen-1.05_2.6.18.6_jen44-2.1.i586.rpm
Wrote: /usr/src/packages/RPMS/i586/r1000-kmp-xenpae-1.05_2.6.18.6_jen44-2.1.i586.rpm[/B]
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.64047
+ umask 022
+ cd /usr/src/packages/BUILD
+ cd r1000_v1.05
+ test /var/tmp/r1000-1.05-build '!=' /
+ rm -rf /var/tmp/r1000-1.05-build
+ exit 0
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.64047
+ umask 022
+ cd /usr/src/packages/BUILD
+ rm -rf r1000_v1.05
+ exit 0
Wie man sieht, fahre ich zur Zeit einen Kernel von jengelh (2.6.18.6-jen44-default), deshalb werden die Pakete für diese Kernelversion gebaut.

3. Entfernen zuvor von Hand installierter r1000.ko Module

Sonst kann es zu Problemen beim Laden des Kernelmoduls kommen, deshalb ist dieser Schritt _PFLICHT_ für alle, die schon das Modul von Hand kompiliert/installiert haben:

Code:
sudo find /lib/modules/`uname -r` -name r1000.ko -exec rm -i {} \;
Die Nachfrage mit J bestätigen.

4. Installation des _passenden_ RPM

Code:
uname -r #welchen Kernel habe ich denn?

2.6.18.6-jen44-default #ich brauche das kmp-default

su

Passwort

rpm -Uvh /usr/src/packages/RPMS/i586/r1000-kmp-default-1.05_2.6.18.6_jen44-2.1.i586.rpm
5. Anmerkung (Ohne Gewähr)

Das Paket wird so gebaut, daß das Modul in /lib/modules/Kernelversion/updates/ installiert wird. Dies müsste zur Folge haben (Ohne Gewähr), daß bei einem Minor-Update des Kernels (siehe dazu z.B. hier http://www.pc-forum24.de/kompilieren-von-software-und-sourcen/1643-treiber-und-truecrypt-nach-kernel-update.html?highlight=Minor) das Modul noch funktioniert.

Ansonsten einfach den Rebuild nach Booten des neuen Kernels wieder durchführen und das neue RPM installieren.

Greetz,

RM

P.S. Thx@b3ll3roph0n für eine kleine "BASH-Hilfe" ;)
 

Rain_Maker

Administrator
Teammitglied
Einbinden des neuen Moduls.

Da sich scheinar einige User damit schwer tun, wie man den neuen Treiber der Karte "bekannt" macht hier eine Kurzanleitung (etwas eigenständiges Denken wird vorausgesetzt).

Schritt 1:

Passendes RPM-Paket installieren r1000 (oder r8168).

Schritt 2:

Ausgabe von /usr/sbin/iwconfig --netcard prüfen.

Code:
   Driver Info #0: 
    Driver Status: r1000 is  not active 
    Driver Activation Cmd: "modprobe r1000" 
  Driver Info #1: 
    Driver Status: r8169 is active 
    Driver Activation Cmd: "modprobe r8169" 
  Config Status: cfg=no, avail=yes, need=no, active=unknown 
  Attached to: #14 (PCI bridge)
Es wird ein weiterer Treiber r1000 (oder eben r8168) angezeigt!

Schritt 3:

Yast => Netzwerkgeräte => Netzwerkkarte => Die _richtige_ Karte auswählen => Bearbeiten => Besondere Einstellungen => Erweitert => Hardwaredetails => Modulname.

Dort trägt man nun das neue Modul r1000 (oder eben r8168) ein.

Schritt 4:

Prüfen mit

Code:
grep r1000 /etc/sysconfig/hardware/hwcfg-bus*

ODER

grep r8168 /etc/sysconfig/hardware/hwcfg-bus*
Die Ausgabe muss _in etwa_ so aussehen (Dateiname kann logischerweise anders sein, die Zahlenfolge beschreibt an welchem PCI-Slot die Karte hängt):

Code:
/etc/sysconfig/hardware/hwcfg-bus-pci-0000:02:04.0:MODULE='r1000'

ODER

/etc/sysconfig/hardware/hwcfg-bus-pci-0000:02:04.0:MODULE='r8168'
Schritt 5:

Code:
su

Passwort

modprobe -r r8169

modprobe r1000 

oder eben 

modprobe r8168
Danach ist die Karte aktiv und /usr/sbin/hwinfo --netcard wird in etwa folgendes anzeigen.

Code:
  SubDevice: pci 0x1053 
  Revision: 0x01 
  Driver: "r1000" 
  Driver Modules: "r1000" 
  Device File: eth0

Driver Info #0: 
    Driver Status: r1000 is active 
    Driver Activation Cmd: "modprobe r1000" 
  Driver Info #1: 
    Driver Status: r8169 is not active 
    Driver Activation Cmd: "modprobe r8169" 
  Config Status: cfg=no, avail=yes, need=no, active=unknown
Nun ist der r1000 (oder eben r8168) aktiv und der r8169 inaktiv.

Schritt 5 (optional, sollte eigentlich nicht mehr nötig sein)

Eine Sicherungskopie der Datei /etc/modprobe.d/blacklist anlegen.

In das "Original" hinten folgende Zeile einfügen:

Code:
blacklist r8169
Fertig ist die Laube, auch ohne Neustart, maximal ein rcnetwork restart als root ist erforderlichl.

Greetz,

RM
 

Rain_Maker

Administrator
Teammitglied
Pakete für openSUSE 11.0

Nach einigem "Rumgepatche":

r8169

openSUSE 11.0, kernel-default und 32 Bit:

r8169-kmp-default-6.006.00_2.6.25.9_0.2-rm.1.i586.rpm

openSUSE 11.0, kernel-pae und 32 Bit:

r8169-kmp-pae-6.006.00_2.6.25.9_0.2-rm.1.i586.rpm

//Nachtrag: Und da auch unser "reSPECer" jkeiper wieder fleissig war:

openSUSE 11.0, kernel-default und 64 Bit:

r8169-kmp-default-6.006.00_2.6.25.9_0.2-rm.1.x86_64.rpm

SRC.RPM:

r8169-6.006.00-rm.1.src.rpm

r8168

openSUSE 11.0, kernel-default und 32 Bit:

r8168-kmp-default-8.006.00_2.6.25.9_0.2-rm.1.i586.rpm

openSUSE 11.0, kernel-pae und 32 Bit:

r8168-kmp-pae-8.006.00_2.6.25.9_0.2-rm.1.i586.rpm

openSUSE 11.0, kernel-default und 64 Bit:

r8168-kmp-default-8.006.00_2.6.25.9_0.2-rm.1.x86_64.rpm


SRC.RPM:

r8168-8.006.00-rm.1.src.rpm

Greetz,

RM
 

Rain_Maker

Administrator
Teammitglied
Neue Pakete für openSUSE 11.0

Dieses mal waren keine Patches mehr nötig, deshalb alte Pakete ersetzt.

r8169

openSUSE 11.0, kernel-default und 32 Bit:

r8169-kmp-default-6.007.00_2.6.25.5_1.1-rm.0.i586.rpm

openSUSE 11.0, kernel-pae und 32 Bit:

r8169-kmp-pae-6.007.00_2.6.25.5_1.1-rm.0.i586.rpm

Und hier das 64 Bit Paket:

openSUSE 11.0, kernel-default und 64 Bit:

r8169-kmp-default-6.007.00_2.6.25.11_0.1-rm.0.x86_64.rpm

(thx @jkeiper)

SRC.RPM:

r8169-6.007.00-rm.0.src.rpm

r8168

openSUSE 11.0, kernel-default und 32 Bit:

r8168-kmp-default-8.008.00_2.6.25.5_1.1-rm.0.i586.rpm

openSUSE 11.0, kernel-pae und 32 Bit:

r8168-kmp-pae-8.008.00_2.6.25.5_1.1-rm.0.i586.rpm

Und das 64 Bit Paket:

openSUSE 11.0, kernel-default und 64 Bit:

r8168-kmp-default-8.008.00_2.6.25.11_0.1-rm.0.x86_64.rpm

(thx@jkeiper)

SRC.RPM:

r8168-8.008.00-rm.0.src.rpm

Greetz,

RM
 
Status
Für weitere Antworten geschlossen.
Oben