samedi 1 septembre 2018

Chapitre 43 : Baremetal: affichage des registres et de la mémoire


Dans ce projet, nous allons préparer l’affichage des registres et de la mémoire grâce à la mini uart dont nous avons testé le fonctionnement au chapitre précèdent. En fait il nous suffit de récupérer les procèdures vues dans les premiers chapitres de ce blog et de remplacer les appels système d’affichage par des appels à la procedure d’envoi des chaines par la mini uart.
Nous stockons ces procédures dans le module util2.s et nous en profitons aussi pour écrire une fonction de lecture de chaine de caractère en utilisant la fonction de lecture d’un caractère de la miniuart. Cette fonction restera assez simple et ne prendra pas en compte l’affichage d’un curseur, le déplacement arrière de celui-ci dans la chaine pour insérer un corriger un caractère. Elle ne prend en compte que le retour arrière pour supprimer le dernier caractère saisie. Nous ajoutons aussi une procédure de comparaison de chaine que nous stockons dans le module utilchaine.s
Dans le module kernel.s, nous ajoutons le test des affichages des registres et de la mémoire puis nous créons une boucle de saisie des commandes. Pour cela nous affichons un message d’invite puis appelons la procédure de saisie d’une chaine puis la procèdure de comparaison pour déterminer quelle commande a été saisie. Ici il n’ a que la commande fin de possible.
Nous effectuons aussi une autre modification du fichier linker.ld pour modifier l’adresse de début d’exécution pour la mettre à la valeur 0X8000 , valeur indiquée dans de nombreux exemples sur Internet. Mais attention il faut indiquer au GPU cette nouvelle adresse. Il faut donc dans le fichier config.txt remplacer l’instruction kernel_old=1 par l’instruction kernel_address=0x8000.
Maintenant il ne reste plus qu’à relancer la chaine de compilation par make, corriger les erreurs éventuelles, copier le fichier kernel.img sur la carte SD (attention pas celle de votre linux habituel mais celle préparée au chapitre précèdent), placer cette dernière dans le Raspberry, brancher le câble TTL USB au micro ordinateur, lancer putty connexion série et allumer le Raspberry.
Vous devez avoir ce résultat :



Vous pouvez taper quelques commandes !! pour voir l’affichage mémoire du buffer puis la commande fin pour avoir les messages finaux. Bien sûr vous pouvez les adapter à votre gout.
A l’adresse 80D8, j’ai le vidage du registre d’état avec les 5 premiers bits qui indique le mode actuel du processeur soit la valeur 10011 correspondant au mode superviseur : intéressant non ? Pour les autres affichages on voit que l’adresse de la data et de bss correspondent bien au plan de chargement. Cela va nous faciliter la vie !!
Tout le projet est à récupérer ici.

Aucun commentaire:

Enregistrer un commentaire