Einzelnes Modul kompilieren

Dieses Thema im Forum "SuSE / OpenSuSE" wurde erstellt von Alarich, 19.07.2006.

  1. #1 Alarich, 19.07.2006
    Zuletzt bearbeitet: 12.06.2007
    Alarich

    Alarich Tripel-As

    Dabei seit:
    02.01.2004
    Beiträge:
    163
    Zustimmungen:
    0
    [gelöst] Einzelnes Modul kompilieren

    Hallo zusammen,

    ich versuche grade, in meinem Rechner eine Advansys-SCSI-Karte unter SuSE 10.1 zum Laufen zu bringen. Unter SuSE 9.2 konnte ich den Treiber in "make menuconfig" anwählen und dann mit "make modules" kompilieren lassen. Daraufhin gab es dann ein einzelnes Modul namens "advansys.ko", das dann über "modprobe advansys" geladen werden konnte und die Karte lief. Das Problem ist nur, in "make menuconfig" taucht der Treiber nicht mehr auf, aber in den Kernel-Sourcen von Linux ist er dabei. Das heißt dann, daß man ihn grundsätzlich kompilieren kann, denke ich, oder liege ich falsch?
    Wie schaffe ich es nun das einzelne Modul zu kompilieren bzw. wo muß ich schauen, welchen Befehl ich brauche? Unter google gibt es einiges zu dem Thema, bloß betrifft das immer andere Module, daher weiß ich nicht, ob das übertragbar ist...

    Für ein paar Tips wäre ich Euch echt dankbar, langsam bin ich ratlos.

    Merci einstweilen,

    Alarich

    Aktualisierung 14:30:

    Ich habe es zwischenzeitlich geschafft eine Datei namens advansys.o zu erzeugen. Ich bin wie folgt vorgegangen:

    Code:
    The second method involves the following steps:
    
      (1)  Install kernel-source.$ARCH.rpm.
    
      (2)  Install kernel-syms.$ARCH.rpm. This package is necessary for
           symbol version information (CONFIG_MODVERSIONS).
    
      (3)  Compile the module(s) by changing into the module source directory
           and typing ``make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd)''.
           Substitute $ARCH and $FLAVOR with the architecture and flavor
           for which to build the module(s).
    
           If the installed kernel sources match the running kernel, you
           can build modules for the running kernel by using the path
           /lib/modules/$(uname -r)/build as the -C option in the above
           command. (build is a symlink to /usr/src/linux-obj/$ARCH/$FLAVOR).
    
           Starting with SuSE Linux 9.2 / SLES9 Service Pack 1, the
           modversion information for the running kernel is also
           contained in the kernel-$FLAVOR packages, and so for building
           modules for the running kernel, the kernel-syms package is no
           longer required.
    
      (4)  Install the module(s) with
           ``make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd) modules_install''.
    Mein Problem ist, wie bekomme ich jetzt eine Datei namens advansys.ko? Die kann ich dann ja in das Verzeichnis /lib/modules kopieren, dann müßte sie doch erkannt werden, oder?

    Schlau werde ich leider nicht aus dem folgendem Absatz:

    Code:
    If the installed kernel sources match the running kernel, you
           can build modules for the running kernel by using the path
           /lib/modules/$(uname -r)/build as the -C option in the above
           command. (build is a symlink to /usr/src/linux-obj/$ARCH/$FLAVOR).
    Was ist hier durch was zu ersetzen? Kennt sich da vielleicht jemand von Euch aus? :hilfe2:
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Benutze einfach anstatt
    Code:
    make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd)
    den build-Pfad deiner Module, also
    Code:
    make -C /lib/modules/$(uname -r)/build M=$(PWD)
    sofern die installierten Kernel-Quelltexte mit deinem laufenden Kernel versionsmaessig uebereinstimmen. Natuerlich auch den 'make install'-Befehl entsprechend anpassen.
    Wenn keine .ko-Datei erstellt wurde, wurde offenbar das make nicht beendet. Welche Meldungen kamen denn da am Ende?
     
  4. #3 Alarich, 19.07.2006
    Alarich

    Alarich Tripel-As

    Dabei seit:
    02.01.2004
    Beiträge:
    163
    Zustimmungen:
    0
    Ich habe folgenden Befehl benutzt:

    Code:
    make -C /usr/src/linux-obj/$ARCH/$FLAVOR M=$(pwd) advansys
    Ohne den Zusatz advansys hat er zwar kompiliert, aber keine Datei advansys.o produziert.

    Danach kam folgende Fehlermeldung:

    Code:
    advansys.c:(.init.text+0x3059): undefined reference to `kfree'
    advansys.c:(.init.text+0x3072): undefined reference to `kfree'
    advansys.c:(.init.text+0x309f): undefined reference to `kfree'
    advansys.c:(.init.text+0x30c3): undefined reference to `free_dma'
    advansys.c:(.init.text+0x30d2): undefined reference to `kfree'
    advansys.c:(.init.text+0x30e5): undefined reference to `free_irq'
    advansys.c:(.init.text+0x30ec): undefined reference to `scsi_unregister'
    advansys.c:(.init.text+0x3129): undefined reference to `ioport_resource'
    advansys.c:(.init.text+0x312e): undefined reference to `__check_region'
    advansys.o: In function `exit_this_scsi_driver':
    advansys.c:(.exit.text+0xc): undefined reference to `scsi_remove_host'
    advansys.c:(.exit.text+0x73): undefined reference to `printk'
    advansys.c:(.exit.text+0x78): undefined reference to `dump_stack'
    advansys.c:(.exit.text+0x97): undefined reference to `scsi_unregister'
    collect2: ld returned 1 exit status
    make[2]: *** [advansys] Error 1
    make[1]: *** [advansys] Error 2
    make: *** [advansys] Error 2
    make: Leaving directory `/usr/src/linux-2.6.16.13-4-obj/i386/default'
    Liegt der Fehler in der advansys.c Datei? Ich werde die zwei Treiberdateien mal in den Anhang stellen.

    Immerhin habe ich schon mal eine .o - Datei, es kann ja nicht mehr weit sein, oder? Hoffe ich doch mal...
     

    Anhänge:

  5. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Wenn Du sagst, dass die Quelle fuer den Treiber zwar im Kernel vorliegt, jedoch Du mit 'make menuconfig' keine Option siehst, so liegt das vermutlich daran, dass der Treiber von anderen Modulen/ Treibern abhaengt, die nicht aktiviert sind. Darauf weisen auch die 'undefined references' beim Kompilieren hin. Es scheint etwas mit SCSI zu tun zu haben, also such dort mal nach.
    Am Ende solltest Du ein advansys.ko haben, nicht '.o'!

    P.S.: Welche Kernelversion benutzt Du ueberhaupt? Bei 2.6.8 (Debian Sarge) ist das Modul unter 'Device Drivers' -> 'SCSI device support' -> 'SCSI low-level drivers' zugaenglich.
     
  6. #5 Alarich, 19.07.2006
    Alarich

    Alarich Tripel-As

    Dabei seit:
    02.01.2004
    Beiträge:
    163
    Zustimmungen:
    0
    Ich benutze SuSE 10.1 mit Kernel-Version 2.6.16.13-4. Unter SuSE 9.2 konnte man den Treiber auch ganz leicht einbinden, weil er unter "make menuconfig" verfügbar war. Dann halt das Übliche, "make modules" und dann "make modules_install". Modul "advansys" hinzugefügt, fertig.
    Gibt es vielleicht ein anderes Modul, mit dem die Karte laufen könnte? Ansonsten muß ich halt im Notfall bei Ebay mal nach einer anderen Karte schauen...

    Ich habe jetzt mal nur "make" im Verzeichnis der Datei "advansys.o" ausgeführt, aber auch ohne Erfolg. :headup:
     
  7. #6 rikola, 19.07.2006
    Zuletzt bearbeitet: 19.07.2006
    rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Schreib mal in /lib/modules/`uname -r`/build/.config in eine Zeile
    Code:
    CONFIG_SCSI_ADVANSYS=m
    
    rein und versuch es dann nochmal mit einem make in dem Verzeichnis.

    Im Makefile von /lib/modules/`uname -r`/build/drivers/scsi wird diese Variable abgefragt, um advansys.ko zu bauen.
    /EDIT

    Hab das grade mal ausprobiert - es funktioniert so nicht. Was funktionierte, ist Folgendes:
    Code:
    make menuconfig # konfiguriere Deinen Kernel, ohne auf advansys zu achten
    make                       # baue kernel und Module
    make CONFIG_SCSI_ADVANSYS=m drivers/scsi/advansys.ko
    
    Dies erzeugt zumindest ein advansys.ko, das Du Dir dann nach /lib/modules/`uname-r`/kernel/drivers/scsi/ oder sokopieren kannst.
    Nach einem 'depmod' sollte es mit 'modprobe advansys' einzubinden sein.

    Ich konnte es nicht eibinden, da ich das Geraet ja nicht habe, aber probiere es mal aus
     
  8. #7 Alarich, 19.07.2006
    Alarich

    Alarich Tripel-As

    Dabei seit:
    02.01.2004
    Beiträge:
    163
    Zustimmungen:
    0
    Super, danke erstmal für den Tip!
    Bin zwischenzeitlich in der Arbeit, kann Deinen Tip also erst ausprobieren, wenn ich wieder daheim bin. Ich melde mich wieder, wenn ichs probiert habe.

    Danke schonmal soweit,

    Alarich
     
  9. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Autsch, autsch, autsch... Einfach so die .config des Kernels editieren ohne zu wissen, was man da macht und ohne die Abhaengigkeiten auch anzuschalten duerfte ziemlich schief gehen. Die Meldung
    Code:
    advansys.c:(.init.text+0x309f): undefined reference to `kfree'
    weist fuer mich eher darauf hin, dass die Kernel-Quelltexte nicht vorkompiliert wurden, da kfree() eine der Grundfunktionen des Kernels ist. Also einfach die Kernel-Quelltexte installieren, das Kernel-Source-Verzeichnis (normalerweise /usr/src/linux-`uname -r`) nach /usr/src/linux verlinken, in dieses Verzeichnis wechseln, die Datei /boot/config-`uname -r` nach /usr/src/linux/.config kopieren, 'make oldconfig' ausfuehren, 'make all' durchlaufen lassen und dann nochmal versuchen.
     
  10. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Das unterhalb des 'EDIT' in meinem Beitrag ist eine vollstaendige Amleitung. Dabei braucht man nicht mehr mit der .config rumpfuschen.
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. #10 Alarich, 20.07.2006
    Alarich

    Alarich Tripel-As

    Dabei seit:
    02.01.2004
    Beiträge:
    163
    Zustimmungen:
    0
    Hallo nochmal,

    ich habe es mit Eurer Hilfe jetzt tatsächlich geschafft, das Modul zu kompilieren und einzubinden. Die SCSI-Karte geht und damit auch mein Scanner! Da mach ich gleich mal einen Luftsprung :bounce:
    Ich bin nach der Methode von rikola vorgeganden, wie er nach dem EDIT geschrieben hat. Config-Files waren keine anzupassen. Die drei Befehle haben einwandfrei funktioniert :respekt: Besonderen Dank an rikola!

    Vielen Dank auch an alle anderen, die mir Lösungsvorschläge gepostet haben, ohne Euch hätte ich das nicht hinbekommen! Super!

    Merci,

    Alarich
     
  13. #11 Alarich, 12.06.2007
    Alarich

    Alarich Tripel-As

    Dabei seit:
    02.01.2004
    Beiträge:
    163
    Zustimmungen:
    0
    Hallo,

    nach langer Zeit poste ich hier noch mal etwas rein. Ich habe heute OpenSuSE 10.2 aufgesetzt. Dort ist das Modul advansys wieder lauffähig vorhanden. Es läßt sich leicht mit

    modprobe advansys

    bzw. einer Änderung in der Sysconfig

    MODULES_LOADED_AT_BOOT advansys

    einbinden. Die Karte wird dann erkannt und kann verwendet werden.

    Für SuSE 10.1 klappt aber die obige Anleitung. Ich markiere den Thread mal als gelöst.

    CU,
    Alarich
     
