Je développe un module noyau Linux qui s'interface avec un composant matériel accédant au DDR en utilisant DMA. (En cours d'exécution sur un système sur puce de bras)Vider une plage d'adresses virtuelles
ce que le conducteur fait essentiellement est allouer un tampon (p/kmalloc), et à écrire l'adresse physique (en utilisant virt_to_phys) du tampon au matériel sous-jacent
Lorsque la lecture de la mémoire tampon , les anciennes données semblent être lues, ce qui indique un problème de cache (lors de l'inspection directe du DDR, en ignorant Linux, les nouvelles données sont lues).
Je n'arrive pas à comprendre comment fonctionne le vidage/invalidation de la mémoire cache.
Quelle est la meilleure approche?
En utilisant le noyau 3,14
Merci. Puis-je utiliser l'une ou l'autre des méthodes pour allouer de la mémoire physiquement contiguë? –
sur dma_alloc_coherent vous obtenez un tampon de mémoire physiquement continue. Si vous utilisez dma_map_single, vous devez lui passer un tampon alloué en continu (alloué par exemple en utilisant kmalloc) –