[Erledigt] Unknown Symbol beim Laden von Kernel-Modulen

KuShi

Neuer User
Mitglied seit
12 Apr 2008
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
Hallo.

Ich versuche, zwei Kernel-Module zu laden, erhalte dabei aber immer Fehlermeldungen. Bei den Modulen handelt es sich um zwei Module (cls_fw und cls_u32), die für 'traffic control' (tc) aus iproute2 genutzt werden.

beim Laden der Module kommt folgende Meldung:
Code:
root@fritz:/var/mod/root# modprobe cls_fw
modprobe: can't load module cls_fw (kernel/net/sched/cls_fw.ko): unknown symbol in module, or unknown parameter
root@fritz:/var/mod/root# modprobe cls_u32
modprobe: can't load module cls_u32 (kernel/net/sched/cls_u32.ko): unknown symbol in module, or unknown parameter

und dmesg liefert folgendes:
Code:
root@fritz:/var/mod/root# dmesg | grep -e cls_fw -e cls_u32
[ 1124.360000] cls_fw: Unknown symbol tcf_action_exec
[ 1132.350000] cls_u32: Unknown symbol tcf_action_exec

Ich habe versucht, eine Lösung zu finden, aber dazu gab es nichts hilfreiches weder hier im Forum, noch sonst wo im Internet.
Das einzige, das ich dazu finden konnte, war, die Firmware neu zu bauen.

Ich habe daher den aktuellen Trunk komplett neu ausgecheckt und gebaut, leider ohne Erfolg.

Von welchem Modul stammt die Funktion tcf_action_exec?
 
Zuletzt bearbeitet:
Von welchem Modul stammt die Funktion tcf_action_exec?
https://www.google.de/#q=tcf_action_exec

Es wäre vermutlich zu einfach, wenn Du auch schreiben würdest, um welche Kernel Version es sich handelt.

Weiterhin erstellt Freetz gar kein cls_fw.ko, wenn Du es also geschafft hast, dieses zu erstellen, solltest Du auch in der Lage sein, herauszufinden, welche Module dafür benötigt werden.
 
Hey, danke für die schnelle Antwort!
Sry, hab den Kernel total vergessen zu erwähnen.

Ich hab eine FritzBox 7330 mit alternativem Kernel 2.6.32.60.
Ja, du hast Recht, dass ich das Modul cls_fw mühsam selbst einbinden musste.
Das meiste dazu hab ich mir aus dem Internet zusammen gesucht.
Bin leider kein Linux-Fachmann, deswegen sagen mir viele Fehlermeldungen nichts.
Ich bin aber sehr lernfreudig und suche mir den Kram auch gerne selbst zusammen, wenn man mich in die richtige Richtung weist.

Die Seite, die Du verlinkt hast, hab ich natürlich auch schon gefunden, aber leider bringt mich das (noch) nicht wirklich weiter.
Ich habe rausgefunden, dass die 'symbols' eigentlich Funktionen entsprechen, die durch den Kernel und somit auch seinen Modulen bereitgestellt werden.
Das heißt, es könnte sein, dass man bestimmte Module laden muss, damit andere funktionieren.
Normalerweise wird das doch aber durch Abhängigkeiten geregelt, die dem Kernel sagen, welche Module zuerst geladen werden müssen, bevor andere funktionieren.
Leider hat dieses Modul bei mir keine Abhängigkeiten eingetragen

Code:
root@fritz:/var/mod/root# cat /lib/modules/2.6.32.60/modules.dep | grep -e cls_fw -e cls_u32
kernel/net/sched/cls_fw.ko:
kernel/net/sched/cls_u32.ko:

Ich werde mir aber nochmal die Quellcodes auf der von Dir verlinkten Seite durchlesen, vielleicht finde ich ja jetzt etwas.
Vielen Dank nochmals.
 
Hast Du sonst noch etwas an der Kernel Konfiguration geändert?
Bei mir wird nur cls_u32 erstellt, dieses enthält aber keinen Verweis auf tcf_action_exec .

Die Liste der Abhängigkeiten auf der Box wird nur dann korrekt sein, wenn die benötigten Module auch auf der Box vorhanden sind.

Versuche es mal auf dem Host System mit modinfo source/kernel/linux/.../cls_fw.ko
 
Vielen Dank für die Antwort.
Modinfo sagt folgendes:

Code:
nils@KuShi-Ubuntu:~/Freetz/freetz-devel$ modinfo ./source/kernel/ref-ar9-7330_06.01/linux-2.6.32/net/sched/cls_fw.ko
filename:       ./source/kernel/ref-ar9-7330_06.01/linux-2.6.32/net/sched/cls_fw.ko
license:        GPL
depends:        
vermagic:       2.6.32.60 mod_unload MIPS_34K 32BIT 

nils@KuShi-Ubuntu:~/Freetz/freetz-devel$ modinfo ./source/kernel/ref-ar9-7330_06.01/linux-2.6.32/net/sched/cls_u32.ko
filename:       ./source/kernel/ref-ar9-7330_06.01/linux-2.6.32/net/sched/cls_u32.ko
license:        GPL
depends:        
vermagic:       2.6.32.60 mod_unload MIPS_34K 32BIT

Ich habe am Kernel einige Module für iproute2 und iptables eingestellt.
manuell hinzugefügt habe ich:
act_police
act_mirred
act_ipt
act_nat
act_pedit
cls_fw
cls_route
ifb
sch_hfsc
sch_ingress
ipt_REDIRECT
ipt_MASQUERADE
xt_u32

Könnte eines dieser Module dieses Fehlverhalten verursachen?
Können Module andere Anforderungen haben, wenn andere Module geladen sind?
Was verändert die Verweise innerhalb der Module?

Wie findet man heraus, welche Verweise Module haben, bzw. welche symbols sie voraussetzen, und wie kann ich herausfinden, ob mein System diese Voraussetzungen erfüllt, ohne jedes mal neustarten zu müssen?
 
Zuletzt bearbeitet:
Bei modinfo steht beide male nichts hinter depends, daher sollte keine weiteren Module benötigt werden. Es kann aber sein, dass die benötigten Symbole im Kernel enthalten sind. In diesem Fall muss entweder der Kernel ausgetauscht werden oder die entsprechende Komponente als Modul erstellt werden und nicht fest im Kernel integriert.
 
okay, danke.
Wie kann ich herausfinden, welches Modul, bzw. Kernel-Einstellung, diese Symbole bereitstellen?
In diesem Fall das Symbol 'tcf_action_exec'?
 
Es kann aber sein, dass die benötigten Symbole im Kernel enthalten sind. In diesem Fall muss der Kernel ausgetauscht werden
@KuShi: Das Dir fehlende Symbol ist in act_api.c zu finden, diese wird wiederum nur dann übersetzt, wenn die kernel-menuconfig-Option NET_CLS_ACT aktiviert ist. Bei dieser handelt es sich um keine TriState option, daher kann diese nur fest in den Kernel einkompiliert werden. In der AVM kernel .config ist diese nicht aktiviert, daher wie Ralf schon gesagt hat (s. Zitat oben) musst Du den AVM Kernel austauschen - die Module dazu zu nehmen, den AVM Kernel aber behalten, funktioniert in Deinem Fall nicht.

p.s. Kannst gleich berichten, ob das Austauschen des AVM Kernels auf der 7330-06.0x funktioniert - wir haben es bisher nicht testen können. Mach' daher eine Sicherung davor und lade Dir das Recovery-Image herunter - kann sein, dass Du Deine Box wirst recovern müssen.
 
Was meint ihr damit, den Kernel auszutauschen?
Ist das etwas anderes als die 'replace kernel'-Option?
Ich nutze den 'replace Kernel' schon seit einiger Zeit problemlos und habe schon einiges daran rumgebastelt.
Wenn ihr etwas bestimmtes getestet haben wollt, kann ich das gerne machen...

Die Option NET_CLS_ACT habe ich in meinem 'replace kernel' schon aktiviert und die act_api.c wird auch zu einer act_api.o übersetzt. Die Fehlermeldung bleibt aber weiterhin bestehen.
Muss ich noch mehr machen, um die act_api.o in den Kernel zu integrieren?
 
Hmm, wir meinen schon die "Replace kernel"-Option. Ich habe bisher angenommen, dass Du versuchst, den AVM-Kernel mit ein paar zusätzlichen von freetz übersetzten Modulen zu verwenden, denn, wenn alles richtig läuft, muss dieses Symbol im Kernel enthalten sein.

Wie genau bist Du vorgeganen als Du die kernel-menuconfig-Optionen umgestellt hast? Hast Du danach den Kernel komplett neu gebaut oder hast Du Dich drauf verlassen, dass das Kernel-Build-System schon alle Abhängigkeiten richtig berücksichtigen wird und alles richtig inkrementell bauen wird? Ist das Symbol in kernel/kernel-ar9-7330_06.01.bin enthalten? Sichere mal Deine getweakte kernel .config, rufe make kernel-dirclean auf und baue anschließend neu. Ist das Symbol danach in kernel/kernel-ar9-7330_06.01.bin enthalten?
 
Wie kann ich überprüfen, ob das Symbol in der kernel/kernel-ar9-7330_06.01.bin enthalten ist?
Ich habe nichts besonderes beachtet beim Kernel-Bau.
Ich habe die Optionen ausgewählt, den build mit kernel-clean von alten Einstellungen gesäubert und danach neu gebaut.
Ich versuche mal ein kernel-dirclean und berichte danach.

--- edit ---

Nein, leider hat ein kernel-dirclean auch nichts bewirkt.
Der Fehler ist noch immer da.
 
Zuletzt bearbeitet:
Code:
nils@KuShi-Ubuntu:~/Freetz/freetz-devel$ nm -o source/kernel/*/linux-2.6.32/vmlinux | grep tcf_action_exec
source/kernel/ref-ar9-7330_06.01/linux-2.6.32/vmlinux:8043c364 r __kstrtab_tcf_action_exec
source/kernel/ref-ar9-7330_06.01/linux-2.6.32/vmlinux:80429de8 r __ksymtab_tcf_action_exec
source/kernel/ref-ar9-7330_06.01/linux-2.6.32/vmlinux:802c6550 T tcf_action_exec

Das bedeutet doch, dass das Symbol vorhanden sein sollte, oder?
Die Fehlermeldung kommt aber trotzdem :(
 
Das scheint das Problem zu sein.
Ich glaube, es war nicht der richtige Kernel geladen, weil ich USB-Root nutze.
Es ist mir nicht aufgefallen, weil die Kernel-Module immer gefunden wurden.
Wenn ich die Images richtig auf die Box flashe, scheint es auch ein paar Probleme mit dem replace kernel zu geben, denn ich hatte jetzt schon zwei Mal boot loops und musste recovern.
Ich werde da noch ein bisschen ausprobieren und melde mich wieder, wenn ich mehr Infos habe.

Vielen Dank für Eure Hilfe!

--- edit ---
So, ich habe es nun dank Eurer Hilfe hinbekommen.
Ich habe den aktuellen Trunk neu geladen und ein Image erstellt, bei dem von den Grundeinstellungen nichts verändert wurde außer die 'replace kernel'-Option mitsamt NET_CLS_ACT.
Dieses Image habe ich auf die Box gespielt und das eigentliche Image, das ich nutzen möchte, lade ich mittels USB root dynamisch beim boot rein.
Jetzt werden alle Module richtig geladen und das traffic shaping funktioniert.

Vielen Dank nochmals!
 
Zuletzt bearbeitet:

Neueste Beiträge

Statistik des Forums

Themen
244,695
Beiträge
2,216,687
Mitglieder
371,314
Neuestes Mitglied
Gjorstn
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.