Ich modifiziere einen Linux-Kernel, um dem virtuellen Linux-Server (LVS) einige Funktionen hinzuzufügen.Wie können exportierte Symbole optional nur dann verwendet werden, wenn sie in einem insmodierten Linux Kernel-Modul vorhanden sind?
Ich entwickelte ein Modul (das ich net/netfilter/ipvs/ip_vs_utils.c
nannte) mit einigen Funktionen, die beim Lastenausgleich verwendet werden. Alle Funktionen werden hier mit EXPORT_SYMBOL()
exportiert.
Dieses Modul ist logischerweise nicht ständig geladen. Meine Absicht ist es, dem Benutzer zu ermöglichen, zu entscheiden, ob er diese zusätzliche Funktionalität verwenden möchte oder nicht (Laden oder Entladen des Moduls).
Meine Frage ist, wie könnte ich diese Funktionen OPTIONAL (abhängig, ob das Modul läuft oder nicht) von einem vorhandenen (und natürlich geändert) Modul (net/netfilter/ipvs/ip_vs_core.c
) aufrufen. Etwas wie folgt aus:
if(ip_vs_utils_IsLoaded)
{
function1(arg1, arg2, arg3); // being function1 defined on ip_vs_utils.c
}
Antwort Lais ist ganz gut, wenn Ihr 'if (ip_vs_utils) 'Code soll die ganze Zeit im Kernel sein; Wenn sich dieser Code jedoch in einem anderen ladbaren Modul befindet, ist wahrscheinlich eine einfache Modulabhängigkeit der bessere Ansatz. Siehe 'depmod (8)' für alle Details. – sarnold