模块API之find_module

来源:互联网 发布:如何编写小软件 编辑:程序博客网 时间:2024/05/29 08:14
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.cstruct module *find_module(const char *name){module_assert_mutex();return find_module_all(name, strlen(name), false);}EXPORT_SYMBOL_GPL(find_module);继续看find_module_allstatic 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;}

原创粉丝点击