Projet PAF : Développement d'un petit système d'exploitation


Initialisation

La première étape avant toute chose est d’être capable de démarrer et d’initialiser correctement la plate-forme (qu’elle soit virtuelle comme QEMU ou physique) et d’être capable d’y exécuter correctement du code. C’est l’objectif de cette première étape.

Récupération du dépôt

Commencez par cloner votre dépôt git. Demandez à votre encadrant de le créer, si ce n’est pas déjà fait.

Code d’initialisation

Le dépôt est déjà rempli avec un premier squelette de programme en C (dans le répertoire src) qui se contente de faire l’initialisation de la plate-forme, la mise en place d’un environnement d’exécution C et d’afficher un petit message pour vérifier que tout va bien.

Ce code a été écrit pour vous car il fait appel à de nombreuses notions qui sont étudiées en SE203 et donc que vous n’avez pas encore vues. Néanmoins, un peu plus bas, il vous sera demandé d’essayer de le comprendre, au moins dans ses grandes lignes (pas de panique, votre encadrant est là).

Vous constaterez également que la partie initialisation de la plate-forme est très réduite, QEMU étant relativement laxiste sur ce point. Si vous désirez exécuter ce code sur une vraie carte physique, plusieurs choses seraient à rajouter (notamment configuration de l’arbre d’horloges, configuration propre de l’UART, etc.).

Compilation & Exécution

Une fois le code récupéré, commencez par le compiler :

$ make

Si tout s’est bien passé et qu’il n’y a pas de message d’erreur, vous devriez vous retrouver avec un fichier main.bin qui contient une image mémoire prête à être exécutée sur la plate-forme virtuelle.

Nous allons donc maintenant lancer QEMU :

$ qemu-system-arm -M lm3s6965evb -nographic -kernel main.bin

Vous devriez voir apparaître la lettre A en début de ligne indiquant que tout va bien. Le programme ne fait plus rien ensuite, vous pouvez donc arrêter QEMU (Ctrl-A X).

Compréhension du code

Maintenant, vous allez essayer de comprendre les grandes lignes du code qui vous est donné.

Voici le contenu du répertoire (classé dans l’ordre dans lequel je vous conseille de parcourir une première fois les fichiers) :

En parcourant ces fichiers, vous allez aborder un certain nombre de concepts importants à comprendre avant d’aller plus loin :

Prenez votre temps pour essayer de comprendre le code. N’hésitez pas à interagir longuement avec votre encadrant.

Il faut en particulier répondre aux questions suivantes :

  1. Quelles sont les différentes parties (sections) qui composent l’exécutable ? Que contiennent-elles ?
  2. À quelles adresses sont placées ces différentes sections au moment du chargement de l’image ?
  3. À quelles adresses ces sections se trouvent lors de l’exécution du code ?
  4. Que fait le code assembleur dans crt0.s ?
  5. En quoi consiste l’initialisation de la section BSS ?
  6. Pourquoi la section data est-elle recopiée ?
  7. Comment se passe le dialogue avec les périphériques (notamment l’UART) ?
  8. À quoi correspond la table vector_table définie dans irq.c ?

Discutez avec votre encadrant avant d’aller plus loin, c’est-à-dire à la page suivante.


© Copyright 2020 Guillaume Duc. Le contenu de cette page est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International (à l'exception des exemples de code tirés du noyau Linux et qui sont distribués sous leurs licences d'origine).

Licence
Creative Commons