Le problème en mode user est que tu manipules des adresses virtuelles, alors qu'un controleur DMA va travailler sur des adresses physiques. Et à ma connaissance, il n'y a pas moyen de connaitre le mapping en userland sans aide. Qui plus est, le noyau est susceptible de procéder à des remplacements de pages de manière complètement transparente, ce qui change le mapping (bien qu'avec mlock() on doit pouvoir s'en affranchir). Enfin, un contrôleur DMA va généralement signaler la fin de son travail par une IRQ, et on ne peut pas installer de handler d'interruption en userland.
J'avais vu un jour un patch pour gérer du PCI en userland et aussi des IRQ (sauf que les shared IRQ c'était pas supporté), et je crois pas que le DMA était géré. Je retrouve pas le nom là, même avec de la recherche google. Mais bon, ça me paraissait ultra-crade personnellement.
Mon conseil: fais ça sous forme de module, tu te simplifieras grandement la vie.
# Mémoire physique et mémoire virtuelle
Posté par galactikboulay . En réponse au message Driver pour une carte DSP PCI. Évalué à 2.
J'avais vu un jour un patch pour gérer du PCI en userland et aussi des IRQ (sauf que les shared IRQ c'était pas supporté), et je crois pas que le DMA était géré. Je retrouve pas le nom là, même avec de la recherche google. Mais bon, ça me paraissait ultra-crade personnellement.
Mon conseil: fais ça sous forme de module, tu te simplifieras grandement la vie.