Anonymous
Гость
|
|
« : 23-04-2004 10:10 » |
|
cat /proc/1334/maps ... 4014a000-40163000 rw-p 003e0000 03:02 201881 /dev/forev0 ...
все верно, но попытки записи по 4014a000 в приложении не приводят к изменению данных на странице (у меня отдельный IOCTL, который печатает весь dma буфер)
при загрузке dma = kmalloc(10*0x1000, GFP_KERNEL | GFP_ATOMIC);
mmap() { unsigned long offset; offset = vma->vm_pgoff << PAGE_OFFSET; // в vma->vm_pgoff передается _pa(dma), полученный через IOCTL (тут все верно наверняка) vma->vm_flags |= VM_RESERVED; if (remap_page_range(vma, vma->vm_start, offset, vma->vm_end-vma->vm_start,vma->vm_page_prot)) return -EAGAIN; return 0; }
вызов mmap в приложениее
char * mapdev(int fd , int offset, int size) { char *addr; addr = mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, offset); if (addr == MAP_FAILED) return addr; return (addr); }
|