Changes between Version 17 and Version 18 of Archi-1-TP9


Ignore:
Timestamp:
Nov 15, 2020, 7:45:35 PM (4 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v17 v18  
    77Si ce n'est pas encore fait, vous devez lire la page décrivant les [WikiStart#obj_gen objectifs généraux] des séances, le [WikiStart#prin_peda principe pédagogique] choisi et le [WikiStart#fonc_sean fonctionnement des séances].
    88
     9
     10
    911= Présentation des étapes
     12
    1013
    1114
     
    7174   Le prototype de SoC que nous utilisons pour les TP est configurable. Il est possible par exemple de choisir le nombre
    7275   terminaux texte (TTY). Par défaut, il y en a un mais, nous pouvons en avoir jusqu'à 4. Nous allons modifier le code du
    73    noyau pour s'adapter à cette variabilité.
     76   noyau pour s'adapter à cette variabilité. En outre, pour le moment, nous ne faisions qu'écrire sur le terminal,
     77   maintenant, nous allons aussi lire le clavier.
    7478   \\\\
    7579   **Objectifs**
    7680   - Savoir comment compiler un programme C avec du code conditionnel.
    77    - Comment décrire en C l'ensemble des registre d'un contrôleur de périphérique et y accéder.
     81   - Savoir comment décrire en C l'ensemble des registres d'un contrôleur de périphérique et y accéder.
    7882 
    7983 **Fichiers**
     
    8791
    8892 [#driver 5. driver]::
     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{{{
     1035_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}}}
    89111   
    90  **Fichiers**
    91 {{{
    92 }}}
    93    
    94 
    95 {{{#!comment ——————————————————————————————————————————————————————————————————————————————————————————————————
    96 }}}
     112
     113
    97114=  [=#hcpu_s 1. Premier programme en assembleur dans la seule section de boot]
    98115
    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 ?
    124118{{{#!protected
    125119''
     
    127121''
    128122}}}
    129  - Dans quel fichier se trouve le code de boot et pourquoi l'avoir nommé ainsi ? (la réponse est dans le fichier)
     123- Dans quel fichier se trouve le code de boot et pourquoi l'avoir nommé ainsi ? (la réponse est dans le fichier)
    130124{{{#!protected
    131125''
     
    134128''
    135129}}}
    136  - A quelle adresse démarre le MIPS ? Où peut-on le vérifier ?
     130- A quelle adresse démarre le MIPS ? Où peut-on le vérifier ?
    137131{{{#!protected
    138132''
     
    141135''
    142136}}}
    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` ?
    180174{{{#!protected
    181175