Memory management 如何使用mmap在用户空间和内核之间共享内存,并且数据不受文件支持

Memory management 如何使用mmap在用户空间和内核之间共享内存,并且数据不受文件支持,memory-management,linux-kernel,kernel,linux-device-driver,kernel-module,Memory Management,Linux Kernel,Kernel,Linux Device Driver,Kernel Module,如何在没有文件支持的用户空间和内核之间共享内存?如果mmap是使用MAP_ANON完成的,那么如何与内核空间共享它 我有一个数据结构 struct data { int x; char* y; }; 此数据结构由用户进程和内核更新。如果我使用mmap,我没有备份的文件。我该怎么做呢。此外,我不能使用copy_from_user,因为内核和用户进程会定期更新结构。请让我知道我可以向您推荐类似的产品,但我不确定这是否是您所需要的:我已经在PowerPC上开发了此产品 限制内核可以看到的内存(比如说

如何在没有文件支持的用户空间和内核之间共享内存?如果mmap是使用MAP_ANON完成的,那么如何与内核空间共享它

我有一个数据结构

struct data {
int x;
char* y;
};

此数据结构由用户进程和内核更新。如果我使用mmap,我没有备份的文件。我该怎么做呢。此外,我不能使用copy_from_user,因为内核和用户进程会定期更新结构。请让我知道

我可以向您推荐类似的产品,但我不确定这是否是您所需要的:我已经在PowerPC上开发了此产品

  • 限制内核可以看到的内存(比如说比以前少2MB),也就是说,如果原始内存是1GB,新内存是1022MB,在引导参数中的mem=1022M的帮助下

  • 现在通过内核中的ioremap(起始地址=0x3FE00000,大小=2MB)在1022MB处创建这个结构

    结构数据*data_内核=ioremap(…)

  • 通过mmap在用户空间中使用/更新相同内容(起始地址=0x3FE0 0000,大小2MB)

    结构数据*数据用户=mmap(…)

  • 为什么不用司机呢? uio驱动程序导出mmap用于在内核空间和用户空间之间共享内存的/dev/uioX文件


    uio的主要目标是与用户应用程序共享物理内存,快速开发用户空间驱动程序。但是,如果您使用uio_mem_逻辑配置uio_mem_结构,您也可以与它共享内核分配的内存。

    如果您控制访问此类数据结构的内核代码。例如,您可以更新该代码以在debugfs中创建字符设备或文件,并使用该文件来备份mmapped内存。另请参见:请注意,如果要在用户空间和内核空间之间传递字符串(如该结构中的
    char*y
    ),还需要将字符串本身(不仅仅是指向它的指针)存储在用户空间和内核空间共享的内存中的某个位置。或者,依赖于复制到用户/从用户复制。可能重复