Semaine Athens Linux Device Drivers


Environnement de TP

Carte de TP

Carte Terasic DE1-SoC
Carte Terasic DE1-SoC

Les développements réalisés pendant cette semaine auront pour cible la carte DE1-SoC. Il s’agit d’une carte basée autour d’un FPGA Altera Cyclone V SoC.

Ce FPGA se décompose en deux parties :

La carte DE1-SoC peut donc être vue comme une carte à base de processeur ARM (tout comme les cartes Raspberry Pi, Olimex OLinuXino, BeagleBone, etc.) avec comme avantage principale la partie FPGA qui permet de développer des modules matériels spécialisés (et donc des pilotes pour ces périphériques !). En ce sens, c’est une carte très adaptée pour ce cours.

Documentation

Carte SD

La partie HPS de la carte démarre grâce à une carte micro-SD. Cette carte contient :

Merci de prendre bien soin de cette carte micro-SD (nous n’en avons pas un stock illimité). C’est également cette carte qui définit l’adresse MAC de l’interface réseau (et donc son adresse IP) donc merci de ne pas les échanger avec les autres cartes.

Mise en place de l’environnement de travail

PATH

Le noyau fourni a été compilé avec la suite de compilation (toolchain) GCC fournie par Linaro version 6.3.1. Pour compiler les différents modules que vous allez écrire pendant cette semaine, vous aurez besoin du même compilateur.

Modifiez donc votre variable d’environnement PATH afin d’y inclure le répertoire suivant :

/comelec/softs/opt/gnu_tools_for_arm/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin

Vous pouvez le faire pour l’interpréteur de commande en cours d’exécution en tapant la commande suivante :

$ export PATH=$PATH:/comelec/softs/opt/gnu_tools_for_arm/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin

Pour que ce changement soit persistant, il faut modifier directement la configuration de votre interpréteur de commande. Par exemple, si vous utilisez zsh (ce qui est la configuration par défaut à l’école, tapez la commande ps pour vous en assurer), modifiez le fichier ~/.zshrc pour y ajouter la ligne suivante (par exemple à la fin du fichier) :

export PATH=$PATH:/comelec/softs/opt/gnu_tools_for_arm/gcc-linaro-6.3.1-2017.02-x86_64_arm-linux-gnueabihf/bin

Relancez ensuite votre interpréteur de commande pour prendre en compte ce changement.

Si vous travaillez sur votre propre ordinateur, la chaîne de compilation est téléchargeable depuis cette adresse.

Création d’un répertoire de travail

Pour travailler, vous allez récupérer une copie du noyau. Cette copie prend beaucoup de place (plus de 2 Gio). Or, comme le quota imposé sur votre répertoire personnel est assez limité, vous risquez de vous retrouver bloqué.

Les machines de TP disposent d’un répertoire /home/users/ local (il n’est pas partagé avec les autres machines) dans lequel il y a normalement beaucoup de place libre. Lorsque vous vous connectez sur une machine de la salle, si votre nom d’utilisateur est XXX, un répertoire /home/users/XXX est automatique créé (s’il n’existe pas déjà). Les fichiers présents dans ce répertoire ne sont pas comptés dans votre quota, mais attention, il est local à la machine, c’est-à-dire que les données que vous y mettez ne sont pas accessibles directement depuis les autres machines contrairement à votre répertoire personnel, et il n’est pas sauvegardé.

Dans la suite du texte, remplacez /home/users/XXX par le répertoire ainsi créé.

Récupération du dépôt du noyau

Vous utiliserez les sources du noyau Linux fournies par Altera (le fabriquant du FPGA). Une archive contenant le clone du dépôt officiel d’Altera, la branche choisie (4.17) et le résultat de la configuration et de la compilation (pour produire le noyau qui est sur la carte SD) est fournie.

Copiez cette archive et décompressez là (dans /home/users/XXX) :

$ cd /home/users/XXX
$ cp ~duc/enseignements/tpt35/linux-socfpga.tar.xz .
$ tar xJf linux-socfpga.tar.xz

