[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: FAI: Problem mit Netzwerktreiber



Hallo Gordon,

Gordon Grubert schrieb:

> hier laeuft Debian Lenny mit FAI bisher ohne Probleme.
> Neue Rechner haben jedoch Intel Netzwerkchipsaetze drauf,
> fuer die der igb-Treiber selber zu kompilieren ist.

> Der FAI-Server selbst hat diese Hardware und funktioniert.
> Ich habe im erstellten nfsroot nachgesehen: das Modul
> igb.ko ist vorhanden (vom Server uebernommen; gleiche
> Architektur, gleicher Kernel etc.). In der Datei
> /usr/share/initramfs-tools/hook-functions ist das Modul
> in der Funktion auto_add_modules() gelistet.

D.h. Du hast die igb.ko einfach unter /lib/modules/2.6... reinkopiert?

> Wenn der Client bootet, startet der PXE-Bootprozess,
> die Initrd wird geladen und dann kommt:

> Monting root file system ... ...
> Uniform multi-platform E-ide-driver
> ... ide0 ...
> ... ide1 ...
> Kernel panic - not syncing: Attempt to kill init!
> 
> Jedoch verstehe ich nicht, warum der igb-Treiber
> offensichtlich nicht gefunden wird.
> 
> Das Testen der ide-Module (um ein Root-FS zu finden),
> wird IMHO durch die Datei (im nfsroot)
> /usr/share/initramfs-tools/scripts/live-premount/modules
> ausgeloest, die folgendes enthaelt:
> modprobe -q ide-generic
> modprobe -q esp
> 
> Ich habe schon versucht, das igb-Modul hier hinzuzufuegen,
> jedoch aendert sich nichts. Muss die initrd dann neu
> gebaut werden?

> Waere schoen, wenn jemand eine Idee haette.

Mit FAI habe ich noch keine Erfahrungen, aber in meinem Testlabor läuft
ein PXE-Server auf Lenny und die diversen Linux-Distros bzw. die
ZENWorks-Kernel von Novell brauchen öfter mal einen neuen Treiber.
Dieser Treiber muß unbedingt in die initrd. Entpacke doch mal die Initrd
die Dir momentan den Ärger bereitet und schaue nach, ob der Treiber
igb.ko da tatsächlich drin ist. Und dann, gaaaanz wichtig: Damit der
Kernel weiß welches Modul für die Hardware zusteändig ist reicht es
nicht aus, nur das Modul in die Verzeichnishierache unter /lib/modules
zu kopieren. Ganz wichtig ist dann ein

# depmod -a

Damit erstellst Du nämlich die für das Plug & Play essentiellen Dateien
unter /lib/modules/<kernelversion>.

Wenn Du die initrd entpackt hast, dann mache mal einen

# grep igb modules.pcimap

in dem Verzeichnis in dem die modules.pcimap steht, also
/lib/modules/<kernelversion> bzw. eben das wohin Du das Zeugs entpackt
hast. Dann siehst Du nämlich gleich die bekannten PCI-IDs bei denen
igb.ko dann per "plug&play" automagisch geladen wird. Sprich, der Kernel
macht so was wie lspci -n und sucht sich zu jeder PCI ID in der
modules.pcimap das Treibermodul, welches dafür zuständig ist. Das
funktioniert aber nur dann, wenn diese Datei nach hinzufügen eines neuen
Kernelmoduls mit depmod -a neu erstellt wurde. Ansonsten hast Du zwar
das Modul im Dateibaum stehen, aber der Kernel weiß trotzdem nicht, für
welche PCI IDs dieser Treiber zuständig ist und lädt den dann nicht.

Wenn ich solche Netzwertreiber einbinde (kommt z.B. für ZENWorks immer
wmal wieder vor), dann entpacke ich die initrd in ein
Arbeitsverzeichnis, kopiere das Modul da rein, mache einen dempmod -a
der dann via -b auch noch das "basedir" mitbekommt, also keine
/lib/modules/<kernelversion>/modules.pcimap sondern eben eine solche
Datei unterhalb von <basedir> anlegt.

Diesen kompletten Dateibaum kann man wieder zu einer initrd
zusammenpacken und hat dann eine, die das neue Treibermodul eingebunden
hat.

Aber wenn Du sowieso identische Architekturen und Kernel hast kannst Du
ja auf dem Serversystem die initrd bauen.

HTH
Rainer
-- 
Rainer König, Diplom-Informatiker (FH), Augsburg, Germany


Reply to: