PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ANSI C - Kernelmodul einbinden



Lord Kefir
11-12-2005, 15:42
Guten Abend!

Hat jemand eine Idee, wie ich sauber beim Start meines Programmes ein Kernelmodul laden kann? Das Problem ist folgendes: je nach Konfiguration meiner Applikation wird ein von mir erstelltes Modul benötigt - oder auch nicht. Nun möchte ich - je nach Bedingung - das meine Applikation das Modul selbst einbindet wenn die Notwendigkeit besteht.
Ein einfaches system ("modprobe ...") halte ich für ziemlich häßlich. Gibt es vielleicht irgendeine Bibliothek, mit der sich Module laden lassen?

Mfg, Lord Kefir

anda_skoa
12-12-2005, 10:22
Schadet es, wenn das Modul immer geladen ist?

Das Nachladen aus dem Programm zieht einen Haufen Probleme nach, unter anderem muß entweder das Programm als root laufen oder es muß ein Hilfsprogramm starten dessen suid Bit gesetzt ist.

Ciao,
_

Lord Kefir
12-12-2005, 14:38
Das Programm welches das Modul einbinden soll läuft als root-Prozess.

Hm... trotz google etc. hab' ich keine Bibliothek entdeckt, welche mir helfen könnte - werde wohl gezwungen sein, den Quellcode von insmod etc. zu lesen :(

Mfg, Lord Kefir

Joghurt
12-12-2005, 15:37
Hm... trotz google etc. hab' ich keine Bibliothek entdeckt, welche mir helfen könnte - werde wohl gezwungen sein, den Quellcode von insmod etc. zu lesen :(Oder einfach den system-Befehl benutzen, denn für solche Sachen ist er ja gedacht. Ansonsten muss dein Programm immer angepasst werden, wenn sich das Modulladen ändert (wie z.B. von 2.4 auf 2.6)

Mein Tipp: system("/sbin/modprobe blabla") und system("/sbin/modprobe -r blabla")

Lord Kefir
12-12-2005, 16:43
Bisher habe ich auch system() provisorisch genutzt. Finde ich irgendwie ziemlich unsexy ;)

Da mein Modul sowieso ausschließlich für 2.6er-Kernel ist (eine Portierung auf 2.4er steht nicht zur Debatte) ist es anscheinend gar nicht mal so schwer, mir die benötigten Funktionen aus den 'module-init-tools' zu "klauen". Bin jedenfalls gerade dabei.

Mfg, Lord Kefir

Takt
13-12-2005, 17:23
Zieh dir doch einfach mal den Source von modprobe ein ;)

Lord Kefir
14-12-2005, 06:34
Mache ich ja gerade... nur eigentlich wollte ich dem entgehen ;)

Mfg, Lord Kefir

Lord Kefir
15-12-2005, 15:56
Falls es mal jemanden interessieren sollte: man init_module gibt Auskunft :)

Mfg, Lord Kefir

[0x[90]|
17-12-2005, 12:46
Warum machst du das ganze nicht wie Beispielsweise die Software VMware? Diese besteht aus dem Hauptprogramm und einem Configurations-Perlscript. Dieses Script laedt/entlaedt dann die benoetigten/nicht benoetigten Module je nach bedarf.

Lord Kefir
17-12-2005, 16:38
Weil ich es schöner finde, wenn mein Programm das selbst in die Hand nimmt :)

Jedenfalls läuft es jetzt wunderbar. Und die 40 Zeilen Code die ich gebraucht habe waren jetzt wirklich kein Problem.

Mfg, Lord Kefir