find_module 函数根据模块的name返回指向这个模块的指针
其用法如下:
if (mutex_lock_interruptible(&module_mutex) != 0)
return -EINTR;
mod = find_module(name);
if (!mod) {
ret = -ENOENT;
goto out;
}
mutex_unlock(&module_mutex);
其使用时一般用module_mutex 这个mutex包起来
find_module的源码在linux/kernel/module.c
struct module *find_module(const char *name)
{
module_assert_mutex();
return find_module_all(name, strlen(name), false);
}
EXPORT_SYMBOL_GPL(find_module);
继续看find_module_all
static struct module *find_module_all(const char *name, size_t len,
bool even_unformed)
{
struct module *mod;
module_assert_mutex_or_preempt();
//可见循环查找modules 这个list,这里的even_unformed 为false,如果这个模块还处于MODULE_STATE_UNFORMED
//的话,则模块还没有加载好,就文卫没有找到
list_for_each_entry_rcu(mod, &modules, list) {
if (!even_unformed && mod->state == MODULE_STATE_UNFORMED)
continue;
//找到模块的标准是模块的name的size和内容完全相等
if (strlen(mod->name) == len && !memcmp(mod->name, name, len))
return mod;
}
return NULL;
}
模块API之find_module
最新推荐文章于 2025-02-26 17:50:46 发布