Modyfikuję jądro Linuxa, aby dodać trochę funkcjonalności do Linux Virtual Server (LVS).Jak używać eksportowanych symboli opcjonalnie tylko wtedy, gdy są one obecne w niewytworzonym module jądra systemu Linux?
Opracowałem moduł (który nazwałem net/netfilter/ipvs/ip_vs_utils.c
) z kilkoma funkcjami używanymi podczas równoważenia obciążenia. Wszystkie funkcje tutaj są eksportowane za pomocą EXPORT_SYMBOL()
.
Ten moduł logicznie nie jest ładowany przez cały czas. Moją intencją jest pozwolić użytkownikowi zdecydować, czy chce skorzystać z tej dodatkowej funkcjonalności, czy nie (załadowanie lub wyładowanie modułu).
Moje pytanie brzmi: w jaki sposób mogę wywołać te funkcje OPCJONALNIE (w zależności od tego, czy moduł działa) z istniejącego (i oczywiście zmodyfikowanego) modułu (net/netfilter/ipvs/ip_vs_core.c
). Coś takiego:
if(ip_vs_utils_IsLoaded)
{
function1(arg1, arg2, arg3); // being function1 defined on ip_vs_utils.c
}
odpowiedź Lai jest dość dobry, jeśli plik 'if (ip_vs_utils) 'kod ma być cały czas w kernelu; ale jeśli ten kod znajduje się w innym ładowalnym module, prawdopodobnie lepszym rozwiązaniem jest prawdopodobnie zależność od modułu. Zobacz 'depmod (8)', aby uzyskać szczegółowe informacje. – sarnold