模块API之find_module

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;
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值