Memory mmap()资源暂时不可用

Memory mmap()资源暂时不可用,memory,memory-management,kernel-module,mmap,Memory,Memory Management,Kernel Module,Mmap,我正在尝试实现一个内存管理内核模块。此模块使用mmap()系统调用。在实现之后,我尝试调用mmap,这给了我一个错误资源暂时不可用 我穿了线。这个解决方案在我的情况下不起作用 以下是内核实现:-不包括变量声明 kmalloc_ptr = kmalloc(size, GFP_KERNEL) static int simple_mmap(struct file *filp, struct vm_area_struct *vma) { remap = remap_pfn_range(vma, vma

我正在尝试实现一个内存管理内核模块。此模块使用
mmap()
系统调用。在实现之后,我尝试调用mmap,这给了我一个错误
资源暂时不可用
我穿了线。这个解决方案在我的情况下不起作用

以下是内核实现:-不包括变量声明

kmalloc_ptr = kmalloc(size, GFP_KERNEL)
static int simple_mmap(struct file *filp, struct vm_area_struct *vma)
{
 remap = remap_pfn_range(vma, vma->vm_start, (virt_to_phys)(kmalloc_ptr) >> 12,
                vma->vm_end - vma->vm_start,
                vma->vm_page_prot)
        return -EAGAIN;

remap
中的值为0

我发现了错误,我并没有怀疑映射有什么问题

错误是重新映射应用作

`if ((remap_pfn_range(vma, vma->vm_start, (unsigned long long)(virt_to_phys((void *)mapped_data)) >> PAGE_SHIFT, size, vma->vm_page_prot))
return -EAGAIN`;

你能提供完整的片段吗?你看,有一个打字错误(
kamlocptr
);另外,在
remap\u pfn\u range()
的末尾缺少分号,如果
语句中没有
,我的意思是,
return-EAGAIN
在任何情况下都是完成的。此外,尽管
pfn
参数的计算方法是正确的,但基于
kmalloc_ptr
计算它是非常奇怪的。为什么需要在这里分配一些内核内存?您需要在此处使用
vma->vm\u pgoff
,而不是
(virt\u to\u phys)(kamloc\u ptr)>>12
。因此,请同时显示代码的其余部分。@DaanGerlach我刚刚发现问题出在
返回EAGAIN
时没有if语句。错误现在已解决。谢谢你的帮助,不客气。此外,您最好使用
PAGE\u SHIFT
而不是幻数(
12
)。