Thema: Einzelnes Modul kompilieren
Besucher kamen mit folgenden Suchen
  1. modul kompilieren linux

    ,
  2. suse module kompilieren

Die Seite wird geladen...

Einzelnes Modul kompilieren - Ähnliche Themen

  1. Sie kann ich mit mit moc eine einzelnes Audiofile abspielen?

    Sie kann ich mit mit moc eine einzelnes Audiofile abspielen?: ich will moc in ein bashscript einbauen und will immer nur ein einzelnes Audiofile starten ohne eine Playlist anzulegen. Geht das mit Moc? oder...
  2. RegExp für einzelnes Wort

    RegExp für einzelnes Wort: Hi, weiß jemand welcher Reguläre Ausdruck genau das erste (n-te) Wort einer Zeile meint? Mfg Sebi
  3. einzelnes Paket aus dapper installieren

    einzelnes Paket aus dapper installieren: Hi, ich verwende zurzeit ein ubuntu breezy, brauche aber ein Paket, das in der Version nur in dapper enthalten ist. Wie kann ich meine...
  4. Raspberry Pi: Neues Kamera-Modul verfügbar

    Raspberry Pi: Neues Kamera-Modul verfügbar: Fast drei Jahre nach der ersten Vorstellung eines Kameramoduls für den Kleinstrechner Raspberry Pi liefert die hinter dem Gerät stehende...
  5. Fedora möchte die Distribution weiter modularisieren

    Fedora möchte die Distribution weiter modularisieren: Die von Red Hat gesponsorte Distribution Fedora möchte ihre Infrastruktur modularer gestalten. Dazu hat sich eine Arbeitsgruppe gebildet....