3

如何在用户空间和未由文件支持的内核之间共享内存?如果使用MAP_ANON完成mmap,如何与内核空间共享?如何使用mmap在用户空间和内核之间共享内存,并且数据不受文件支持

我有一个数据结构

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

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

+0

如果您控制访问此类数据结构的内核代码。例如,您可以更新该代码以在debugfs中创建字符设备或文件,并使用该文件备份映射的内存。另请参阅:http://stackoverflow.com/questions/11501527/ – Eugene

+0

请注意,如果您想在用户空间和内核空间之间传递字符串(如该结构中的“char * y”所示),则还需要将字符串本身(不仅是指向它的指针)存储在用户空间和内核空间之间共享的内存中。或者,依赖于copy_to_user/copy_from_user。 – Eugene

+1

[如何将Linux内核缓冲区映射到用户空间?](https://stackoverflow.com/questions/10760479/how-to-mmap-a-linux-kernel-buffer-to-user-space) –

回答

0

我可以在类似的行上建议你一些东西,但我不确定这是否是你需要的东西:我已经在PowerPC上开发了它。

  1. 限制你的内存的内核可以看到(比如2MB低于更早)也就是说,如果原来的内存是1GB,新的内存是1022MB,与MEM的帮助= 1022M在bootargs

  2. 现在创建这个在内核中由ioremap(起始地址= 0x3FE00000,size = 2MB)在1022MB的结构。

    结构数据* data_kernel = ioremap的(...)

  3. 使用/更新由用户MMAP空间中相同(开始地址= 0x3FE0 0000,大小2MB)

    结构数据* data_user = MMAP (...)

0

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

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

相关问题