- 论坛徽章:
- 0
|
想在驱动中实现mmap方法,将arm的0x10000000映射给应用程序的mmap调用
驱动中的mmap实现是:
static int mmapdrv_mmap(struct file *filp, struct vm_area_struct *vma)
{
vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
vma->vm_pgoff = ( (u32)0x10000000 >> PAGE_SHIFT);
if (remap_pfn_range (vma,vma->vm_start,vma->vm_pgoff,
vma->vm_end-vma->vm_start,vma->vm_page_prot))
return -EAGAIN;
vma->vm_ops = &mmapdrv_remap_vm_ops;
vma->vm_flags |= VM_RESERVED;
mmapdrv_vma_open(vma);
return 0;
}
应用程序是:
unsigned char *mptr = mmap(0, 0xFF, PROT_READ | PROT_WRITE, MAP_FILE | MAP_
SHARED, fd, 0);
while(1) {
*mptr =0x55;
*mptr =0xAA;
}
用示波器看,发现管脚电平没有反应。不知道什么地方每弄对。 |
|