Bonjour, le
I ont un pseudo conducteur simple assez beaucoup copié outre du cours d'instruction « de programmes pilotes de périphérique d'écriture ». Ce que j'essayais de réaliser était assignant et exportant la mémoire de grain de ce conducteur vers l'espace $$etAPP d'utilisateur. Je ne suis pas intéressé à exporter la mémoire de dispositif par conséquent que j'ai seulement employé le devmap_umem_setup au point d'entrée de devmap (). J'ai un espace $$etAPP d'utilisateur qui appelle le mmap pour appeler la routine de devmap. Basé sur les valeurs de retour de toutes les routines a impliqué tous les deux dans le conducteur tel que le ddi_umem_alloc, devmap_setup, devmap_umem_setup et l'appel de mmap dans l'utilisateur $$etAPP il est évident que la cartographie est réussie. Cependant quand je place quelque chose dans l'utilisateur $$etAPP à cette adresse de mémoire retournée par le mmap, je ne peux pas le relire du conducteur employant le ddi_umem_cookie_t. La valeur a lu de retour dans le conducteur indiqué par le biscuit est différente que l'un ensemble par l'espace $$etAPP d'utilisateur. Je n'emploie aucun excentrage dans le mmap et le devmap_umem_setup (passant 0) et la longueur étant passée est 4096. Ma question est fait le ddi_umem_cookie_t réglé par le point de ddi_umem_alloc au même endroit de mémoire (après quelque traductions d'adresse qui doivent se produire) que l'appel de mmap retournera étant donné que les excentrages sont 0 et la longueur est 1 taille de page (4096) et l'addr dans le mmap est 0.
user $$etAPP :
fd=open ( » /devices/pseudo/dummy@0 : 0 ", O_RDWR) ;
mapadd = mmap64 (0, len, (PROT_READ|PROT_WRITE), MAP_SHARED, FD, 0) ;
driver:
xsp->umem = ddi_umem_alloc (8192, DDI_UMEM_SLEEP | DDI_UMEM_PAGEABLE, et (xsp->ucookie));
error = devmap_setup (réalisateur, 0, asp, addrp, 4096, prot, maxprot, drapeaux, credp) ;
error = devmap_umem_setup (poignée, xsp->dip, NULLE, xsp->ucookie, 0, 4096, PROT_ALL, DEVMAP_DEFAULTS, NULLE) ; l'arrangement du
My était que je pourrait accéder à la mémoire indiqué le xsp->ucookie (l'espace de grain) aussi bien que du mapadd (l'espace d'utilisateur) mais ce ne semble pas être l'aide du case
Any serait beaucoup d'appreciated.
Thanks
class= de
|