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

Alles rund um die Systemverwaltung, die Administration und Konfiguration Eures Linuxsystems

Moderator: Moderatoren

Antworten
Larifari
Newbie
Newbie
Beiträge: 6
Registriert: 3. Aug 2004, 00:23
Wohnort: Aschaffenburg

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

Beitrag von Larifari » 4. Aug 2004, 03:28

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.

Werbung:
Gast

Beitrag von Gast » 4. Aug 2004, 09:49

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'

Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus » 4. Aug 2004, 10:18

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)
Zuletzt geändert von oc2pus am 4. Aug 2004, 13:57, insgesamt 1-mal geändert.
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

Larifari
Newbie
Newbie
Beiträge: 6
Registriert: 3. Aug 2004, 00:23
Wohnort: Aschaffenburg

Beitrag von Larifari » 4. Aug 2004, 13:46

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
Hacker
Beiträge: 493
Registriert: 18. Mai 2004, 20:00
Wohnort: Syke

Beitrag von na-cx » 4. Aug 2004, 13:51

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
CU
Christian

Bild

Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus » 4. Aug 2004, 13:56

@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.
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

Larifari
Newbie
Newbie
Beiträge: 6
Registriert: 3. Aug 2004, 00:23
Wohnort: Aschaffenburg

Beitrag von Larifari » 4. Aug 2004, 14:44

@na-cx
laut Yast ist k_deflt in der Version 2.4.21 installiert

Larifari
Newbie
Newbie
Beiträge: 6
Registriert: 3. Aug 2004, 00:23
Wohnort: Aschaffenburg

Beitrag von Larifari » 4. Aug 2004, 15:15

@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)

Gast

Beitrag von Gast » 4. Aug 2004, 15:58

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.
Zuletzt geändert von Gast am 4. Aug 2004, 16:10, insgesamt 1-mal geändert.

Larifari
Newbie
Newbie
Beiträge: 6
Registriert: 3. Aug 2004, 00:23
Wohnort: Aschaffenburg

Beitrag von Larifari » 4. Aug 2004, 16:08

@abisko00
ah ok... sorry, hatte ich missverstanden... danke fuer die Klaerung

Benutzeravatar
oc2pus
Ultimate Guru
Ultimate Guru
Beiträge: 6506
Registriert: 21. Jun 2004, 13:01

Beitrag von oc2pus » 4. Aug 2004, 16:18

@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.
tell people what you want to do, and they'll probably help you to do it.
PackMan
LinWiki : Das Wiki für Linux User

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast