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