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.