• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

3ware 9500S Modul 3w-9xxx.o erstellen, aber wie?

Larifari

Newbie
Gruesst euch
ich versuche fuer SLOX 4.1 das Treibermodul fuer 3ware 9500S-4LP zu erstellen.
Beim von CD frisch installierten SLOX (2.4.19 4GB) fuehrt die von der 3ware Seite geholte "Linux 2.4 Kernel Driver Source" und das daraus kompilierte Modul beim Laden per insmod zum Absturz.
Mein Gedanke war nun, dass das evtl. mit einer neueren Kernelversion funktionieren wuerde.
Deswegen habe ich mit YOU automatisch geupdated.
Die Kernelversion ist nun 2.4.21-231
Wenn ich nun versuche die 3w-9xxx.o Datei zu erstellen, kommen viele Meldungen, aber am Ende keine ".o" Datei heraus.
  • slox:~/3ware/driver # make -f Makefile.oth
    gcc -c -D__KERNEL__ -DMODULE -Wall -Wno-sign-compare -fno-strict-aliasing -Wstrict-prototypes -O2 -fomit-frame-pointer -I. -I/usr/src/linux/drivers/scsi -I/usr/src/linux/include -include /usr/src/linux/include/linux/modversions.h -o 3w-9xxx.o 3w-9xxx.c
    3w-9xxx.c: /usr/src/linux/include/linux/modversions.h: No such file or directory In file included from /usr/src/linux/include/linux/module.h:10,
    from 3w-9xxx.c:61:
    /usr/src/linux/include/linux/config.h:4:28: linux/autoconf.h: No such file or directory In file included from /usr/src/linux/include/linux/list.h:241,
    from /usr/src/linux/include/linux/module.h:12,
    from 3w-9xxx.c:61:
    /usr/src/linux/include/linux/prefetch.h:13:26: asm/prefetch.h: No such file or directory In file included from /usr/src/linux/include/linux/mm.h:4,
    from /usr/src/linux/include/linux/slab.h:14,
    from /usr/include/asm/pci.h:32,
    from /usr/src/linux/include/linux/pci.h:669,
    from 3w-9xxx.c:71:
    /usr/src/linux/include/linux/sched.h:849: conflicting types for `kernel_thread'
    /usr/include/asm/processor.h:428: previous declaration of `kernel_thread' In file included from /usr/src/linux/include/linux/mm.h:12,
    from /usr/src/linux/include/linux/slab.h:14,
    from /usr/include/asm/pci.h:32,
    from /usr/src/linux/include/linux/pci.h:669,
    from 3w-9xxx.c:71:
    /usr/src/linux/include/linux/mmzone.h:44: `CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function)
    /usr/src/linux/include/linux/mmzone.h:44: requested alignment is not a constant In file included from 3w-9xxx.c:73:
    /usr/src/linux/include/linux/proc_fs.h:205: warning: `struct tty_driver' declared inside parameter list
    /usr/src/linux/include/linux/proc_fs.h:205: warning: its scope is only this definition or declaration, which is probably not what you want
    /usr/src/linux/include/linux/proc_fs.h:206: warning: `struct tty_driver' declared inside parameter list In file included from /usr/include/asm/hardirq.h:6,
    from /usr/src/linux/drivers/scsi/scsi.h:30,
    from /usr/src/linux/drivers/scsi/sd.h:18,
    from 3w-9xxx.c:89:
    /usr/src/linux/include/linux/irq.h:65: `CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function)
    /usr/src/linux/include/linux/irq.h:65: requested alignment is not a constant In file included from /usr/src/linux/drivers/scsi/scsi.h:30,
    from /usr/src/linux/drivers/scsi/sd.h:18,
    from 3w-9xxx.c:89:
    /usr/include/asm/hardirq.h:16: `CONFIG_X86_L1_CACHE_SHIFT' undeclared here (not in a function)
    /usr/include/asm/hardirq.h:16: requested alignment is not a constant
    make: *** [3w-9xxx.o] Error 1
Was bedeutet das? Offensichtlich fehlen etliche Dateien, aber woher nehmen?

Hier (http://www.linux-club.de/viewtopic.php?t=12714) hatte ich das Grundproblem schon beschrieben. Ich wusste nicht so recht in welches Forum es passt.

Schonmal vielen Dank fuer eure Tips.
 
A

Anonymous

Gast
Hi!

Gleich vorweg: ich habe bisher auch immer Pech gehabt beim Kompilieren von externen Treibern. Ich weiss nicht ob das vielleicht an der SuSE-eigenen Struktur der Quellen liegt, oder an meiner Ignoranz.

Aber so ein paar Anfängertücken konnte ich schon lösen:

- sind die Kernel-Quellen installiert und passen auch zum Kernel (besonders wichtig, wenn die Quellen nach einem YOU update des Kernels installiert wurden)?

- ein Paket namens kernel-sysm enthält die modversions des Kernels und soll beim Kompilieren von externen Modulen hilfreich sein, wenn der Kernel nicht von diesen Quellen gebaut wurde:
Installing this package before compiling kernel modules outside of the kernel source tree adds symbol version information in these modules. Modules without symbol version information can only be loaded on exactly the kernel version for which they were compiled. Modules with symbol version information can also be loaded into more recent kernels as long as none of the symbols exported by the kernel changes. (This provides a reasonable level of confidence but does not guarantee that the module will still work.)

- am sichersten ist wohl, sich den Kernel aus den Quellen erstmal selbst zu bauen. Ein gutes Howto: www.thomashertweck.de/kernel26.html oder hier im Forum unter 'Wichtig'
 

oc2pus

Ultimate Guru
rpm -q k_deflt (kernel 2.4x) ODER
rpm -q kernel-default (kernel 2.6x)
rpm -q kernel-source
uname -r

diese Befehle MÜSSEN alle die gleiche Version anzeigen, sonst geht das mit dem Modul Compile nie.

dann noch kontrollieren ob
ls -al /lib/modules/`uname -r`/source auf /usr/src/linux zeigt (einige Module erwarten diesen link für den compile)
 
OP
L

Larifari

Newbie
Danke, dass ihr euch die Zeit nehmt...

Folgendes Ergebnis bringen die Befehle:
  • slox:~ # rpm -q k_deflt
    k_deflt-2.4.21-231
    slox:~ # rpm -q kernel-default
    package kernel-default is not installed
    slox:~ # rpm -q kernel-source
    kernel-source-2.4.21-231
    slox:~ # uname -r
    2.4.21-231-default
    slox:~ #
Wie installiere ich das kernel-default? Im Yast kommt kein Suchergebnis fuer "default" oder "source" bzw. nichts was noch nicht installiert waere.
 

na-cx

Hacker
Vorsicht! Du hast UnitedLinux als Basis.

Deinen jetzigen Kernel mußt du mit dem defaultkernel Überschreiben.
Yast -> SW installieren -> Paketgruppen -> Basis -> Kernel -> k_deflt installieren

Versuch lieber nicht, dir einen den 2.6'er Kernel zu bauen. Der 2.4'er ist stabiler und sicherer! Laut 3ware wird SuSE 8.x unterstützt -> Kernel 2.4.X
 

oc2pus

Ultimate Guru
@larifari
das ist eine alternative:
k_deflt ==> 2.4
kernel-default ==> 2.6
du hast 2.4 und alle drei Versionen sind gleich, das sind gute Vorraussetzungen für einen Kernelbau ;)

in deinem kernel-source Verzeichnis solltest du ein make clone-config aufrufen, damit werden die Sourcen entsprechend dem aktuell laufenden Kernel präpariert.
 
OP
L

Larifari

Newbie
@oc2pus
sorry, ich verstehe nicht ganz...
deine vorher genannte grundbedingung (alle Befehle muessen die gleiche Version anzeigen ist doch gar nicht erfuellt)
"rpm -q kernel-default" liefert doch "package kernel-default is not installed"

Eine grundsaetzliche Frage: Ist meine Vorgehensweise ueberhaupt sinnvoll?
Nehmen wir an, ich kann die 3w-9xxx.o Datei erstellen...
Wenn ich diese dann per insmod einbinde, sollte ich doch auf die Festplatten bzw. das RAID zugreifen koennen, welches an diesem Kontroller haengt.
Kann das Modul dann jedesmal geladen werden, oder muss ich mir einen Kernel erstellen, in dem dieses Modul fest eingebunden ist?
Welche Auswirkungen hat das dann, wenn beim naechsten YOU wieder ein Kernel Update dabei ist? (ich will von dem Raid am 3ware Controller booten)
 
A

Anonymous

Gast
Das war von oc2pus nur als Alternative gemeint: kernel-default bei 2.6er Kerneln, k_deflt bei 2.4er Kerneln. Da wir alle sicher sind, dass du einen 2.4er hast und der auch ordnungsgemäss installiert ist, braucht darüber kein Wort mehr verloren zu werden. Alles in Ordnung!

Kann das Modul dann jedesmal geladen werden, oder muss ich mir einen Kernel erstellen, in dem dieses Modul fest eingebunden ist?
Du kannst das Modul in die initrd aufnehmen (mkinitrd -m 3w-9xxx), dann wird es bei jedem Start geladen (flexiblere Methode) oder in den Kernel einbauen (Jacke wie Hose).
Welche Auswirkungen hat das dann, wenn beim naechsten YOU wieder ein Kernel Update dabei ist? (ich will von dem Raid am 3ware Controller booten)
Das du dir wieder ein neues Modul kompilieren musst. Mach einfach kein Update mehr, es sei denn der Controller wird per default unterstützt.
 

oc2pus

Ultimate Guru
@abisko
ich danke dir auch für die Klärung ;)

@larifari
sorry, für die Verwirrung, aber wenn man nicht weiß ob kernel 2.4 oder 2.6 ... ich habe mein posting oben editiert und ein dickes ODER hingeschrieben, sonst fällt nochmal jemand drauf rein.
 
Oben