2
我試圖實現內存管理內核模塊。該模塊使用mmap()
系統調用。執行後,我試圖調用mmap,這給我一個錯誤Resource temporarily unavailable
我通過this線程。解決方案在我的情況下不起作用。mmap()資源暫時不可用
這是內核實現: - 排除變量聲明。在remap
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;
值爲0
能否請您提供完整的片段?你看 - 有一個錯字('kAmlloc_ptr');在'remap_pfn_range()'末尾缺少分號,並且沒有'if'語句 - 我的意思是,'return -EAGAIN'在任何情況下都完成。 此外,儘管「pfn」參數是以正確的方式計算的,但它是基於'kmalloc_ptr'計算的奇怪。爲什麼你需要在這裏分配一些內核內存?您應該在這裏使用'vma-> vm_pgoff',而不是'(virt_to_phys)(kamlloc_ptr)>> 12'。所以,還請顯示其餘的代碼。 –
@DaanGerlach我剛纔發現問題出在沒有if語句的'return EAGAIN'上。現在錯誤已解決。感謝您的幫助。 – john
不客氣。 此外,你最好使用'PAGE_SHIFT'而不是魔術數字('12')。 –