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

时间:2012-11-29 07:05:40

标签: linux list kernel

在内核代码的某些部分使用之前,我想使用内核链表。但是,如果我只包含list.h,则由于依赖性而无效。

如何使用single.c文件中的列表编写代码,例如test.c,以便我可以通过编译test.c来测试我的代码?期待很快收到您的回复。

另外,我如何使用嵌套链表?

2 个答案:

答案 0 :(得分:4)

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

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这样的数据结构的依赖性非常小。您需要对它们进行排序,以便从其他内核中分解list.h依赖项。在一个简短的测试中,我从list.h中删除了包含,并添加了数据类型struct list_head / hlist_head和hlist_node。

答案 1 :(得分:3)

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

  

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

     
      
  1. 从linux / include / list.h复制list.h
  2.   
  3. 除去      
        
    • #ifdef KERNE 及其#endif
    •   
    • 所有#include行
    •   
    • prefetch()和rcu相关函数
    •   
  4.   
  5. 添加宏offsetof()和container_of
  6.