| 9 | La carte Raspberry Pi est composée d'un système sur puce (System-on-Chip, SoC) BCM2835 de chez Broadcom. Ce SoC est composé de deux Memory Management Units (MMUs). |
| 10 | |
| 11 | La première MMU est intégrée au processeur ARM 11 du SoC. La seconde est une MMU "gros grain" au niveau du SoC lui même. La première MMU est une unité de gestion des translation d'adresse "classique" tandis que la seconde MMU permet de remanier le placement mémoire des périphériques du SoC. |
| 12 | |
| 13 | * Qu'est-ce que la mémoire virtuelle ? Pourquoi l'utilisée et dans quel contexte ? |
| 14 | |
| 15 | * Qu'est-ce qu'une MMU ? |
| 16 | |
| 17 | * Comment fonctionne la traduction d'adresse avec un seul niveau de MMU ? Qu'est-ce qu'une table des pages ? Qu'est-ce qu'un défaut de page ? |
| 18 | |
| 19 | * Pourquoi utiliser plusieurs niveau de table de pages ? |
| 20 | |
| 21 | * Pourquoi utiliser une seconde MMU ? Quel est sont fonctionnement ? |
| 22 | |
| 25 | Nous fonctionnons sur un système à mémoire virtuelle et dès lors l'accès aux registres mappés en mémoire nécessite des opérations particulières. En particulier, il est nécessaire de passer par l'appel utilisateur mmap, dont le prototype est le suivant: |
| 26 | |
| 27 | {{{ |
| 28 | void * mmap ( void * addr, size_t length, int prot, int flags, int fd, off_t offset ); |
| 29 | }}} |
| 30 | |
| 31 | et sa réciproque: |
| 32 | |
| 33 | {{{ |
| 34 | int munmap ( void * addr, size_t length ); |
| 35 | }}} |
| 36 | |
| 37 | L'appel système mmap permet de récupérer un pointeur vers une zone mémoire donnée en paramètres. A l'inverse, munmap permet de libérer l'association entre le pointeur fourni par mmap et la zone mémoire associée lors de l'appel à mmap. |
| 38 | |
| 39 | * Pourquoi faut-il passer par un appel système pour accèder aux registres mappés en mémoire ? |
| 40 | |
| 41 | Pour accéder aux entrées/sorties mappées en mémoire, on utilise le mapping configuré dans le noyau Linux. Ce mapping est accessible depuis le fichier /dev/mem. |
| 42 | |
| 43 | * Comment utiliser /dev/mem avec l'appel système mmap pour récupérer un pointeur vers une zone mémoire correspondante à un contrôleur d'entées/sorties (dans notre cas, le contrôleur GPIO) ? |
| 44 | |
| 45 | * Sachant que l'adresse de base du contrôleur de GPIO est 0x20200000, quels serait le |
| 46 | |