![]() |
Projet PAF : Développement d'un petit système d'exploitation |
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.
Commencez par cloner votre dépôt git. Demandez à votre encadrant de le créer, si ce n’est pas déjà fait.
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.).
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
).
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) :
Makefile
: le Makefile permettant de tout compiler efficacementcrt0.s
: le code de mise en place de l’environnement d’exécution Cinit_bss.c
: quelques fonctions relatives à cette mise en place et qui peuvent être écrites en Cmain.c
: le fichier qui contient la fonction main
ld_ram.lds
: le script d’édition des liensirq.c
: gestion des interruptionsirq.h
: gestion des interruptions (entêtes)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 :
crt0.s
?data
est-elle recopiée ?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).