Utilisation d’un dépôt git pour votre travail

Tout votre travail (les réponses aux diverses questions ainsi que vos développements) sera effectué dans un dépôt git.

Si vous n’avez jamais utilisé git ou si vous avez besoin d’un rafraîchissement, vous pouvez consulter :

Clé SSH

L’authentification avec le serveur gérant le dépôt git s’effectue à l’aide d’une clé SSH.

Création

Si vous êtes étudiant à l’école, peut être en avez-vous déjà une. Pour vérifier, tapez la commande :

$ ls ~/.ssh

Si vous voyez un fichier id_rsa et id_rsa.pub vous avez déjà une clé SSH !

Sinon, ou si vous n’êtes pas étudiant à l’école (et donc vous n’avez pas encore de clé SSH), créez-en une à l’aide de la commande :

$ ssh-keygen

Le mot de passe demandé à la création de la clé permet de protéger la partie privée de la clé (celle qui sert à vous authentifier). Vous pouvez choisir de ne pas en mettre ou, si vous en mettez un (ce qui est recommandé), il peut être différent du mot de passe utilisé pour vous connecter sur les stations de l’école.

Utilisation

Dans la suite, à chaque fois que vous allez synchroniser votre dépôt avec le serveur, git aura besoin de la clé SSH pour vous authentifier auprès du serveur. Le plus simple, pour éviter d’avoir à taper le mot de passe de la clé à chaque fois (si vous en avez mis un), est de taper, en début de session :

$ ssh-add

Cette commande ajoute votre clé à l’agent d’authentification ssh-agent (ou autre en fonction notamment de l’environnement de bureau que vous utilisez). Elle sera utilisée par la suite automatiquement quand vous en aurez besoin (jusqu’à ce que vous vous déconnectiez).

Création du dépôt

Les dépôts sont hébergés sur la plate-forme gitlab de l’école. Voici la procédure pour demander la création de votre dépôt :

  1. Commencez par vous connecter sur la plate-forme gitlab. Pour les élèves de l’école, de l’ENSTA ParisTech et Mines ParisTech, utilisez l’authentification à l’aide de Shibboleth (le système d’authentification unique) grâce au bouton ad-hoc en dessous des champs utilisateur et mot de passe.

  2. Ajoutez la clé SSH que vous avez créée précédemment dans les préférences de votre compte.

  3. Ouvrez la page du groupe tpt35/2018 en cliquant sur ce lien et demandez à faire partie du groupe.

  4. Le responsable du module validera alors (manuellement) la demande et le dépôt sera crée. Cette étape prendra quelques minutes (en fonction de la disponibilité).

Clone du dépôt

Une fois votre dépôt créé par le responsable du module (il vous préviendra), il sera visible sur la page listant vos projets. Ouvrez-le et récupérez l’URL du dépôt (de la forme git@gitlab.enst.fr:tpt35/2018/xxx.git).

Vous pouvez maintenant le cloner à l’aide de la commande (de préférence dans le répertoire /home/users/XXX créé précédemment) :

$ git clone git@gitlab.enst.fr:tpt35/2018/xxx.git

Cela créera un répertoire xxx (que vous pouvez renommer) et qui contiendra un clone du dépôt.

Configurez git

Si c’est la première fois que vous utilisez git dans le contexte de l’école, il faut le configurer :

$ git config --global user.name "Prénom Nom"
$ git config --global user.email "votre adresse mail"
$ git config --global core.editor "votre éditeur favori" #(nano, vi, emacs...)
$ git config --global color.ui true

Dernière remarque sur git

Vous allez avoir deux dépôts git distincts : un sur le serveur gitlab.enst.fr et un autre sur la machine, dans le répertoire dans lequel vous avez cloné le premier dépôt.

Quand vous réaliserez des commits, ceux-ci seront enregistrés dans votre dépôt sur votre machine. Or, votre encadrant n’a accès qu’au dépôt sur le serveur. Pensez-donc, en plus de commiter régulièrement, à pousser régulièrement (git push) vos modifications vers le serveur.

