• # Mémoire physique et mémoire virtuelle

    Posté par . En réponse au message Driver pour une carte DSP PCI. Évalué à 2.

    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.