您的位置:首页 > 其它

模块API之find_module

2017-10-30 15:17 501 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: