コード例 #1
0
ファイル: mmap.c プロジェクト: bysun2013/Android-Driver
static int demo_mmap(struct file* filp, struct vm_area_struct *vma){
	unsigned long physics = virt_to_phys((void*) (unsigned long)buffer);
	unsigned long mypfn = physics >>PAGE_SHIFT;
	unsigned long vmsize = vma->vm_end - vma->vm_start;

	printk("mmap called.\n");

	if(vmsize >BUFFER_SIZE)
		return -EINVAL;
	vma->vm_ops = &remap_vm_ops;
	vma->vm_flags |= VM_RESERVED;
	demo_vma_open(vma);

	if(remap_pfn_range(vma, vma->vm_start, mypfn, vmsize, vma->vm_page_prot));
		return -EAGAIN;

	return 0;
}
コード例 #2
0
static int demo_mmap(struct file *filp,struct vm_area_struct *vma)
{
  unsigned long physics=virt_to_phys((void*)(unsigned long)buffer);
  unsigned long mypfn=physics>>PAGE_SHIFT;
  unsigned long vmsize=vma->vm_end-vma->vm_start;

  printk(KERN_INFO "demo mmap called.\n");
  if(vmsize > BUFFER_SIZE)
  {
   return -EINVAL;
  }

  vma->vm_ops=&remap_vm_ops;
  vma->vm_flags|=(VM_IO | VM_LOCKED | (VM_DONTEXPAND | VM_DONTDUMP));
  demo_vma_open(vma);
  
  if(remap_pfn_range(vma,vma->vm_start,mypfn,vmsize,vma->vm_page_prot))
  {
    return -EAGAIN;
  }

  return 0;
}