raspbian

TP2-ARCH-02 : Le nano-ordinateur RPi#

Objectifs pédagogiques#

  • Prise en main d’un Raspberry Pi 4

  • Explorer le système d’exploitation Linux

  • Connaître le système de fichier UNIX

  • Acquérir les bases d’un language de scripting avec BASH

  • Connaître les différents outils de développement à disposition

Qu’est-ce qu’un Raspberry Pi (RPi)#

Le Raspberry Pi est un projet développé à l’origine par l’Université de Cambridge en Angleterre. L’objectif principal du projet était de démocratiser l’accès aux ordinateurs. Les contraintes liées étaient donc :

  1. Utilisation de matériel à bas coût (notamment le processeur)

  2. Design extrêmement compact : taille d’une carte de crédit

  3. Système d’exploitation et logiciels provenant du monde des logiciels libres

Le résultat est le suivant (ici la version 4 que nous allons utiliser dans ce TP)

rpi4

Son prix à l’unité est de quelques dizaines de francs suisses auxquels il faut ajouter un écran (HDMI), un clavier et une souris.

Composants MATÉRIELS du Raspberry Pi#

L’architecture du RPi suit celle de tous les ordinateurs classiques actuels : les laptops, les ordinateurs de bureau, les smartphones, etc.. Cette architecture est nommée Architecture de Von Neumann.

von Neumann

Elle décompose l’ordinateur en 4 parties distinctes :

  1. Unité Arithmétique et Logique (Arithmetic and Logical Unit ALU en anglais). Effectue les opérations du programme

  2. Unité de contrôle. Se charge du séquençage des opérations

  3. Mémoire. Elle contient à la fois les opérations du programme et les données

  4. Des entrées et sorties.

Processeur#

Le processeur, appelé aussi Unité Centrale de Calcul, est le composant électronique qui traite l’ensemble des instructions en utilisant les données localisées (1) dans ses mémoires cache ou (2) dans la mémoire centrale (RAM).

Sur un Raspberry Pi, c’est l’architecture ARM qui a été choisie.

Le processeur est composé de :

  1. Une horloge. Elle est responsable de la synchronisation des flux de calculs et de données

  2. Des Unité Arithmétique et Logique. Ces ALU permettent de traiter les instructions du programme

  3. Des registres. Ce sont des mémoires de très petite taille servant à stocker les variables du programme.

  4. De trois BUS. Un bus permet de transmettre des données :

    1. Le bus de données. Permet de transmettre les donnée de et vers le processeur

    2. Le bus d’adresses. Permet de connaître la position d’une donnée (dans les registres ou la mémoire)

    3. Le bus de contrôle. Permet de gérer les différentes interruptions qui pourraient arriver lors de l’exécution d’un programme

Le processeur du RPi 4 est un ARM Cortex-A72. Il a les caractéristiques suivantes :

  1. L’horloge tourne à 1.5 GHz

  2. 4 coeurs (qui contiennent chacun des ALU)

  3. La largeur de ses registres est de 64 bits

Mémoire(s)#

Le Raspberry Pi possède deux types de mémoire :

  1. La mémoire vive (ou mémoire volatile). On y stocke les programmes et les données lorsque l’ordinateur est allumé. Une fois éteint, toutes les données qui y sont contenues sont perdues.

  2. La mémoire de stockage (ou mémoire de masse ou encore mémoire non-volatile). On y stocke les programme et les données qui seront conservées à l’extinction de l’ordinateur.

Il est d’usage de représenter les différents types de mémoires dans un schéma hiérarchique qui met en évidence la capacité (ou taille), la vitesse et le coût :

memoire

Les mémoires du RPi 4 ont les caractéristiques suivantes :

  1. 4 GB de mémoire vive

  2. Une carte micro-SD de 16 GB

Ports matériels#

Les ports (externes) d’un ordinateur sont les différentes “prises” sur lesquels on peut brancher des périphériques tels qu’un clavier, une souris, un écran ou un câble réseau.

