Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Kernel-Module kompilieren (bonding) schlägt immer fehl

  1. #1
    Registrierter Benutzer
    Registriert seit
    May 2009
    Beiträge
    5

    Kernel-Module kompilieren (bonding) schlägt immer fehl

    Hallo allerseits

    Ich habe ein openSUSE 11.1-System (2.6.27.21-0.1-pae), mit installiertem Bonding-Treiber (Version 3.3.0). Der neue Kernel (2.6.29) hat eine neue Version des Bonding-Treibers verfügbar (3.5.0). Ich habe nun die Kernel-Source heruntergeladen und entpackt. Dann folgendes Makefile erstellt:
    Code:
    opensuse:/tmp/linux-2.6.29/drivers/net/bonding # cat Makefile
    #
    # Makefile for the Ethernet Bonding driver
    #
    obj-m := bonding.o
    bonding-objs := bond_main.o bond_3ad.o bond_alb.o bond_sysfs.o
    
    all:
            make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    
    clean:
            make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
    Das Kompilieren mit "make" schlägt jedoch immer mit folgender Fehlermeldung fehl:
    Code:
    opensuse:/tmp/linux-2.6.29/drivers/net/bonding # make
    make -C /lib/modules/2.6.27.21-0.1-pae/build M=/tmp/linux-2.6.29/drivers/net/bonding modules
    make[1]: Entering directory `/usr/src/linux-2.6.27.21-0.1-obj/i386/pae'
    make -C /usr/src/linux-2.6.27.21-0.1 O=/usr/src/linux-2.6.27.21-0.1-obj/i386/pae/. modules
      CC [M]  /tmp/linux-2.6.29/drivers/net/bonding/bond_main.o
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_vlan_rx_registerâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:456: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:459: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:460: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_vlan_rx_add_vidâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:478: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:481: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:482: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_vlan_rx_kill_vidâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:508: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:511: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:516: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_add_vlans_on_slaveâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:532: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:540: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:541: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:544: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:548: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_del_vlans_from_slaveâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:556: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:566: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:574: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:580: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:581: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_check_dev_linkâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:690: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:698: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_compute_featuresâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:1350: error: âNETIF_F_ONE_FOR_ALLâ undeclared (first use in this function)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:1350: error: (Each undeclared identifier is reported only once
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:1350: error: for each function it appears in.)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:1353: error: implicit declaration of function ânetdev_increment_featuresâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:1362: error: implicit declaration of function ânetdev_fix_featuresâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_enslaveâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:1388: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:1397: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:1479: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_get_statsâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:3906: error: implicit declaration of function âdev_get_statsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:3906: warning: initialization makes pointer from integer without a cast
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_neigh_setupâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4129: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4130: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4131: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_change_mtuâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4165: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_set_mac_addressâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4252: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4255: error: dereferencing pointer to incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: At top level:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4585: error: variable âbond_netdev_opsâ has initializer but incomplete type
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4586: error: unknown field ândo_openâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4586: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4586: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4587: error: unknown field ândo_stopâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4587: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4587: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4588: error: unknown field ândo_start_xmitâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4588: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4588: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4589: error: unknown field ândo_get_statsâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4589: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4589: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4590: error: unknown field ândo_do_ioctlâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4590: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4590: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4591: error: unknown field ândo_set_multicast_listâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4591: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4591: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4592: error: unknown field ândo_change_mtuâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4592: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4592: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4593: error: unknown field ândo_set_mac_addressâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4593: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4593: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4594: error: unknown field ândo_neigh_setupâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4594: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4594: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4595: error: unknown field ândo_vlan_rx_registerâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4595: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4595: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4596: error: unknown field ândo_vlan_rx_add_vidâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4596: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4596: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4597: error: unknown field ândo_vlan_rx_kill_vidâ specified in initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4597: warning: excess elements in struct initializer
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4597: warning: (near initialization for âbond_netdev_opsâ)
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c: In function âbond_initâ:
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4632: error: âstruct net_deviceâ has no member named ânetdev_opsâ
    /tmp/linux-2.6.29/drivers/net/bonding/bond_main.c:4643: error: âIFF_MASTER_ARPMONâ undeclared (first use in this function)
    make[4]: *** [/tmp/linux-2.6.29/drivers/net/bonding/bond_main.o] Error 1
    make[3]: *** [_module_/tmp/linux-2.6.29/drivers/net/bonding] Error 2
    make[2]: *** [sub-make] Error 2
    make[1]: *** [all] Error 2
    make[1]: Leaving directory `/usr/src/linux-2.6.27.21-0.1-obj/i386/pae'
    make: *** [all] Error 2
    Das Verzeichnis "opensuse:/tmp/linux-2.6.29/drivers/net/bonding #" hat folgenden Inhalt:
    Code:
    opensuse:/tmp/linux-2.6.29/drivers/net/bonding # l
    total 384
    drwxr-xr-x  2 root root   4096 May 27 10:09 ./
    drwxr-xr-x 40 root root  12288 Mar 24 00:12 ../
    -rw-r--r--  1 root root    268 May 26 15:36 Makefile
    -rw-r--r--  1 root root    223 Mar 24 00:12 Makefile.sav
    -rw-r--r--  1 root root  81699 Mar 24 00:12 bond_3ad.c
    -rw-r--r--  1 root root   9463 Mar 24 00:12 bond_3ad.h
    -rw-r--r--  1 root root  45798 Mar 24 00:12 bond_alb.c
    -rw-r--r--  1 root root   4802 Mar 24 00:12 bond_alb.h
    -rw-r--r--  1 root root   5432 Mar 24 00:12 bond_ipv6.c
    -rw-r--r--  1 root root 139910 Mar 24 00:12 bond_main.c
    -rw-r--r--  1 root root  43529 Mar 24 00:12 bond_sysfs.c
    -rw-r--r--  1 root root  10845 Mar 24 00:12 bonding.h
    Meine Frage: Was ist hier noch falsch? Kann überhaupt ein einzelnes Treiber-Module kompiliert werden? Kann das Modul auch nur mit "gcc" übersetzt werden (ohne Mithilfe eines Makefiles bzw. "make")?
    Besten Dank für Eure Mithilfe.
    Hannes

  2. #2
    Registrierter Benutzer Avatar von Fabeltier
    Registriert seit
    Aug 2006
    Ort
    Algés
    Beiträge
    154
    Hallo,

    ja natuerlich kannst Du auch nur ein Modul fuer Deinen Kernel bauen und dann einladen. Das geht auch mit aus dem Kernel "herausoperierten" Sourcen.

    Ein einfacherer Weg waere allerdings, Du suchst auf der Seite des Treibers nach einem passenden Sourcepaket bzw. Patch zu Deiner Kernelversion. Das scheint mir das eigentliche Problem hier zu sein, die Kernelversion. Im 2.6.27 gibt's bspw. schon mal keinen netdev_ops Zeiger in der net_device Structure. Wenn Du also das Modul baust ist es am einfachsten unter der Kernelversion zu bauen fuer den es dann auch sein soll. Ausnahmen sind hier nur Crosscompiler Geschichten, bei denen man sowieso unter anderem Kernel / System baut (zB im Embedded Bereich).

    Im allg. muss der Kernel fuer ein selbergebautes Modul aber auch "bereit" sein - ich denke mal Du hast den 2.6.27 Kernel auch schon selber kompiliert und hast entsprechenden Support aktiviert bzw versions checks deaktiviert(?), naja..
    Geändert von Fabeltier (27.05.09 um 17:31 Uhr)
    Your own personal Jesus..

  3. #3
    Registrierter Benutzer
    Registriert seit
    Feb 2006
    Ort
    Altenstadt-Lindheim
    Beiträge
    1.847
    ein Makefile ruft auch nur den gcc mit entsprechenden Parametern auf - logisch, dass es
    auch nur mit gcc und co funktioniert, so man alle -I und -L usw richtig setzt.

  4. #4
    Registrierter Benutzer
    Registriert seit
    May 2009
    Beiträge
    5
    Ich habe den 2.6.27er-Kernel nicht selber kompiliert. Besteht denn in einer solchen Konstellation überhaupt die Möglichkeit, ein Modul - so wie ich es vor habe - zu kompilieren?

    Leider gibt es für den Bonding-Treiber keinen eigentlichen Hersteller, bei dem ich Sourcepaket herunterladen könnte.
    Besten Dank.
    Hannes

  5. #5
    Rain_maker
    Gast
    http://www.linux-club.de/viewtopic.php?f=41&t=103576

    http://forums.opensuse.org/applicati...-problems.html

    Thanks a lot for your answers. I will do a cross reference to this post in the other both foras (there are not more posts in other foras.).
    Geändert von Rain_maker (28.05.09 um 12:12 Uhr) Grund: Paketangaben gelöscht, da ich es eh nicht veröffentlichen werde.

  6. #6
    Registrierter Benutzer
    Registriert seit
    May 2009
    Beiträge
    5
    Woher gibt's denn das Source-RPM "bonding-2.6.30-0.1.src.rpm"? Wurde leider nirgends fündig.
    Geändert von hannesd (28.05.09 um 09:51 Uhr)

  7. #7
    Registrierter Benutzer Avatar von Fabeltier
    Registriert seit
    Aug 2006
    Ort
    Algés
    Beiträge
    154
    Hallo,
    also was ich eigentlich meinte, vorausgesetzt Du willst Bonding support fuer Deinen Kernel, solltest Du auch in den Sourcen Deiner Kernelversion dafuer suchen.

    Dabei sehe ich jetzt zwei Moeglichkeiten, entweder Du gehts beim herausextrahieren vor wie Du es beim 2.6.29er schon gemacht hast, nur eben, dass Du einen 2.6.27 nimmst. Das sollte eig. gehen, da der Bonding driver recht unabhaengig sein sollte.

    Wegen Deinem Standarkernel, versuch mal ob Du /proc/config.gz nach home kopieren kannst, das entpacken und dann sehen ob folgendes gesetzt ist:

    Code:
    CONFIG_MODULE_UNLOAD = y
    CONFIG_MODULE_FORCE_UNLOAD = y
    #CONFIG_MODULE_VERSIONING is not set
    #CONFIG_MODULE_SRCVERSION_ALL is not set
    CONFIG_KMOD = y
    Oder, ein anderer Weg ist der wohl ueblichere, Du baust "einfach" einen Kernel und klickst den "Bonding Driver Support" unter Device Drivers -> Network device support an. Das kann das erste mal schon ein ziemliches Projekt sein, Du lernst aber einiges und eigentlich ist es heute auch nicht mehr so dramatisch.

    Die doku zum bonding driver support (mit einigen Ressources) kannst Du zB hier finden (war der link in der Doku die Du bei make menuconfig zum modul siehst - Du siehst es ist eigentlich alles da )
    http://www.mjmwired.net/kernel/Docum...ng/bonding.txt


    PS: zu dem rpm.. da steht was von 2.6.30 - wenn das einen noch nicht mal als stable freigegebenen 2.6.30er braucht, haste da mit Deinem 2.6.27er eh keinen Chancen, Dir kompiliert ja schon fuer den 29er das Modul nicht wegen fehlenden oder anders definierten Headers zu den Kernel sources der neueren Version. Da kannste das Kompilieren der Sourcen fuer einen 2.6.30er mit 2.6.27er total in den Wind schiessen, imo.
    Geändert von Fabeltier (28.05.09 um 13:30 Uhr)
    Your own personal Jesus..

  8. #8
    Registrierter Benutzer
    Registriert seit
    May 2009
    Beiträge
    5
    Vielen Dank zuerst mal für die Antwort. Meine "/proc/config.gz" ist mit Deinem Auszug identisch.
    Ich habe das Bonding mit dem 2.6.27er-Kernel bereits in Verwendung. Nun gibt es eine neue Version des Bonding-Drivers (3.5.0), welche ich gerne im bestehenden Distributions-Kernel (openSUSE 11.1) ausgetestet hätte.

    Du hast erwähnt, man kann das Bonding-Modul aus dem 2.6.29er-Kernel "herausexpandieren". Gemäss anderen Posts ist das ein nicht so einfaches Unterfangen (Header-Dateien, die geändert wurden, etc..etc..etc..). Oder habe ich da eine Möglichkeit, dies dennoch zu bewerkstelligen, ohne den kompletten 2.6.29er-Kernel neu zu übersetzen?

    Besten Dank.
    Hannes

  9. #9
    Registrierter Benutzer Avatar von Fabeltier
    Registriert seit
    Aug 2006
    Ort
    Algés
    Beiträge
    154
    Das ist genau was ich meinte.

    Es ist relativ trivial, Sources eines solchen Moduls, samt Makefile, aus einem 2.6.29er rauszukopieren und das ganze fuer einen 2.6.29er separat zu kompilieren (evtl. reicht sogar schon in das entsprechende Unterverzeichnis der Kernelsourcen zu gehen und dort make direkt aufzurufen, bzw make bonding oder sowas aehnliches).

    Wenn Du aber bei Deiner Kernelversion bleiben willst, kannst Du jedoch wahrscheinlich keine modernere Version deines bonding Treibers verwenden, insbesondere da dieser Treiber integrierter Bestandteil des Kernels ist, sind neuere Versionen sehr wahrscheinlich auch nur an neuere Versionen des Kernels gekoppelt (ich denke der Link mit der Doku sagt etwas darueber, bzw die sourceforge page, forum bzw irc link). Bau halt nen 29er und klick einfach bonding an.
    Your own personal Jesus..

  10. #10
    Registrierter Benutzer
    Registriert seit
    May 2009
    Beiträge
    5
    Alles klar. Vielen Dank für diese Antworten.

    Hannes

Ähnliche Themen

  1. Gnome startet nicht (Fedora Core 4)
    Von Stift im Forum Windowmanager
    Antworten: 8
    Letzter Beitrag: 25.06.06, 16:21
  2. Software RAID defekt?
    Von stefaan im Forum stationäre Hardware
    Antworten: 2
    Letzter Beitrag: 30.05.05, 10:17
  3. USB-Stick und 2 Partitionen??
    Von netlinker im Forum stationäre Hardware
    Antworten: 4
    Letzter Beitrag: 30.09.04, 22:38
  4. Tragebarer Mp3Player
    Von Coolzero im Forum stationäre Hardware
    Antworten: 18
    Letzter Beitrag: 14.08.04, 12:09
  5. Nach Kernel update Netzwerkprobleme
    Von NEDHELLFIRE im Forum Kompilieren von Kernel und Sourcen
    Antworten: 6
    Letzter Beitrag: 03.09.03, 22:01

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •