有时我们需要在内核空间申请一块用户空间的内存来使用,这该如何实现呢?如果直接使用内核内存,不会通过下面流程调用的地址检查,我们就必须申请一块用户空间地址来应付内核检查。
根据网上资料显示,内核空间使用用户空间地址(或申请或调过内核检查)有以下三种方法
下面具体提供一种我自己验证保证可行的一种方案(因为前两种我都没有调试成功,第三种验证可行)。我是基于kernel4.4开发验证的,如果kernel存在大版本差异可能mmap的函数名称或参数存在差异。
patch如下:
-
+#include <asm/mman.h>
#ifdef CONFIG_SND_PCM_XRUN_DEBUG
#define CREATE_TRACE_POINTS
#include "pcm_trace.h"
@@ -2124,12 +2124,48 @@ static int pcm_sanity_check(struct snd_pcm_substream *substream)
return 0;
}
+
+extern unsigned long do_mmap(struct file *file, unsigned long addr,unsigned long len, unsigned long prot, unsigned long flags,vm_flags_t vm_flags