Sur le RPi, les ports sont les suivants :

  1. 2x ports USB 2.0

  2. 2x ports USB 3.0 (plus rapides)

  3. 1x port GigaEthernet pour la connexion à un réseau filaire

  4. 2x ports micro-HDMI pour connecter des écrans

A noter que le port USB-C ne sert qu’à l’alimentation du RPi, on ne peut l’utiliser comme entrée-sortie

Composants LOGICIELS du Raspberry Pi#

Pour que l’ensemble des composants matériels fonctionnent ensembles et correctement, un ordinateur a besoin d’un logiciel très important : le système d’exploitation (Operating System ou OS en anglais). Sans lui, aucun programme ne pourrait s’exécuter.

os

Il existe beaucoup de systèmes d’exploitation. Chacun possède ses propres spécificités et est prévu pour différents matériels ou usage. Parmi les principaux on peut citer :

  • appleMac OS qui est installé sur les ordinateurs de la marque Apple

  • windows Microsoft Windows principalement installé sur les ordinateurs de bureau dans l’industrie

  • android Android qui gère la plupart des smartphone du monde. Android est une variante de Linux

  • linux Linux qui est un projet open source basé sur l’un des tout premiers systèmes d’exploitation : UNIX

Voir Statcounter pour une distribution mondiale des principaux systèmes d’exploitation.

Système d’exploitation#

Le système d’exploitation du RPi est Linux.

Applications#

Le RPi dispose en outre de beaucoup d’applications telles que :

  • Suite de bureautique Libreoffice

  • Programmes de développement (Thonny, etc..)

  • Logiciels éducatifs

  • Jeux

  • Etc..

On peut en installer autant que l’on veut jusqu’à concurrence de la taille de la mémoire de masse.

Licences#

L’ensemble logiciel (système d’exploitation et applications) est en licence Open Source

Exercice 1 : Mise en place#

Le matériel à disposition se trouve sur le chariot. Par groupe, vous devez monter votre ordinateur :

  1. clavier USB-2

  2. souris USB-2

  3. câble micro-HDMI vers HDMI de l’écran

  4. câble USB-C pour l’alimentation (ne pas le brancher au secteur tout de suite)

Exercice 2 : Installation d’un système d’exploitation#

Nous allons travailler avec Raspberry Pi OS qui est le système d’exploitation officiel des RPi. Il s’agit de l’installer sur la carte micro-SD :

  1. Insérer la carte SD dans le lecteur de cartes

  2. Insérer le lecteur de carte dans un port USB libre sur votre ordinateur Mac

  3. lancer le programme “Raspberry Pi Imager”

  4. Choisir le bon système d’exploitation (version pour RPi 4, 64 bits)

  5. Configurer un nom d’utilisateur (nous y reviendrons)

  6. Lancer l’installation

Une fois l’installation terminée, vous pouvez retirer la carte SD du lecteur et l’insérer dans le RPi et brancher le câble d’alimentation au secteur.

Votre ordinateur devrait démarrer

Exercice 3 : Explorer le bureau#

Voilà, vous êtes normalent connecté.e avec l’identifiant que vous avez choisi lors de l’exercice précédent. Vous remarquez que vous n’avez pas dû donner le mot de passe choisi. La raison : il n’y a actuellement qu’un seul utilisateur enregistré sur l’ordinateur, et cet utilisateur n’a pas tous les droits. Il est par contre possible de lui upgrader ses droits en superutilisateur avec le mot de passe. Nous y reviendrons.

desktop

L’icône framboise dans le coin supérieur gauche donne accès aux différentes applications :

  • Programmation

  • Internet

  • Sound&Video

  • Graphics

  • Accessories

  • etc..

Lancez Thonny et programmez un helloworld.py

Exercice 4 : Le système de fichiers#

Dans le coin supérieur gauche, à côté de l’icône framboise se trouve le File Manager. Il permet d’accéder au système de fichier du RPi.

Un système de fichiers Linux est un système hiérarchisé en arbre. La racine est symbolisée par / :

FS.

Trouvez le contenu du fichier :

  • /etc/firefox/firefox.js

  • /home/votre_nom_utilisateur/.bashrc

  • /var/log/boot.log

