如何在内核模块中创建每个进程的变量?

时间:2018-10-15 02:55:59

标签: c linux linux-kernel

场景

我正在Linux内核中实现一个简单的IPC系统。简单来说,假设我们只有2个系统调用。并且不能更改界面

  1. SYSCALL_DEFINE1(add, int, id)
  2. SYSCALL_DEFINE1(del, int, id)

如果add有一个包含id的现有元素,那么它需要报告“已经存在” EEXIST

所以我认为它需要将添加的数据存储在某个地方。我的选择是将其作为全局值存储在我的syscall实现.c文件中。喜欢:

struct mylist {
    int id;
    struct list_head list;
};

LIST_HEAD(id_list);

SYSCALL_DEFINE1(add, int, id) {
    // kmalloc struct mylist
    // operate on `id_list` (add, check existence)
}

问题

当我编写一个用户空间程序进行测试时。

  • 我第一次进行测试没问题。
  • 第二次失败,因为它报告id already exists

记忆没有按照我的想法出现。

问题

  1. 内核空间数据id_list的生存期是多少? (只要系统启动了?)
  2. 如何使id_list的生存期等于用户空间程序?

0 个答案:

没有答案