Sie können dies mit einem dritten Kernel-Modul lösen (oder statisch kompiliert), das die Funktionen beider Module exportiert, die Stubs sein werden, bis beide Module laden - dann registriert jedes Modul seine Callbacks.
Codebeispiel
Modulintegration
static int func1(int x);
static int func2(int y);
int xxx_func1(int x)
{
if (func1)
return func1(x);
return -EPERM;
}
EXPORT_SYMBOL(xxx_func1);
int xxx_func2(int x)
{
if (func2)
return func2(x);
return -EPERM;
}
EXPORT_SYMBOL(xxx_func2);
int xxx_register_func(int id, int (*func)(int))
{
if (id == 1)
func1 = func;
else if (id ==2)
func2 = func;
return 0;
}
EXPORT_SYMBOL(xxx_register_func);
int xxx_unregister_func(int id)
{
if (id == 1)
func1 = NULL;
else if (id ==2)
func2 = NULL;
return 0;
}
EXPORT_SYMBOL(xxx_unregister_func);
Modul 1
static int module1_func1(int x)
{
...
}
static int module1_do_something(...)
{
...
xxx_func2(123);
...
}
static int module1_probe(...)
{
...
xxx_register_func(1, module1_func1);
...
}
Und das gleiche gilt für module2 ...
Natürlich Sie Mutex hinzufügen sollten schützen die Funktion Registrierung, Griffkante ca ses usw.
Danke, es ist Antwort, die ich wirklich will! –