首页 > 解决方案 > 如何在内核模块中创建每个进程的变量?

问题描述

设想

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

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

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

所以我认为它需要将添加的数据存储在某个地方。我的选择是将它.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)
}

问题

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

记忆并没有像我想象的那样出现。

问题

  1. 内核空间数据的生命周期是id_list多少?(只要系统启动?)
  2. 我怎样才能使id_list' 的生命周期等于用户空间程序?

标签: clinuxlinux-kernel

解决方案


推荐阅读