mmap设备操作 墨蓝 2022-08-14 02:51 129阅读 0赞 mmap设备操作 映射一个设备是指把用户空间的一段地 址关联到设备内存上。当程序读写这段 用户空间的地址时,它实际上是在访问 设备。 mmap设备方法需要完成什么功能? mmap方法是file\_oprations结构的成员,在mmap 系统调用发出时被调用。在此之前,内核已经完成 了很多工作。mmap设备方法所需要做的就是建立 虚拟地址到物理地址的页表。 int (\*mmap) (struct file \*, struct vm\_area\_struct \*) mmap如何完成页表的建立? 方法有二: 1、使用remap\_pfn\_range一次建立所有页表; 2、使用nopage VMA方法每次建立一个页表。 构造页表的工作可由remap\_pfn\_range函数 完成,原型如下: int remap\_pfn\_range(struct vm\_area\_struct \*vma, unsigned long addr,unsigned long pfn, unsigned long size, pgprot\_t prot) vma: 虚拟内存区域指针 virt\_addr: 虚拟地址的起始值 pfn: 要映射的物理地址所在的物理页帧号,可将物理地址 >>PAGE\_SHIFT得到。 size: 要映射的区域的大小。 prot: VMA的保护属性。 int memdev\_mmap(struct file\*filp, struct vm\_area\_struct \*vma) \{ Vma->vm\_flags |= VM\_IO; Vma->vm\_flags |= VM\_RESERVED; if (remap\_pfn\_range(vma, vma->vm\_start, virt\_to\_phys(dev- >data)>> PAGE\_SHIFT, size, vma->vm\_page\_prot)) return -EAGAIN; return 0; \} mmap设备方法实现 1. 实现字符驱动程序的mmap设备方法 2.实现测试应用程序 (在mini2440平台完成上述实验)
还没有评论,来说两句吧...