如何在用户空间和未由文件支持的内核之间共享内存?如果使用MAP_ANON完成mmap,如何与内核空间共享?如何使用mmap在用户空间和内核之间共享内存,并且数据不受文件支持
我有一个数据结构
struct data {
int x;
char* y;
};
此数据结构由用户进程和内核更新。如果我使用mmap,我没有备份的文件。我该怎么做。此外,我不能使用copy_from_user,因为内核和用户进程会定期更新结构。请让我知道
如何在用户空间和未由文件支持的内核之间共享内存?如果使用MAP_ANON完成mmap,如何与内核空间共享?如何使用mmap在用户空间和内核之间共享内存,并且数据不受文件支持
我有一个数据结构
struct data {
int x;
char* y;
};
此数据结构由用户进程和内核更新。如果我使用mmap,我没有备份的文件。我该怎么做。此外,我不能使用copy_from_user,因为内核和用户进程会定期更新结构。请让我知道
我可以在类似的行上建议你一些东西,但我不确定这是否是你需要的东西:我已经在PowerPC上开发了它。
限制你的内存的内核可以看到(比如2MB低于更早)也就是说,如果原来的内存是1GB,新的内存是1022MB,与MEM的帮助= 1022M在bootargs
现在创建这个在内核中由ioremap(起始地址= 0x3FE00000,size = 2MB)在1022MB的结构。
结构数据* data_kernel = ioremap的(...)
使用/更新由用户MMAP空间中相同(开始地址= 0x3FE0 0000,大小2MB)
结构数据* data_user = MMAP (...)
如果您控制访问此类数据结构的内核代码。例如,您可以更新该代码以在debugfs中创建字符设备或文件,并使用该文件备份映射的内存。另请参阅:http://stackoverflow.com/questions/11501527/ – Eugene
请注意,如果您想在用户空间和内核空间之间传递字符串(如该结构中的“char * y”所示),则还需要将字符串本身(不仅是指向它的指针)存储在用户空间和内核空间之间共享的内存中。或者,依赖于copy_to_user/copy_from_user。 – Eugene
[如何将Linux内核缓冲区映射到用户空间?](https://stackoverflow.com/questions/10760479/how-to-mmap-a-linux-kernel-buffer-to-user-space) –