亲爱的粉丝朋友们大家好,为了更好的服务大家,提升分析问题和解决问题的能力,先针对Linux内核里面的API函数进行详细分析,并利用案例进行说明,加强对内核API函数的认识。
第一:函数原型
//头文件包含
#include <linux/module.h>
//函数原型
struct module *find_module(const char * name);
//函数功能
函数find_module()用来获得一个指向模块的指针。根据给定模块名字查找模块
如果找到一个给定的模块名字相匹配模块,则返回模块的指针。(注意:模块的名字
是唯一不允许有重名的模块,因此基于模块名查找模块是可行的)。
//输入参数
name :为字符串常量,表示所要查找的模块的名字
//返回参数
返回值是一个struct module 类型的指针,如果find_module()函数查找模块成功
则返回值指向查找到的name模块,如果查找不成功,则返回NULL。
第二:函数实现案例
//函数实现案例
#include <linux/module.h>
#include <linux/init.h>
//模块加载函数实现
static int __init find_module_init(void)
{
//定义待查找的模块名称为"hello"
const char *name = "hello";
//调用查找模块函数
struct module *fmodule = find_module(name);
//如果查找成功,则输出该模块的信息
if(fmodule != NULL)
{
//输出模块名
printk("fmodule->name:%s\n",fmodule->name);
//输出模块的状态
printk("fmodule->state:%d\n",fmodule->state);
//输出模块引用计数次数
printk("refs of %s is %d \n",fmodule->name,module_refcount(fmodule));
}
//定义待查找的模块名称为"hello1"
name = "hello1";
//调用查找模块函数
fmodule = find_module(name);
//如果查找成功,则输出该模块的信息
if(fmodule != NULL)
{
//输出模块名
printk("fmodule->name:%s\n",fmodule->name);
//输出模块的状态
printk("fmodule->state:%d\n",fmodule->state);
//输出模块引用计数次数
printk("refs of %s is %d \n",fmodule->name,module_refcount(fmodule));
}
//返回值
return 0;
}
//模块的退出函数
static void __exit find_module_exit(void)
{
printk("module exit ok!\n");
}
//模块加载函数,退出函数
module_init(find_module_init);
module_exit(find_module_exit);
MODULE_LICENSE("GPL");
第三:案例现象分析
总结:如果内核里面加载的模块很多,可以使用该API函数,快速定位模块的被调用情况。遇到任何问题可以联系博主,或关注公众号。