列出内核模块

时间:2017-04-28 16:56:54

标签: linux module linux-kernel

我编写了内核模块,列出了系统中加载的所有模块。但是什么时候是模块的结束列表,循环正在工作。我尝试了一切来阻止这个循环,但最后我无法做到这一点。我添加了写入模块名称的函数printk(当尝试写入不存在的名称模块时,它使内核oops)。谁能帮我?我需要模块列表继续编写这个模块。来源:

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/list.h>

struct list_head modules_list;
struct list_head *m;
struct module *ops_mod;
int agh = 0;
char *x = (char) 0;

void list_module(void)
{
  modules_list = THIS_MODULE->list;
  for(m = (&modules_list)->next; m != (&modules_list); m = m->next) {
    printk(KERN_INFO "List iteration %d", agh);
    ops_mod = list_entry(m, struct module, list);
    if ((m)->next == NULL) {
      printk(KERN_WARNING "MISC list: NULL pointer");
      return;
    }
    printk(KERN_INFO "after iteration %d", agh);
    printk(KERN_INFO "print name %d", agh);
    agh++;
    if (&ops_mod->mkobj.kobj.name == NULL)
      return;
    else {
        printk("Adress: %d", ops_mod);
        printk("MISC: ok %s", ops_mod->mkobj.kobj.name);
      }
    //ops_mod = NULL;
  }
}

int init_module(void)
{
  list_module();
  return 0;
}

void cleanup_module(void){}
MODULE_LICENSE("GPL");

1 个答案:

答案 0 :(得分:0)

通常你会持有module_mutex,并使用列表助手,如下所示:

struct module *mod;
mutex_lock(&module_mutex);
list_for_each_entry(mod, &THIS_MODULE->list, list)
    printk(KERN_INFO "%s", mod->name);
mutex_unlock(&module_mutex);

但是你是在init_module内执行此操作,所以我认为问题可能是您的模块尚未设置。

相关问题