C 如何遍历kmem_缓存?

C 如何遍历kmem_缓存?,c,linux,kernel,C,Linux,Kernel,我正在尝试做一件看起来非常简单的事情,遍历kmalloc_缓存中的kmem_缓存对象来打印它们的名称。这总是以内核恐慌告终。我的C是非常生锈的,所以如果我误解了什么,我将感谢任何启发。我添加了以下功能: void *print_cachenames(void) { struct kmem_cache *k; k = kmalloc_caches[0]; printk(KERN_INFO "680: k[0] name: %s\n", k->name); } 至毫米/竹节c

我正在尝试做一件看起来非常简单的事情,遍历kmalloc_缓存中的kmem_缓存对象来打印它们的名称。这总是以内核恐慌告终。我的C是非常生锈的,所以如果我误解了什么,我将感谢任何启发。我添加了以下功能:

void *print_cachenames(void) {
    struct kmem_cache *k;
k = kmalloc_caches[0];
    printk(KERN_INFO "680: k[0] name: %s\n", k->name);
}

至毫米/竹节c。它所做的只是尝试打印数组中第一个kmem_缓存对象的名称。是什么导致它爆炸的?

您的函数被声明为返回一个void*,并且它根本无法返回任何内容。我不确定您的函数是从哪里调用的,但很可能它应该返回一些东西…

kmalloc\u缓存[0]似乎未使用。通常,在尝试使用之前,应检查从缓存读取的指针是否为空:

void print_cachenames(void) {
        struct kmem_cache *k = kmalloc_caches[0];

        if (k && k->name)
                printk(KERN_INFO "680: k[0] name: %s\n", k->name);
        else 
                printk(KERN_INFO "680: k[0] == %p, has no name\n");
}

但愿我知道这个问题的答案,听起来是个有趣的问题。。。