**
DOCS
[__[wiki: Start]__][''Config''][__[htdocs:cours/doc_MIPS32.pdf User]__][__[wiki:Doc-MIPS-Archi-Asm-kernel Kernel]__]
— COURS
[__[htdocs:cours/Archi-1-C9-boot-2p.pdf 9]__]
**[__[htdocs:cours/Archi-1-C9-outils-annexe-2p.pdf 9bis]__]**
[__[htdocs:cours/Archi-1-C10-app-2p.pdf 10]__]
**[__[htdocs:cours/Archi-1-C10-code-annexe-2p.pdf 10bis]__]**
[__[htdocs:cours/Archi-1-C11-irq-2p.pdf 11]__]
— TD
[__[https://www-soc.lip6.fr/trac/archi-l3s5/wiki/Archi-1-TD9 9]__][__[https://www-soc.lip6.fr/trac/archi-l3s5/wiki/Archi-1-TD10 10]__][__[https://www-soc.lip6.fr/trac/archi-l3s5/wiki/Archi-1-TD11 11]__]
— TP
[__[https://www-soc.lip6.fr/trac/archi-l3s5/wiki/Archi-1-TP9 9]__][__[https://www-soc.lip6.fr/trac/archi-l3s5/wiki/Archi-1-TP10 10]__][__[https://www-soc.lip6.fr/trac/archi-l3s5/wiki/Archi-1-TP11 11]__]
— ZIP
[__[htdocs:files/kO6bin.tgz gcc...]__][__[htdocs:files/tp1.tgz 9]__][__[htdocs:files/tp2.tgz 10]__][__[htdocs:files/tp3.tgz 11]__]
[[PageOutline]]
**
{{{#!html
Configuration de l'environnement TP
}}}
En TP, vous allez compiler vos programmes pour le MIPS et les exécuter le prototype virtuel du SoC nommé **`almo1`** présenté en cours.
**`almo1`** est composé d'au moins un MIPS, d'une mémoire et de plusieurs contrôleurs de périphériques (p.ex. terminal TTY).\\Le simulateur d'**`almo1`** se présente sous la forme d'un exécutable qui simule le comportement du SoC. Le (ou les) MIPS présents exécutent les programmes se trouvant dans les bancs de mémoire d'**`almo1`**.
La simulation est complète depuis le signal reset et précise au cycle et au bit (cela signifie que si c'était une vraie machine, vous auriez exactement le même comportement de vos programmes).\\
Pour exécuter le simulateur d'**`almo1`**, vous devez disposer d'un ordinateur réel ou virtuel sur Linux. Cette page décrit comment installer votre environnement de travail.
Il y a plusieurs cas de figure:
1. Si vous travaillez dans les salles de TP de la fac à la PPTI ⟶ faites les étapes **2.2**, **3.2** et **3.3**.
1. Vous êtes sur votre ordinateur personnel sur Windows ou macOS ⟶ faites les étapes **1**, **2.1**, **3.1** et **3.3**.
1. Vous êtes sur une distribution Linux ou si vous avez déjà une VM Linux ⟶ faites les étapes **2.1**, **3.1** et **3.3**.\\
Notez que si vous suivez l'UE **réseau**, vous devriez déjà avoir l'application [https://www.virtualbox.org/wiki/VirtualBox VirtualBox] et une VM installée en état de marche, cette VM fonctionne pour l'UE d'Archi. Sinon, nous vous avons préparé une machine virtuelle utilisant !VirtualBox et une distribution !LinuxMint.
= Étape 1. Création de l'environnement de travail Linux pour les TPs
__Installation d'une machine virtuelle__
* Il existe de très bons didacticiels pour l'installation de !VirtualBox et nous préfèrons que vous les lisiez, nous ne ferons sans doute pas mieux. Si vous rencontrez un problème, pensez à utiliser les forums sur Moodle, Discord et plus généralement le web pour vous aidez. Par exemple, voici deux références sur l'installation de !VirtualBox:
- [https://fr.wikihow.com/installer-VirtualBox wikihow : Comment installer VirtualBox]
- [https://www.papergeek.fr/comment-installer-une-machine-virtuelle-linux-dans-windows-10-81428 papergeek : Comment installer une machine virtuelle linux dans windows 10]
* Récupérez le [https://drive.google.com/file/d/10vTmY9aLwkJIbCapZ_TyER5nAWOYQdI1/view?usp=sharing disque de la machine virtuelle (LinuxMint)] (compressé avec 7z). Ce fichier compressé fait 2Go.
* Décompressez le fichier, il occupe alors 12Go
* Créez une nouvelle VM dans !VirtualBox, choisir comme type **`Linux Ubuntu 64 bits`** et, comme disque, le fichier **`.vdi`** que vous venez juste de télécharger et de décompresser. Ce [https://www.eugenetoons.fr/utiliser-un-fichier-vdi-dans-virtualbox/ didacticiel sur comment utiliser un fichier vdi] peut vous aider.
* Vous n'aurez pas besoin du mot de passe au démarrage, mais si vous souhaitez ajouter une application, il vous sera demandé.\\Le mot de passe root est : **`osboxes.org`** puisque la distribution utilisée comme base a été prise sur le site [https://www.osboxes.org/ osboxes.org] sur lequel vous pouvez trouver de nombreuses machines virtuelles pour [https://www.virtualbox.org/wiki/VirtualBox VirtualBox] et pour [https://www.vmware.com/fr.html VMware].
__Configurations utiles__
* Loguez-vous sur votre Linux (soit en natif, soit sur votre VM habituelle, soit sur celle que vous venez juste d'installer)
* Si c'est la VM que vous venez d'installer, vous devez sans doute changer le configuration par défaut :
* **Configuration du Clavier** :\\La VM a été paramétrée pour un clavier PC-AZERTY. Si ce n'est pas votre clavier, vous devez changer.
* Cliquez sur l'icône **`Keyboard`** présente sur le Bureau de la VM → Une fenêtre apparaît
* Cliquez l'onglet **`Layout`** → par défaut **`Keyboard Model`** = **`Generic 105-key (PC)`** et **`Keyboard Layout`** = **`French AZERTY`**
* **`Keyboard Model`** devrait convenir au plus grand nombre, sinon sélectionner le vôtre.
* **`Keyboard Layout`** est une liste de claviers et c'est le premier de cette liste qui est utilisé.\\Si votre clavier n'est pas dans cette liste :
* Cliquez sur **`Add`**, sélectionner votre clavier et cliquez sur **`ok`**
* Le nouveau clavier apparaît en fin de liste.
* Utilisez les flèches à droite de cette liste pour mettre votre clavier en tête de liste.
* Cliquez sur **`Close`** pour fermer l'application **`Keyboard`** et tester que cela fonctionne, sinon recommencez.
* **Configuration du presse papier partagé** :\\Vous pouvez autoriser le partage du presse papier (crtl-C/ctrl-V) entre la machine hôte (Windows ou macOS) et la VM
* Allez sur la fenêtre du gestionnaire de VM (d'où vous avez lancé votre VM)
* Cliquez sur **`Général`** → la fenêtre de configuration de la VM apparaît
* Cliquez sur l'onglet **`Avancé`** → Une fenêtre apparaît avec deux menus déroulants
* Sur le menu déroulant : **`Presse-papier partagé`** sélectionnez **`Bidirectionnel`**\\→ vous pourrez faire un **`ctrl-C`** (ou `cmd-C`) sur la machine hôte et un **`ctrl-V`** (ou `cmd-V`) sur la machine invitée et inversement.
* Sur le menu déroulant : **`Glisser-Déposer`** sélectionnez **`Bidirectionnel`**\\→ vous pourrez faire un « ''Drag & Drop'' » entre la machine hôte et la VM (dans les deux sens).
* Pour faire tourner la fenêtre graphique du simulateur, vous avez besoin de la bibliothèque graphique `sdl` qui n'est pas installée par défaut. Pour l'installer, tapez la commande suivante sur un terminal: `sudo apt-get install libsdl1.2-dev` (le mot de passe est `osboxes.org`).
= Étape 2. Installation du simulateur **almo1** et de la chaîne de compilation pour MIPS
== 2.1. Vous êtes sur votre ordinateur
* Démarrez la machine virtuelle (ou réelle si vous êtes nativement sur Linux)
* Dans le cas où vous êtes sur votre propre VM ou distribution (et non celle que nous vous proposons), vous devez commencez par vérifier que vous avez l'application **`xterm`** sur votre distribution Linux. **`xterm`** est le terminal de commande que va utiliser **`almo1`** pour les TTY et **`xterm`** n'est pas toujours installé par défaut.
* Si vous ne l'avez pas vous devez l'installer avec **`sudo apt-get install xterm`**\\(si vous êtes sur une distribution debian ou ses dérivés : ubuntu, linux-mint, etc.)
* Démarrez un navigateur web sur votre Linux et chargez la page de l'UE : **`https://frama.link/AS5`** (c'est un raccourci de l'[https://www.wikiwand.com/fr/Uniform_Resource_Locator URL] de la page que vous êtes en train de lire **`https://www-soc.lip6.fr/trac/archi-l3s5/wiki/Howto-TP`**)
* Récupérez l'archive contenant le **[htdocs:files/kO6bin.tgz simulateur almo1 et la chaîne de compilation pour MIPS]** (en cliquant sur ce lien)
* Placez l'archive à la racine de votre compte et ouvrez un terminal
* Décompressez l'archive avec la commande : **`tar xvf kO6bin.tgz`** à la racine de votre compte. **`kO6`** est le nom que nous avons donné au petit ''système d'exploitation'' s'exécutant sur **`almo1`**
* Si vous avez bien placé l'archive à la racine de votre compte, déplacez-vous dans le répertoire **`kO6`** : **`cd $HOME/kO6`**
* Éditez le fichier **`$HOME/.bashrc`** et ajoutez au début **`source $HOME/kO6/bin/SourceMe.sh`**. Ce script modifie quelques variables d'environnement telle que **`PATH`** qui permet de définir les répertoires dans lesquels le shell **`bash`** trouve ses exécutables (ici la chaîne de compilation pour le MIPS et le simulateur **`almo1`**.
* Exécutez pour cette fois le **`.bashrc`** (parce que vous venez juste de le modifier) en tapant **`source $HOME/.bashrc`**. Vous pouvez aussi ouvrir un nouveau terminal, celui-ci exécutera le script **`.bashrc`** avant d'afficher le prompt (l'invite de commande en français).
* Vous pouvez placer le répertoire **`kO6`** ailleurs qu'à la racine, voire le renommer, mais pour que cela fonctionne vous devez éditer la première ligne du fichier **`kO6/bin/SourceMe.sh`**, toutefois dans les textes des TP, nous ferons l'hypothèse que le répertoire **`kO6`** est la racine du compte.
== 2.2. Vous êtes sur un des ordinateurs de la fac
* Éditez votre fichier **`$HOME/.bashrc`** et ajoutez au début:\\**`source /Infos/lmd/2023/licence/ue/LU3IN029-2023oct/kO6/bin/SourceMe.sh`**\\
Ce script modifie quelques variables d'environnement telle que **`PATH`** qui permet de définir les répertoires dans lesquels le shell **`bash`** trouve ses exécutables (ici la chaîne de compilation pour le MIPS et le simulateur **`almo1`**.
* Exécutez pour cette fois le **`.bashrc`** (parce que vous venez juste de le modifier)\\ **`source $HOME/.bashrc`**\\
Vous pouvez aussi ouvrir un nouveau terminal, celui-ci exécutera le script **`.bashrc`** avant d'afficher le prompt (l'invite de commande en français).
= Étape 3. Test : compilation et exécution d'un test
== 3.1. Vous êtes sur votre ordinateur
* Sur votre distribution Linux, entrez la commande: **`cd $HOME/kO6/bin/test; make exec`**
* Pour l'interprétation, allez à l'étape **3.3**
== 3.2. Vous êtes sur un des ordinateurs de la fac à la PPTI
* Nous supposons que vous travaillez pour cette partie de l'UE dans le répertoire **`$HOME/kO6`**.\\
Vous pouvez vous organiser différemment et travailler dans un autre répertoire.
* Créez votre répertoire de travail, s'il n'existe pas encore: **`mkdir $HOME/kO6`**
* Allez dans votre répertoire de travail: **`cd $HOME/kO6`**
* Récupérez le répertoire de test: **`cp -r /Infos/lmd/2023/licence/ue/LU3IN029-2023oct/kO6/bin/test .`**
* Entrez la commande: **`cd $HOME/kO6/bin/test; make exec`**
* Pour l'interprétation, allez à l'étape **3.3**
== 3.3. Vérification
* __Si cela fonctionne :
* Le simulateur du SoC **'almo1'** démarre.
* Dans le terminal où vous avez lancé la commande précédente, vous devez voir la bannière du simulateur **`almo1`** (**`SystemCASS`**) suivie d'informations sur l'architecture simulée (sans importance pour vous actuellement) et un compteur d'horloge qui s'incrémente tous les millions de cycles simulés.
* vous devez voir apparaître quatre fenêtres **`xterm`** avec le message "numéro --> Hello World!" et une fenêtre graphique contenant l'image de Wall-E (le petit robot des studios PIXAR)\\
* Ces messages et cette image sont écrits par le programme qui s'exécute sur le MIPS.
* Pour arrêter la simulation, tapez **`ctrl-C`** sur le terminal de lancement du simulateur.
* __Si cela ne fonctionne pas :
* Si vous êtes sur votre propre machine, vous n'avez peut-être pas placé le répertoire **`kO6`** à la racine de votre compte.
Vous avez le droit, mais vous devez modifier la première ligne du fichier **`kO6/bin/SourceMe.sh`** et indiquer le bon répertoire.
* Si le shell vous répond **`command not found`** ou **`commande inconnue`**, c'est que vous n'avez pas ''sourcé'' le fichier **`SourceMe.sh`**. Vous pouvez le vérifier en tapant la commande **`almo1.x`**
{{{#!comment
= Remarques générales
* Utilisez un **vrai** éditeur de code **moderne**, tel que **`code`** (Visual Studio Code) (ou **`[g]vim`**, **`[x]emacs`** ou **`sublime-text`**) afin de profiter d'une aide à la programmation avec, par exemple, des fenêtres popup pour les prototypes. **`code`** est installé sur la VM !LinuxMint. Si vous utilisez votre propre VM, je vous conseille de l'installer.
* Vous allez devoir utiliser l'interpréteur de commande **`shell`** de Linux et quelques commandes. Si vous avez l'habitude d'utiliser la souris, il va falloir vous faire un peu violence, mais dîtes-vous que c'est pour votre bien! Vous devrez parfois utiliser des commandes que vous ne connaissez pas, soyez curieux et tentez un **`man`** sur la commande (ou une recherche sur le web, c'est bien aussi).
}}}