【发布时间】:2014-07-29 12:44:02
【问题描述】:
如何在没有文件支持的用户空间和内核之间共享内存?如果 mmap 使用 MAP_ANON 完成,如何与内核空间共享?
我有一个数据结构
struct data {
int x;
char* y;
};
这个数据结构由用户进程和内核更新。如果我使用 mmap,我没有支持的文件。我该怎么做。我也不能使用 copy_from_user,因为内核和用户进程会定期更新结构。请告知
【问题讨论】:
-
如果您控制访问此类数据结构的内核代码。例如,您可以更新该代码以在 debugfs 中创建字符设备或文件,并使用该文件来支持映射的内存。另见:stackoverflow.com/questions/11501527
-
请注意,如果您想在用户空间和内核空间之间传递字符串(正如该结构中的
char * y所建议的那样),您还需要存储字符串本身(不仅是指向它)在用户空间和内核空间之间共享的内存中的某个位置。或者,依赖 copy_to_user/copy_from_user。
标签: memory-management linux-kernel kernel linux-device-driver kernel-module