Linux kernel 内核中的modinfo()等价物?

Linux kernel 内核中的modinfo()等价物?,linux-kernel,linux-device-driver,kernel-module,Linux Kernel,Linux Device Driver,Kernel Module,我有两个模块A,B。A有一个全局可访问的函数f(),即导出f()符号。B可能偶尔需要调用f()。但是B应该只在模块A加载时调用f()。B判断A是否已加载的最佳方法是什么 这个问题的b部分是有一种方法可以检查f()是否被导出 我不确定哪种方法更有效 如果B使用A的至少一个符号,则在加载B时,提供所需符号的模块(换句话说,类似A的模块)也已加载 这个问题的b部分是有一种方法可以检查f()是否被导出 如果符号不可用,您将无法加载请求它的模块(B)。我假设您先加载模块B,然后再加载模块A(可选)。我的策

我有两个模块A,B。A有一个全局可访问的函数f(),即导出f()符号。B可能偶尔需要调用f()。但是B应该只在模块A加载时调用f()。B判断A是否已加载的最佳方法是什么

这个问题的b部分是有一种方法可以检查f()是否被导出


我不确定哪种方法更有效

如果B使用A的至少一个符号,则在加载B时,提供所需符号的模块(换句话说,类似A的模块)也已加载

这个问题的b部分是有一种方法可以检查f()是否被导出


如果符号不可用,您将无法加载请求它的模块(B)。

我假设您先加载模块B,然后再加载模块A(可选)。我的策略是在A首次初始化时向B注册一组函数。B保留一个静态分配的函数指针(或指向充满函数指针的结构的指针),并提供导出函数来注册和注销处理程序。加载时,A向B注册其函数(或函数结构)。卸载时,A注销其函数

可能是这样的:

B.h

不列颠哥伦比亚省

交流


好的,我想让B始终加载,并且仍然能够任意加载/卸载A。这个问题的意思是,在调用f()之前,让B中的代码检查A是否已加载。好的,这听起来很容易用bash depmod和friends在userlevel中解决。谢谢谢谢这正是我要找的,而且比查看已加载模块的列表要高效得多。@ajpyles:如果这回答了您的问题,请将其标记为“已接受”
typedef int (*foo_t)(int);
int B_register_foo(foo_t);
int B_unregister_foo(foo_t);
static foo_t foo = NULL;

int B_register_foo(foo_t f) {
    if (!foo) {
        foo = f;
        return 0;
    }
    return -EFOO;
}

void B_unregister_foo(foo_t f) {
    if (foo == f)
        foo = NULL;
}

EXPORT_SYMBOL(B_register_foo);
EXPORT_SYMBOL(B_unregister_foo);

void B_maybe_call_foo(int arg) {
    return (foo) ? foo(arg) : 0;
}
static int A_foo(int arg);

static int __init init_A(void) {
    if (B_register_foo(A_foo))
        return -EFOO;
    return 0;
}

static void __exit exit_A(void) {
    B_unregister_foo(A_foo);
}