mmap 사용 방법
user단에서 kernel단에서 할당한 address를 곧장 접근할수 있도록 한다.
——————usr app ———————————-
void *uva;
uva = (char *) mmap( 0,
MMAP_SIZE,
| PROT_READ | PROT_WRITE, |
MAP_SHARED,
fd,
0 );
——————-driver[kernel]—————————-
int led_mmap(struct file *filp , struct vm_area_struct *vma )
{
| vma->vm_flags | = VM_RESERVED; |
| vma->vm_flags | = VM_IO; |
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
if(remap_pfn_range(vma,vma->vm_start, 0xE02001C0 /- PAddress*- » PAGE_SHIFT, 4096 , vma->vm_page_prot))
return -EAGAIN;
return 0;
}
static struct file_operations led_fops = {
.owner = THIS_MODULE,
.read = led_read,
.write = led_write,
.open = led_open,
.release = led_release,
.mmap = led_mmap,
};