赞
踩
在实现驱动程序的mmap函数时,要注意映射地址的转换问题,见代码。
定义一个设备结构体:
这里面这个MEMSIZE,最小都要是4096,因为内存映射是以页为单位的。
在实现simple_remap_mmap函数时,代码如下
注意函数开头的vma->vm_pgoff = ((u32)virt_to_phys(leedriverp->mem)) >> PAGE_SHIFT;
leedriverp->mem是个内核虚拟地址,应该通过virt_to_phys转换成物理地址,再进行左移操作,就OK了。
之后定义一下vm_ops
并且在file_operations中添加.mmap=simple_remap_mmap,整个过程就完成了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。