我可以在内核代码之外使用Linux内核链表吗?

内核代码的某些部分使用它之前,我想玩内核链表。 但是,如果我只包含list.h ,由于依赖性,它不起作用。

我怎样才能在一个single.c文件,如test.c中使用列表编写代码,以便我可以通过编译test.c来testing我的代码? 期待很快可以收到你的来信。

另外,我怎样才能使用嵌套链表?

Solutions Collecting From Web of "我可以在内核代码之外使用Linux内核链表吗?"

您可以从http://www.mcs.anl.gov/~kazutomo/list/list.h获得用户空间端口。
它说:

这是一个烹饪用户空间程序list.h的配方

  1. 从linux / include / list.h复制list.h
  2. 去掉
    • #ifdef KERNE和#endif
    • 所有#include行
    • 预取()和rcu相关的功能
  3. 添加宏offsetof()和container_of

这并不意味着使用用户空间中的列表,因为它是在内核内部使用的,并且具有内核类型等的一些依赖关系。 你可以通过用正确的包含路径编译你的代码来看到这个:

 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依赖关系。 在一个简短的测试中,我删除了include和list.h,并添加了数据类型struct list_head / hlist_head和hlist_node。