我在寻找一些合适的例子来解决我的问题时遇到了一些困难。我想在用户和内核空间之间共享 4K (4096) 字节的数据。我发现很多想法说我必须从内核分配内存并将其映射到用户空间。有人可以提供一个关于如何在 Linux 2.6.38 中执行此操作的示例吗?有没有什么好的文档可以解释一下?
提前致谢。
您提出的方法是一种方法,但由于用户空间不在您的控制范围内(意味着任何用户空间程序都有可能侵入内核),因此您为来自用户空间的恶意攻击提供了机会。这里还描述了这种基于内核的内存与用户空间共享:
https://web.archive.org/web/20130217131239/http://www.scs.ch/~frey/linux/memorymap.html
相反,如何在用户空间分配内存,然后从内核使用 API copy_from_user() 和 copy_to_user() 复制到/从用户空间内存?如果你想在不同的进程之间共享内存,那么你总是可以使用 IPC 相关的 API 来分配和定义内存,例如 shmget() 等。在这种情况下,内核源代码本身中有很多示例代码。
例如。
fs/checksum.c: 缺失 = __copy_from_user(dst, src, len);