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
)。