mmap pour superposer le bus VME dans la mémoire de l’espace utilisateur via un port PCI?

StackOverflow https://stackoverflow.com/questions/1212874

  •  06-07-2019
  •  | 
  •  

Question

J'essaie de mapper un espace d'adressage VME via un bus PCI sur un espace utilisateur afin de pouvoir effectuer des lectures / écritures régulières en mémoire. Je l'ai fait avec un autre périphérique PCI comme celui-ci: -

unsigned long *mapArea(unsigned int barAddr, unsigned int mapSize, int *fd)
{
    unsigned long *mem;

    *fd = open("/dev/mem", O_RDWR);
    if ( *fd<0 ) {
       printf("Cannot open /dev/vme_mem\n");
    exit(-1);
}

unsigned long *mem = (unsigned long*) mmap ( 0, mapSize, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, *fd,  barAddr); 
if ( (mem == NULL) || (mem == (unsigned long*)-1) ) {
    printf ( "Cannot map memory, error is %s\n", strerror(errno) );
    exit(-1);
    }

    return mem;
}

volatile unsigned long *bar = (volatile unsigned long *)mapArea(barAddr, mapSize, &fd);

Et ensuite "bar" peut être utilisé normalement pour les lectures / écritures.

Donc, pour VME, et avec une puce de pont PCI-VME Tundra Universe II: -

Dois-je ouvrir " / dev / vme_m0 " Où puis-je cartographier ma barre? lspci -vv: "Région 1: Mémoire à 80020000"

De plus, les adresses dans le bus VME sont décalées de 0x20000000. Comment cela fonctionne-t-il pour y accéder / le mapper?!

(Utilisation de Linux 2.6.18-128.el5 # 1 SMP) (Besoin d'un nouveau tag "vme"!)

Était-ce utile?

La solution

D'où vient / dev / vme_m0 et que représente-t-il? Il est difficile de dire quelle ouverture et quel accès le fera sans en savoir plus.

Vous devez consulter le manuel de la puce de pont pour savoir comment une lecture / écriture en Région 1 se traduira par une lecture / écriture sur le bus VME. La puce de pont doit avoir un ensemble de registres qui définissent PCI - > Traductions d'adresses VME. L’adresse VME générée en accédant à 0x80020000 dépend de l’adresse VME spécifiée dans l’un de ces registres.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top