| | 93 | Dans l'étape 4, nous accédons au registre de périphérique directement dans la fonction `kinit()`, ce n'est pas très |
| | 94 | simple. C'est pourquoi, nous allons ajouter un niveau d'abstraction qui représente un début de pilote de périphérique |
| | 95 | (device driver). Ce pilote, même tout petit constitue une couche logicielle avec une API. |
| | 96 | \\\\ |
| | 97 | **Objectifs** |
| | 98 | - Savoir comment créér uun début de pilote pour le terminal TTY. |
| | 99 | - Savoir comment décrire une API en C |
| | 100 | |
| | 101 | **Fichiers** |
| | 102 | {{{ |
| | 103 | 5_driver/ |
| | 104 | ├── harch.c : code dépendant de l'architecture du SoC, pour le moment c'est juste le pilote du TTY |
| | 105 | ├── harch.h : API du code dépendant de l'architecture |
| | 106 | ├── hcpu.S : code dépendant du cpu matériel en assembleur |
| | 107 | ├── kernel.ld : ldscript décrivant l'espace d'adressage pour l'éditeur de lien |
| | 108 | ├── kinit.c : fichier en C contenant le code de démarrage du noyau, ici c'est la fonction kinit(). |
| | 109 | └── Makefile : description des actions possibles sur le code : compilation, exécution, nettoyage, etc. |
| | 110 | }}} |
| 99 | | == Codes |
| 100 | | |
| 101 | | {{{#!c |
| 102 | | .section .boot,"ax",@progbits // def. of a new section: .boot (see https://bit.ly/3gzKWob) |
| 103 | | // flags "ax": a -> allocated means section put in memory |
| 104 | | // x -> section contains instructions |
| 105 | | // type @progbits: contains somethings (not just space) |
| 106 | | boot: |
| 107 | | la $26, kinit // get address of kinit() function |
| 108 | | j $26 // goto kinit() |
| 109 | | }}} |
| 110 | | |
| 111 | | [attachment:tp2_hcpu.s] |
| 112 | | |
| 113 | | == Objectif |
| 114 | | |
| 115 | | |
| 116 | | - Affichage d'un message sur le terminal avec un programme en assembleur. |
| 117 | | |
| 118 | | |
| 119 | | |
| 120 | | |
| 121 | | Questions:: |
| 122 | | |
| 123 | | - Dans quel fichier se trouve la description de l'espace d'adressage du MIPS ? |
| | 116 | |
| | 117 | - Dans quel fichier se trouve la description de l'espace d'adressage du MIPS ? |
| 143 | | - Que produit le compilateur C quand on utilise l'option -c ? |
| 144 | | {{{#!protected |
| 145 | | |
| 146 | | }}} |
| 147 | | - Que fait l'éditeur de liens ? |
| 148 | | {{{#!protected |
| 149 | | |
| 150 | | }}} |
| 151 | | - De quels fichiers a besoin l'éditeur de liens pour fonctionner ? |
| 152 | | {{{#!protected |
| 153 | | |
| 154 | | }}} |
| 155 | | - Dans quelle section se trouve le code de boot pour le compilateur ? |
| 156 | | {{{#!protected |
| 157 | | |
| 158 | | }}} |
| 159 | | - Dans quelle section se trouve le message hello pour le compilateur ? |
| 160 | | {{{#!protected |
| 161 | | |
| 162 | | }}} |
| 163 | | - Dans quelle section se trouve le code de boot dans le code exécutable ? |
| 164 | | {{{#!protected |
| 165 | | |
| 166 | | }}} |
| 167 | | - Dans quelle région de la mémoire le code de boot est placé ? |
| 168 | | {{{#!protected |
| 169 | | |
| 170 | | }}} |
| 171 | | - Comment connaît-on l'adresse du registre de sortie du contrôleur de terminal TTY ? |
| 172 | | {{{#!protected |
| 173 | | |
| 174 | | }}} |
| 175 | | - Comment sait-on que le message est fini et que le programme doit s'arrêter ? |
| 176 | | {{{#!protected |
| 177 | | |
| 178 | | }}} |
| 179 | | - Pourquoi terminer le programme par un `dead: j dead` ? |
| | 137 | - Que produit le compilateur C quand on utilise l'option -c ? |
| | 138 | {{{#!protected |
| | 139 | |
| | 140 | }}} |
| | 141 | - Que fait l'éditeur de liens ? |
| | 142 | {{{#!protected |
| | 143 | |
| | 144 | }}} |
| | 145 | - De quels fichiers a besoin l'éditeur de liens pour fonctionner ? |
| | 146 | {{{#!protected |
| | 147 | |
| | 148 | }}} |
| | 149 | - Dans quelle section se trouve le code de boot pour le compilateur ? |
| | 150 | {{{#!protected |
| | 151 | |
| | 152 | }}} |
| | 153 | - Dans quelle section se trouve le message hello pour le compilateur ? |
| | 154 | {{{#!protected |
| | 155 | |
| | 156 | }}} |
| | 157 | - Dans quelle section se trouve le code de boot dans le code exécutable ? |
| | 158 | {{{#!protected |
| | 159 | |
| | 160 | }}} |
| | 161 | - Dans quelle région de la mémoire le code de boot est placé ? |
| | 162 | {{{#!protected |
| | 163 | |
| | 164 | }}} |
| | 165 | - Comment connaît-on l'adresse du registre de sortie du contrôleur de terminal TTY ? |
| | 166 | {{{#!protected |
| | 167 | |
| | 168 | }}} |
| | 169 | - Comment sait-on que le message est fini et que le programme doit s'arrêter ? |
| | 170 | {{{#!protected |
| | 171 | |
| | 172 | }}} |
| | 173 | - Pourquoi terminer le programme par un `dead: j dead` ? |