编译ldd3的scullc模块出现的问题

来源:互联网 发布:厦门大学 知乎 编辑:程序博客网 时间:2024/05/16 10:08

ldd3的例子程序scullc是用kmem_cache_create等来说明lookaside caches的使用情况。由于在新的内核中,一些定义已经改变了。故该例子程序需要做一些改动。

(1)kmem_cache_t结构被换成了kmem_cache。而kmem_cache定义在<linux/slab_def.h>和<linux/slub_def.h>。但是你并不需要包含这两个文件中的一个。因为<linux/slab.h>会根据CONFIG_SLUB等来判断具体包含<linux/slab_def.h>,还是<linux/slub_def.h>。故例程中需要将

kmem_cache_t *scullc_cache;
改为:
struct kmem_cache *scullc_cache;

(2)函数kmem_cache_create的原型已经改变:
struct kmem_cache *kmem_cache_create(const char *, size_t, size_t, unsigned long, void (*)(void *));故调用它的时候应该将参数做出相应的改变。

(3)如上一篇文章提到的INIT_WORK, schedule_delayed_work等改变。如代码做出如下相应变动:

struct async_work {    struct kiocb *iocb;    int result;    struct work_struct work;};

改为:

struct async_work {    struct kiocb *iocb;    int result;    struct delayed_work delayed_work;}

在函数scull_defer_op中将:

INIT_WORK(&stuff->work, scull_do_deferred_op, stuff);schedule_delayed_work(&stuff->work, HZ/100);
改为:

INIT_DELAYED_WORK(&(stuff->delayed_work), scullc_do_deferred_op);schedule_delayed_work(&(stuff->delayed_work),HZ/100);
编译即可。当然编译中需要根据提示将CFLAGS换成EXTRA_CFLAGS.