| 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` ? |