首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >遍历内核模块中的所有模块

遍历内核模块中的所有模块
EN

Stack Overflow用户
提问于 2017-04-22 18:39:28
回答 2查看 694关注 0票数 1

我对内核中可用的变量感到有点困惑。我该如何迭代我自己的内核模块中的所有模块呢?我发现内核代码中使用了modules。我可以这样做吗?

代码语言:javascript
运行
复制
struct module *mod;

list_for_each_entry(mod, &modules, list) {
  printk(KERN_INFO "%s\n", mod->name);
}
EN

回答 2

Stack Overflow用户

发布于 2017-04-29 04:28:08

没有用于迭代模块列表的直接方法。

模块列表的头部是在kernel/module.c中静态定义的modules变量,因此该文件之外的代码无法访问它。

如果出于调试目的需要模块名称列表,您可以使用WARN_ON()宏或类似的:

代码语言:javascript
运行
复制
WARN_ON(0);

这将打印有关警告的消息和一些附加信息,其中将包含模块列表。

票数 0
EN

Stack Overflow用户

发布于 2017-04-24 01:10:05

找到了解决此问题的方法。

代码语言:javascript
运行
复制
struct list_head *list;
struct module *mod;
struct module *mine = find_module("YOUR_MODULE_NAME");

list_for_each(list, &mine->list){
  mod = list_entry(list, struct module, list);
  do_stuff_with_mod(mod);
}

它使用kernel/module中的find_module方法。您需要指定您的模块在GPL下获得许可,否则它将无法加载(尽管编译将会成功)。

免责声明

我不认为这种方法是最好的方法,但它足够可靠,可以处理像printk这样的简单任务

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43558217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档