我想在内核代码的某些部分使用它之前使用内核链表。但是,如果我只包含list.h
,由于依赖关系,它不起作用。
如何使用single.c
文件中的列表编写代码,例如 test.c,以便我可以通过编译来测试我的代码test.c
?期待很快可以收到你的来信。
另外,如何使用嵌套链表?
您可以从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
它并不意味着在用户空间中使用该列表,因为它是为内核内部使用而设计的,并且具有内核类型的多个依赖项等等。您可以通过使用正确的包含路径编译代码来看到这一点:
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。