在linux内核系统调用中,我想以与从用户模式调用mmap
类似的方式映射内存区域。如果我想映射当前流程的区域,我可以简单地使用do_mmap_pgoff
。相反,我想在内核模式下运行时在不同的进程中映射该区域。 do_mmap_pgoff
假设/知道它是当前进程的映射,并且不允许其他任何内容。
我打算做的是复制do_mmap_pgoff以获取额外的参数,指定我要映射的任何进程的task_struct和mm_struct。但是,这是非常不受欢迎的,因为我必须手动遍历内核源代码中的许多函数,并且基本上复制这些函数,以便它们不再假设它们代表current
正在工作。
在内核模式下运行时,是否有更好的方法在current
以外的进程中映射内存?
答案 0 :(得分:1)
毫不奇怪,内核源代码中的这些函数假设它们改变了当前进程的映射,并且在Linux存在的20年中它没有发生变化。流程没有改变其他进程的内存映射的原因。
非常“非UNIXy”。
如果你详细说明你想要完成什么,那么也许人们可以建议更多的UNIX-y方式。
无论如何,要专注于手头的问题,如果你不想对mm / *代码进行大量修改,那么我建议你实施一个解决方法:
/sys
或/proc
文件。或者,以非模块化的方式:修改频繁调用的系统调用或其他代码路径 - 例如信号处理代码。do_mmap_pgoff()
的“远程”调用的模拟,可以使用linux / wait.h中公开的机制来实现。