在内核代码的某些部分使用之前,我想使用内核链表。但是,如果我只包含list.h
,则由于依赖性而无效。
如何使用single.c
文件中的列表编写代码,例如test.c,以便我可以通过编译test.c
来测试我的代码?期待很快收到您的回复。
另外,我如何使用嵌套链表?
答案 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用于用户空间程序的方法
- 从linux / include / list.h复制list.h
- 除去
- #ifdef KERNE 及其#endif
- 所有#include行
- prefetch()和rcu相关函数
- 添加宏offsetof()和container_of
醇>