天天看點

編譯ldd3的scullc子產品出現的問題

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.

繼續閱讀