LINUX.ORG.RU

Сообщения artembond

 

pci_alloc_consistent mmap to user space как идеологически правильно сделать?

Есть плата. У нее есть куча буфферов DMA в разных направлениях. Есть и IO мемори-мапет область. В связи с тем что мне нужно много RAM, буферы DMA идут не цельным куском. Ну и IO области платы тоже отдельным куском.

Не могу понять как это все на userspace отмапить. На каждый буфер или IO делать отдельный файл в /dev/ явно криво получается. Глянул исходники, там все без особых изысков. Чую что что-то не так делаю.

 mmap kernel pci dma

artembond
()

pci_alloc_consistent mmap to user space

artembond

0

1 pci_alloc_consistent mmap to user space

Народ у когонить вообще получалось? io память PCIe карточки отмапить получилось. Теперь пытаюсь отмапить DMA память компа куда эта карточка пишет. пока только это получил при попытки прочитать память из userspace.

a.out: Corrupted page table at address 7f29e935b010
PGD 137b12067 PUD 137b69067 PMD 136ca5067 PTE ffff88011ec00237
Bad pagetable: 000d [#1] SMP 
CPU 3 
dmaRxMain.cpuRX это виртуальный адрес (в kernel адрессном пространстве) буффера DMA.
pfn = virt_to_phys(bus_to_virt(dmaRxMain.cpuRX)) >> PAGE_SHIFT; 
vma->vm_page_prot  = pgprot_noncached(vma->vm_page_prot);
vma->vm_flags |= VM_IO;

if (io_remap_pfn_range(vma, vma->vm_start, pfn,0x80000*8, vma->vm_page_prot)) {
	printk(KERN_ERR "mmap: io_remap_pfn_range failed 2 \n");
	return -EAGAIN;
}

 kernel dma pci

artembond
()

RSS подписка на новые темы