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