在内核代码的某些部分使用它之前,我想玩内核链表。 但是,如果我只包含list.h
,由于依赖性,它不起作用。
我怎样才能在一个single.c
文件,如test.c中使用列表编写代码,以便我可以通过编译test.c
来testing我的代码? 期待很快可以收到你的来信。
另外,我怎样才能使用嵌套链表?
您可以从http://www.mcs.anl.gov/~kazutomo/list/list.h获得用户空间端口。
它说:
这是一个烹饪用户空间程序list.h的配方
- 从linux / include / list.h复制list.h
- 去掉
- #ifdef KERNE和#endif
- 所有#include行
- 预取()和rcu相关的功能
- 添加宏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。