Prise en main de la carte DE1-SoC

Allumez la carte (gros bouton rouge) si elle ne l’est pas déjà.

Connexion

Dans toutes les consignes qui suivent (et pour le reste de la semaine), remplacez a406 par a405 si vous êtes dans la salle A405.

Votre carte est connectée au réseau et vous allez vous y connecter à distance en SSH.

Votre carte porte une étiquette verte sur laquelle est inscrit A406-YYYY est un nombre entre 1 et 16.

Le nom (au sens DNS) de votre carte sera alors a406-YY-arm.enst.fr (en gardant l’éventuel 0 non significatif à gauche, exemple : si votre carte est A406-05 son nom sera a406-05-arm.enst.fr).

Connectez-vous y en tapant :

$ ssh root@a406-YY-arm.enst.fr

ssh va vous indiquer qu’il ne connaît pas la clé publique de la carte et donc qu’il ne sait pas vérifier si vous vous connectez bien à la bonne carte. Répondez yes ici.

Le mot de passe par défaut est de1soc.

Ajout d’un utilisateur

Commencez par modifier le mot de passe root sur la carte à l’aide de la commande passwd (pour éviter que vos camarades vous jouent des tours :-).

root@de1soc:~# passwd

Comme il ne faut jamais travailler en tant que root directement, créez ensuite un utilisateur normal et ajoutez-le au groupe sudo (remplacez toto par le nom d’utilisateur de votre choix) :

root@de1soc:~# adduser toto
root@de1soc:~# adduser toto sudo

Déconnectez-vous puis reconnectez-vous avec le nouvel utilisateur :

root@de1soc:~# exit
$ ssh toto@a406-YY-arm.enst.fr

Lorsque vous aurez besoin d’exécuter des commandes avec les privilèges root sur la carte (comme par exemple insmod pour charger un module), vous pourrez utiliser la commande sudo, exemple :

toto@de1soc:~$ sudo insmod zzz.ko

Clé SSH

Maintenant que vous avez créé une clé SSH pour vous connecter au dépôt git, vous pouvez également vous en servir pour vous connecter automatiquement sur la carte de TP. Pour cela, il faut copier la partie publique de votre clé (par défaut ~/.ssh/id_rsa.pub) dans le fichier .ssh/authorized_keys sur la carte.

Depuis la carte :

toto@de1soc:~$ mkdir ~/.ssh

Depuis le PC :

$ scp ~/.ssh/id_rsa.pub toto@a406-YY-arm.enst.fr:.ssh/authorized_keys

Déconnectez-vous de la carte et reconnectez-vous y.

SSHFS

La dernière étape consiste à configurer un partage entre la machine sur laquelle vous travaillez et la carte afin de pouvoir facilement échanger des fichiers entre les deux (par exemple les modules compilés sur le PC et destinés à être chargés sur la carte).

Pour des questions de simplicité, nous vous recommandons d’utiliser SSHFS qui permet de monter un système de fichier distant via SSH.

Pour monter sur la carte un répertoire via SSHFS :

toto@de1soc:~$ mkdir mnt
toto@de1soc:~$ sshfs -o allow_root user@a406-ZZ.enst.fr:/home/users/XXX mnt

a406-ZZ est le nom du PC sur lequel vous travaillez et /home/users/XXX le répertoire local sur le PC.

Le contenu du répertoire mnt sera alors le même que /home/users/XXX sur la machine sur laquelle vous travaillez.

Pour démonter le répertoire (avant d’éteindre la carte par exemple) :

toto@de1soc:~$ fusermount -u ~/mnt

Extinction de la carte

N’éteignez pas brutalement la carte, vous risquez de corrompre les systèmes de fichiers de la carte SD !

Avant d’éteindre physiquement la carte, éteignez Linux :

toto@de1soc:~$ sudo halt

Et attendez quelques secondes après la déconnexion avant d’éteindre la carte.

Voilà, votre environnement devrait maintenant être prêt pour la suite.


Retour au sommaire du cours


© Copyright 2017 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