2012-11-29 50 views
3

我想在內核代碼的某些部分使用它之前,先使用內核鏈表進行操作。但如果我只包含list.h,由於依賴關係,它不起作用。我可以在內核代碼之外使用Linux內核鏈表嗎?

如何在single.c文件中使用列表編寫代碼test.c以便我可以通過編譯test.c來測試我的代碼?期待很快可以收到你的來信。

另外,如何使用嵌套鏈表?

回答

2

您可以從http://www.mcs.anl.gov/~kazutomo/list/list.h獲取用戶空間端口。
它說:

下面是從Linux做飯list.h爲用戶空間程序

  1. 副本list.h配方/包括/ list.h
  2. 刪除
    • #ifdef KERNE及其#endif
    • 全部#include行
    • 預取()和RCU相關功能
  3. 添加,宏offsetof()和container_of
4

它並不意味着使用用戶空間中的列表,因爲它是用於內核內部使用的,並且具有內核類型的多個依賴關係等等。您可以通過使用正確的include路徑編譯代碼看到:

gcc -I path-to-kernel-src/include/ test.c 

當test.c的包含此代碼:

#include <stdio.h> 
#include <stdlib.h> 

#include <linux/list.h> 

int main(int argc, char **argv) { } 

它無法編譯,因爲有包括list.h其中的衝突用戶空間包括(stdlib.h)。

儘管如此,像列表這樣的數據結構的依賴性非常小。你需要對它們進行排序,以便打破來自其他內核的list.h依賴關係。在一個簡短的測試中,我從list.h中刪除了包含,並添加了數據類型struct list_head/hlist_head和hlist_node。