¿La dirección DMA devuelta desde esta llamada es la misma que la dirección física? LDD3 dice que el controlador debe tratar la dirección DMA como opaca. Quiero mapear este buffer DMA para que el espacio de usuario pueda leer/escribir directamente en él. La pregunta es qué PFN debería especificar para el remap_pfn_range (lo que para mi grata sorpresa ahora (kernel 3.4+) funciona para la memoria convencional igual que para la memoria de E/S). ¿Puedo simplemente convertir la dirección DMA a unsigned long y convertir eso a PFN? ¿No es esto una violación de lo que LDD3 dijo acerca de la opacidad?Algunas preguntas sobre dma_alloc_coherent
¿
dma_alloc_coherent
siempre usa__get_free_pages
internamente? ¿Significa esto que la región siempre está potencialmente sobreasignada (ya que la primera función toma bytes pero la segunda función asigna unidades de páginas)?¿Hay alguna manera de configurar una asignación de transmisión única para varias páginas consecutivas obtenida de la llamada al
__get_free_pages
?dma_map_page
se aplica solo a páginas individuales.
16
A
Respuesta
11
No, la dirección devuelta es una dirección virtual, de lo contrario no sería capaz de acceder a él desde el espacio del núcleo. Es dma_handle que representa la dirección física, pero es opaca. Necesita usar virt_to_phys en la dirección que devuelve y luego pasarlo a remap_pfn_range.
No creo que sí (aunque es probable que dependa de la plataforma), pero asigna páginas. Si desea cantidades más pequeñas de memoria para DMA, debe usar dma_pool_create y luego asignar regiones desde allí.
Puede usar dma_map_single en lugar de dma_map_page.
le recomiendo consultar DMA-API.txt para más detalles sobre algunas de estas cosas.
Cuestiones relacionadas
- 1. Algunas preguntas sobre notificaciones push?
- 2. Algunas preguntas básicas sobre 'delayed_job'
- 3. Algunas preguntas sobre el servicio de Grails
- 4. Algunas preguntas sobre HierarchyId (SQL Server 2008)
- 5. Algunas preguntas sobre OAuth y Android
- 6. Algunas preguntas sobre multiprocesamiento en java,
- 7. Algunas preguntas sobre las mónadas en Haskell
- 8. Algunas preguntas sobre el trabajo con db4o
- 9. algunas preguntas sobre el uso de ConcurrentDictionary
- 10. Algunas preguntas sobre la sincronización de subprocesos
- 11. Algunas preguntas de clasificación
- 12. Algunas preguntas generales C
- 13. iostream, algunas preguntas
- 14. algunas preguntas sobre el orden de búsqueda del enlazador GCC
- 15. Algunas preguntas sobre la configuración .vimrc y vim
- 16. Algunas preguntas sobre la convención de nomenclatura de C#
- 17. Tengo algunas preguntas sobre el desarrollo web (PHP y MySQL)
- 18. Algunas preguntas sobre una matriz de instancia única en typedef
- 19. Algunas preguntas sobre los operadores bit a bit
- 20. Algunas preguntas básicas sobre javax vs java packages
- 21. Algunas preguntas sobre cómo jquery selectores atraviesan el dom
- 22. Algunas preguntas sobre escribir en la corriente de respuesta ASP.NET
- 23. Algunas preguntas básicas de Python
- 24. jQuery - algunas preguntas de principiante
- 25. Algunas preguntas MVVM (WPF C#)
- 26. Preguntas básicas sobre SNMP
- 27. Algunas preguntas de la plantilla D
- 28. Algunas preguntas simples de XNA/HLSL
- 29. Algunas preguntas con pacman path finding
- 30. Preguntas sobre C bitfields
¿ha encontrado la forma correcta de conectar la memoria dma a la memoria remap_pfn_range? – Luca