LDD3 (p: 453) демонстрирует dma_map_single
с использованием буфера, переданного в качестве параметра.
bus_addr = dma_map_single(&dev->pci_dev->dev, buffer, count, dev->dma_dir);
Q1 : Что / где это делает буфер поступает из?
kmalloc
?
Q2 : Почему в DMA-API-HOWTO.txt указано, что я могу использовать необработанный kmalloc
в DMA?
Form http://www.mjmwired.net/kernel/Documentation/DMA-API-HOWTO.txt
L: 51 Если вы приобрели свою память через распределитель страниц kmalloc (), то вы можете DMA в / из этой памяти используя адреса, возвращаемые этими подпрограммами.
L: 74 вы не можете принять ответ на вызов kmap () и DMA в / из этого.
kmalloc
, на мое аппаратное устройство? virt_to_bus
? dma_map_single
? Q3 : Могу ли я прочитать данные в драйвере ядра по адресу kmalloc
, когда передача DMA завершится?
addr = kmalloc(...);
...
printk("test result : 0x%08x\n", addr[0]);
Q4 : Как лучше всего поместить это в пространство пользователя?
copy_to_user
?