Certains ne sont pas visibles, d’autres sont interdits. Pourquoi ?

Exercice 5 : Le terminal et le langage BASH#

Lorsqu’on travaille avec un ordinateur sous Linux, il est assez rare de n’utiliser que la souris. L’interaction avec l’ordinateur se fait au travers d’un terminal.

  • Ouvrez un terminal

Voici quelques commandes qui permettent de naviguer dans le système de fichier :

  • pwd : affiche la position courante

  • cd : permet de changer de dossier

  • ls -la : permet de lister les fichiers présents dans un dossier

  • cat nom_de_fichier : permet d’afficher le contenu du fichier nom_de_fichier

Il existe deux faux répertoires très important et qui sont présents dans tous les dossiers (à l’exception de /) :

  • le dossier courant : .

  • le dossier parent : ..

Exercice 6 : Afficher des contenus protégés ou cachés#

A l’exercice 4, on a vu que /var/log/boot.log était interdit d’accès et que /home/votre_nom_utilisateur/.bashrc était invisible.

Dans le terminal, essayez d’upgrader vos permissions en devenant superutilisateur. Cela se fait avec la commande sudo:

sudo cat /var/log/boot.log

!!! ATTENTION : le mode superutilisateur permet de tout faire, y compris de tout casser !!!

Exercice 7 : Demander de l’aide#

Chaque commande BASH possède une aide pré-installée qui liste l’entier des possibilités de la commande. On utilise pour se faire man:

man ls

affiche toutes les options possibles de la commande ls.

En vous servant de l’aide.

  • Affichez le dernier fichier créé dans votre répertoire personnel

  • Affichez les fichiers du répertoire personnel dans l’ordre chronologique de création

Exercice 8 : la redirection dans BASH#

L’opérateur > permet de rediriger le résultat d’une commande vers un fichier. Par exemple :

cd
ls / > racine.txt

permet de rediriger le résultat de la commande ls à la racine / vers le fichier racine.txt

Redirigez le contenu complet de votre répertoire personnel vers un fichier content.txt et affichez-le

Exercice 9 : La recherche d’expressions régulières : grep#

Les expressions régulières dans BASH sont des chaînes de caractères. On peut rechercher une expression régulière dans un fichier avec la commande grep

Recherchez le fichier .config dans le fichier content.txt que vous avez créé à l’exercice précédent

Exercice 10 : Le pipeline de commande#

L’outil BASH devient extrêmement puissant lorsqu’on l’utilise en pipeline, c’est à dire en flux de commandes. On peut combiner plusieurs commandes BASH séparées par le sigle |:

Commande-1 | Commande-2 | ...| Commande-N

On lit ce flux de gauche à droite, la première commande Commande-1 se servira d’entrée à la seconde, etc..

Ainsi :

ls ~ | grep .config 

est équivalent à l’exercice précédent

Recherchez le fichier /bin/ls et ses droit avec un pipeline et les commandes vues jusqu’à l’exercice 9

Exercice 11 : Un peu d’assembleur ?#

Il existe un compilateur : gcc qui permet de compiler n’importe quel code source en C.

Voici un programme en Python :

a = 3
b = 4
c = a + b
print(c)

son équivalent en C est le suivant :

#include <stdio.h>
int main(){
	int a, b, c;
	a = 3;
	b = 4;
	c = a + b;
	printf("%i \n",c);
	return 0;
}
  • créez un fichier appelé addition.c et recopiez les instructions dans ce fichier.

  • compilez ce programme en utilisant le compilateur gcc : gcc addition.c

  • vous obtiendrez un fichier exécutable appelé a.out que l’on peut exécuter : ./a.out

En supprimant l’affichage, on obtient :

#include <stdio.h>
int main(){
	int a, b, c;
	a = 3;
	b = 4;
	c = a + b;
	return 0;
}

Pour obtenir les instructions assembleur, on peut compiler le code en assembleur avec l’option gcc -S

  • compilez le programme sans l’affichage : gcc -S addition.c -o addition.asm

  • affichez le contenu du fichier addition.asm

  • analysez le résultat