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

时间:2014-06-09 01:05:07

标签: memory-management linux-kernel kernel linux-device-driver kernel-module

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

我有一个数据结构

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

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

2 个答案:

答案 0 :(得分:0)

我可以在类似的路线上建议你,但我不确定这是否是你需要的:我在PowerPC上开发了这个。

  1. 限制内核可以看到的内存(比之前少2MB),即如果原始内存为1GB,则新内存为1022MB,在bootargs的帮助下为mem = 1022M

  2. 现在在内核中通过ioremap(起始地址= 0x3FE00000,大小= 2MB)以1022MB创建此结构。

    struct data * data_kernel = ioremap(...)

  3. 使用/更新用户空间中的mmap(起始地址= 0x3FE0 0000,大小2MB)

    struct data * data_user = mmap(...)

答案 1 :(得分:0)

为什么不使用UIO驱动程序? uio驱动程序导出mmap使用的/ dev / uioX文件,以在内核空间和用户空间之间共享内存。

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