在进行内存映射mmap的驱动编译中遇到错误error: ‘VM_RESERVED’ undeclared (first use in this function)

在对编写内核驱动相对某个设备文件的物理地址空间用mmap映射到用户空间的进程地址空间中去,但是在编译的过程中遇到这样的问题:
error: ‘VM_RESERVED’ undeclared (first use in this function); did you mean ‘VM_NORESERVE’?
     
原因是在这句代码中:
 

vma->vm_flags |= VM_RESERVED

出现错误,这句代码的作用是标志该内存区不能被换出,在设备驱动中虚拟页和物理页的关系应该是长期的,应该保留起来,不能随便被别的虚拟页换出,保证映射到虚拟内存空间(vma)中去,经过排查得知从linux 3.7.0开始内核不再支持struct vm_area_struct结构体中flag标志使用值 VM_RESERVED;而是需要在类似的驱动开发中需要将VM_RESERVED改成(VM_DONTEXPAND | VM_DONTDUMP);于是把语句改成如下语句: 

vma->vm_flags |= (VM_DONTEXPAND | VM_DONTDUMP)
 

再编译就顺利成功了!!! 

发布了56 篇原创文章 · 获赞 37 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_42096901/article/details/103228714
今日推荐