如何使用linux内核的find_module()
函数?
文档说“必须持有module_mutex”。
上下文
我正在调试一组协同工作的内核模块。
模块A模块B的调用功能。在模块A的功能C中的某一点,模块B的使用计数无效。我determined这不是模块B的功能。我想从C调试模块B的使用次数。为此,我将使用find_module()来获取指向B.
答案 0 :(得分:1)
我建议你的代码更加防守:
#include <linux/module.h>
#include <linux/capability.h>
int do_my_work(void)
{
struct module *mod;
char name[MODULE_NAME_LEN];
int ret, forced = 0;
if (!capable(CAP_SYS_MODULE) || modules_disabled)
return -EPERM;
/* Set up the name, yada yada */
name[MODULE_NAME_LEN - 1] = '\0';
/* Unless you absolutely need an uninterruptible wait, do this. */
if (mutex_lock_interruptible(&module_mutex) != 0) {
ret = -EINTR;
goto out_stop;
}
mod = find_module(name);
if (!mod) {
ret = -ENOENT;
goto out;
}
if (!list_empty(&mod->modules_which_use_me)) {
/* Debug it. */
}
out:
mutex_unlock(&module_mutex);
out_stop:
return(ret);
}
module_mutex 由内核在模块上的各种操作中获取。所有这些都在 /kernel/module.c 中,并且是:
答案 1 :(得分:0)