PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wo wird angegeben, welches Kernel Modul für die Netzwerkkarte verwendet werden soll?



PhobosUT
18.10.03, 17:48
Hi!
Ich hab' mir jetzt endlich 100Mbit Karten gekauft. Meine vorherigen 10Mbit Karten hab' ich, da ich SuSE 7.3 hab', mit Yast eingerichtet. Das verwendete Kernelmodul net2k-pci.o funktioniert aber nicht mehr mit den neuen Karten. Es sind übrigens Realtek 8139 Karten, für die es ja freundlicherweise auch Linux-Treiber in Form von einem Kernelmodul gibt. Da ich dieses Modul auch verwenden möchte, kann ich natürlich nicht die Konfiguration mittels Yast benutzen. Außerdem möchte ich Yast gar nicht unbedingt benutzen. Denn durch die manuelle Konfiguration lernt man mehr. Also hab' ich die komplette /sbin/init.d/network auseinander genommen. Dieses Start-Script konfiguriert beim booten ja das Netzwerk. Das Problem ist nur: Nachdem ich mit dem Script durch war, hab' ich nirgendwo einen Aufruf zum Einbinden des Kernelmoduls gefunden. Nämlich dieser Aufruf müsste an dieser Stelle kommen:



echo "Setting up network device $NETDEV"
ifconfig $NETDEV $IFCONFIG
rc_status -v1


Denn das Script gibt nach "Setting up network device eth0" die Fehlermeldung aus, dass er das Kernelmodul net2k-pci.o nicht laden kann, weil er keine passende Netzwerkkarte findet. Aber wie man sieht macht er hier nur den ifconfig Aufruf. Komischerweise kommt die Fehlermeldung, dass er die Kernelmodule nicht findet auch nur, wenn das Script innerhalb des init-V Prozesses aufgerufen. Wenn ich nachher in der Konsole /sbin/init.d/network start aufrufe kommt nur 'ne Fehlermeldung von ifconfig. Aber nix mit Kernelmodulen.

Ich möchte also eigentlich nur wissen, wo eingetragen ist, welches Kernelmodul für eth0 geladen werden muss, damit ich den Eintrag ändern kann. Denn offenbar wird das Kernelmodul ja nicht von dem Start-Script geladen.

Danke schonmal im Voraus!

geronet
18.10.03, 18:05
Wow, einer der's ganz genau nimmt ;)

Das Kernelmodul steht in /etc/modules.conf drin, so etwa sollte es aussehn:

alias eth0 8139

Grüsse, Stefan

PhobosUT
18.10.03, 18:15
Danke!
Das ging ja schnell. Stimmt, die modules.conf hatte ich vollkommen vergessen. Aber nochmal 'ne Verständnis frage. Also es erfolgt kein expliziter Aufruf durch modprobe oder insmod. Da ein Alias für das Modul, nämlich eth0 besteht, weiß der Rechner, in dass er in dem Moment, in dem ifconfig auf eth0 zugreift, dass er das Kernelmodul laden muss. Aber wieso funktioniert das nur während des init-V Prozesses und wieso versucht er nachher in der Kosole nicht mehr das Kernelmodul zu laden, wenn es benötigt wird?

wb1
19.10.03, 19:59
Die benötigten Module werden beim Systemstart geladen, auch wenn sie nicht verwendet werden.
Die geladenen Module siehst du mit lsmod.
Um beim Systemstart die benötigten Module zu laden, müssen sie in der initrd vorhanden sein. Während des Starts ist ja das Root-File-System noch nicht gemountet.
Wenn du, wie du beschreibst, beim Start die neuen, geänderten Module laden willst, mußt du eine neue initrd erstellen.
Das machst du mit mkinitrd oder mk_initrd. Je nach Distribution.
Danach mußt du, wenn als bootloader lilo verwendet wird, lilo aufrufen.
Beim nächsten Start wird das modul automatisch geladen. Verwendet wird es, wenn du mit ifconfig die Einstellungen übergibst.
Anders ist es, wenn du ohne Module arbeitest. Dann muß der Treiber mit in den Kern compiliert werden. Auch hier hast du die Möglichkeit, mehrere Treiber in den Kern zu compilieren.
Nebenbei, Kernel mit fest eincompilierten Treiben sind sicherer gegen Angriffe. Treibermodule können durch Angreifer ausgetauscht werden.

PhobosUT
21.10.03, 10:22
Achso läuft das. Ich versteh's zwar noch nicht 100%ig, aber ich werd' mich mal mit beschäftigen. Danke!
Ich wollt' euch noch mal kurz erzählen wie's dann bei mir weiterging. Hab' das Kernelmodul geladen, klappte auf Anhieb. Dann mit ifconfig konfiguriert. Klappte auch. Dann ping auf meine IP Adresse ging auch. Aber ich konnte keinen anderen Rechner im Netzwerk erreichen. An anderen Netzwerkeinstellungen konnte es ja nicht liegen, die liefen ja vorher alle mit der alten Karte. ich muss dazu sagen, dass mein Mainboard schon lange nicht mehr richtig im Gehäuse saß und es deshlab nicht ganz einfach war PCI Karten richtig in den Slot zu stecken. Aber scanpci hat die Karte angezeigt und das Kernelmodul ließ sich laden. Also musste die ja richtig drin sein. Trotzdem hab' ich alles auseinander genommen, das Mainbord wieder richtig positioniert und schon passte die Karte 1000mal besser in den Slot und siehe da: Auf einmal ging auch ping zu anderen Rechnern :ugly: :ugly: :ugly: Anscheinend war die Karte mit den Pins drin, die zur Erkennung notwendig sind, aber die Pins, die dann zum vollständigen Betrieb nötig sind, waren wohl draußen :ugly: :ugly: :ugly:

Hätte ich vorher nicht geglaubt, dass so was geht. :)