5

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

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

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

4

2 回答 2

6

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

这是为用户空间程序烹制 list.h 的食谱

  1. 从 linux/include/list.h 复制 list.h
  2. 消除
    • #ifdef KERNE及其#endif
    • 所有 #include 行
    • prefetch() 和 rcu 相关函数
  3. 添加宏 offsetof() 和 container_of
于 2012-11-30T12:26:49.657 回答
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.h 与其他内核的依赖关系。在一个简短的测试中,我从 list.h 中删除了包含,并添加了数据类型 struct list_head/hlist_head 和 hlist_node。

于 2012-11-29T10:05:55.480 回答